From 9d25afa41f8982cd6aeca0c61bd934eb47989d50 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Fri, 10 Jul 2015 10:26:23 -0700 Subject: [PATCH] Fix buffer overflow in length of temporary file names --- tile.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tile.cc b/tile.cc index 1d5d8d27..f99cacc8 100644 --- a/tile.cc +++ b/tile.cc @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -27,6 +28,9 @@ extern "C" { #define CMD_BITS 3 +#define XSTRINGIFY(s) STRINGIFY(s) +#define STRINGIFY(s) #s + // https://github.com/mapbox/mapnik-vector-tile/blob/master/src/vector_tile_compression.hpp static inline int compress(std::string const &input, std::string &output) { z_stream deflate_s; @@ -793,7 +797,7 @@ int traverse_zooms(int *geomfd, off_t *geom_size, char *metabase, char *stringpo int subfd[(1 << MAX_ZOOM_INCREMENT) * (1 << MAX_ZOOM_INCREMENT)]; int j; for (j = 0; j < (1 << MAX_ZOOM_INCREMENT) * (1 << MAX_ZOOM_INCREMENT); j++) { - char geomname[strlen(tmpdir) + strlen("/geom2.XXXXXXXX") + 1]; + char geomname[strlen(tmpdir) + strlen("/geom.XXXXXXXX" XSTRINGIFY(INT_MAX)) + 1]; sprintf(geomname, "%s/geom%d.XXXXXXXX", tmpdir, j); subfd[j] = mkstemp(geomname); // printf("%s\n", geomname);