diff --git a/geojson-loop.cpp b/geojson-loop.cpp index ab0cd9db..199c6531 100644 --- a/geojson-loop.cpp +++ b/geojson-loop.cpp @@ -29,7 +29,7 @@ static void json_context(json_object *j) { char *s = json_stringify(j); if (strlen(s) >= 500) { - sprintf(s + 497, "..."); + snprintf(s + 497, strlen(s) + 1 - 497, "..."); } fprintf(stderr, "in JSON object %s\n", s); diff --git a/jsontool.cpp b/jsontool.cpp index 66c0d833..bb5341b8 100644 --- a/jsontool.cpp +++ b/jsontool.cpp @@ -114,7 +114,7 @@ std::string sort_quote(const char *s) { for (size_t i = 0; i < utf32.size(); i++) { if (utf32[i] < 0xD800) { char buf[8]; - sprintf(buf, "\\u%04lu", utf32[i]); + snprintf(buf, sizeof(buf), "\\u%04lu", utf32[i]); ret.append(std::string(buf)); } else { unsigned long c = utf32[i]; diff --git a/main.cpp b/main.cpp index 7ce29bc5..bbb73ded 100644 --- a/main.cpp +++ b/main.cpp @@ -723,9 +723,9 @@ void radix1(int *geomfds_in, int *indexfds_in, int inputs, int prefix, int split sub_geompos[i] = 0; char geomname[strlen(tmpdir) + strlen("/geom.XXXXXXXX") + 1]; - sprintf(geomname, "%s%s", tmpdir, "/geom.XXXXXXXX"); + snprintf(geomname, sizeof(geomname), "%s%s", tmpdir, "/geom.XXXXXXXX"); char indexname[strlen(tmpdir) + strlen("/index.XXXXXXXX") + 1]; - sprintf(indexname, "%s%s", tmpdir, "/index.XXXXXXXX"); + snprintf(indexname, sizeof(indexname), "%s%s", tmpdir, "/index.XXXXXXXX"); geomfds[i] = mkstemp_cloexec(geomname); if (geomfds[i] < 0) { @@ -1187,10 +1187,10 @@ std::pair read_input(std::vector &sources, char *fname, i char geomname[strlen(tmpdir) + strlen("/geom.XXXXXXXX") + 1]; char indexname[strlen(tmpdir) + strlen("/index.XXXXXXXX") + 1]; - sprintf(poolname, "%s%s", tmpdir, "/pool.XXXXXXXX"); - sprintf(treename, "%s%s", tmpdir, "/tree.XXXXXXXX"); - sprintf(geomname, "%s%s", tmpdir, "/geom.XXXXXXXX"); - sprintf(indexname, "%s%s", tmpdir, "/index.XXXXXXXX"); + snprintf(poolname, sizeof(poolname), "%s%s", tmpdir, "/pool.XXXXXXXX"); + snprintf(treename, sizeof(treename), "%s%s", tmpdir, "/tree.XXXXXXXX"); + snprintf(geomname, sizeof(geomname), "%s%s", tmpdir, "/geom.XXXXXXXX"); + snprintf(indexname, sizeof(indexname), "%s%s", tmpdir, "/index.XXXXXXXX"); r->poolfd = mkstemp_cloexec(poolname); if (r->poolfd < 0) { @@ -1649,7 +1649,7 @@ std::pair read_input(std::vector &sources, char *fname, i // Serial reading of chunks that are then parsed in parallel char readname[strlen(tmpdir) + strlen("/read.XXXXXXXX") + 1]; - sprintf(readname, "%s%s", tmpdir, "/read.XXXXXXXX"); + snprintf(readname, sizeof(readname), "%s%s", tmpdir, "/read.XXXXXXXX"); int readfd = mkstemp_cloexec(readname); if (readfd < 0) { perror(readname); @@ -1702,7 +1702,7 @@ std::pair read_input(std::vector &sources, char *fname, i checkdisk(&readers); ahead = 0; - sprintf(readname, "%s%s", tmpdir, "/read.XXXXXXXX"); + snprintf(readname, sizeof(readname), "%s%s", tmpdir, "/read.XXXXXXXX"); readfd = mkstemp_cloexec(readname); if (readfd < 0) { perror(readname); @@ -1837,7 +1837,7 @@ std::pair read_input(std::vector &sources, char *fname, i } char poolname[strlen(tmpdir) + strlen("/pool.XXXXXXXX") + 1]; - sprintf(poolname, "%s%s", tmpdir, "/pool.XXXXXXXX"); + snprintf(poolname, sizeof(poolname), "%s%s", tmpdir, "/pool.XXXXXXXX"); int poolfd = mkstemp_cloexec(poolname); if (poolfd < 0) { @@ -1917,7 +1917,7 @@ std::pair read_input(std::vector &sources, char *fname, i } char indexname[strlen(tmpdir) + strlen("/index.XXXXXXXX") + 1]; - sprintf(indexname, "%s%s", tmpdir, "/index.XXXXXXXX"); + snprintf(indexname, sizeof(indexname), "%s%s", tmpdir, "/index.XXXXXXXX"); int indexfd = mkstemp_cloexec(indexname); if (indexfd < 0) { @@ -1933,7 +1933,7 @@ std::pair read_input(std::vector &sources, char *fname, i unlink(indexname); char geomname[strlen(tmpdir) + strlen("/geom.XXXXXXXX") + 1]; - sprintf(geomname, "%s%s", tmpdir, "/geom.XXXXXXXX"); + snprintf(geomname, sizeof(geomname), "%s%s", tmpdir, "/geom.XXXXXXXX"); int geomfd = mkstemp_cloexec(geomname); if (geomfd < 0) { diff --git a/mvt.cpp b/mvt.cpp index b4365863..4c21716e 100644 --- a/mvt.cpp +++ b/mvt.cpp @@ -481,7 +481,7 @@ static std::string quote(std::string const &s) { buf.push_back(ch); } else if (ch < ' ') { char tmp[7]; - sprintf(tmp, "\\u%04x", ch); + snprintf(tmp, sizeof(tmp), "\\u%04x", ch); buf.append(std::string(tmp)); } else { buf.push_back(ch); diff --git a/read_json.cpp b/read_json.cpp index 460fcb26..166df57d 100644 --- a/read_json.cpp +++ b/read_json.cpp @@ -45,7 +45,7 @@ void json_context(json_object *j) { char *s = json_stringify(j); if (strlen(s) >= 500) { - sprintf(s + 497, "..."); + snprintf(s + 497, strlen(s) + 1 - 497, "..."); } fprintf(stderr, "in JSON object %s\n", s); diff --git a/text.cpp b/text.cpp index 0449c7cd..0d0f0460 100644 --- a/text.cpp +++ b/text.cpp @@ -46,7 +46,7 @@ std::string check_utf8(std::string s) { out += " "; } char tmp[6]; - sprintf(tmp, "0x%02X", s[i + j] & 0xFF); + snprintf(tmp, sizeof(tmp), "0x%02X", s[i + j] & 0xFF); out += std::string(tmp); } out += ")"; diff --git a/tile.cpp b/tile.cpp index fd489fc6..9e9d13c4 100644 --- a/tile.cpp +++ b/tile.cpp @@ -2331,11 +2331,11 @@ long long write_tile(decompressor *geoms, std::atomic *geompos_in, ch p.full_keys.push_back("point_count_abbreviated"); sv4.type = mvt_string; if (point_count >= 10000) { - sprintf(abbrev, "%.0fk", point_count / 1000.0); + snprintf(abbrev, sizeof(abbrev), "%.0fk", point_count / 1000.0); } else if (point_count >= 1000) { - sprintf(abbrev, "%.1fk", point_count / 1000.0); + snprintf(abbrev, sizeof(abbrev), "%.1fk", point_count / 1000.0); } else { - sprintf(abbrev, "%lld", point_count); + snprintf(abbrev, sizeof(abbrev), "%lld", point_count); } sv4.s = abbrev; p.full_values.push_back(sv4); @@ -3021,7 +3021,7 @@ int traverse_zooms(int *geomfd, off_t *geom_size, char *stringpool, std::atomic< int subfd[TEMP_FILES]; for (size_t j = 0; j < TEMP_FILES; j++) { char geomname[strlen(tmpdir) + strlen("/geom.XXXXXXXX" XSTRINGIFY(INT_MAX)) + 1]; - sprintf(geomname, "%s/geom%zu.XXXXXXXX", tmpdir, j); + snprintf(geomname, sizeof(geomname), "%s/geom%zu.XXXXXXXX", tmpdir, j); subfd[j] = mkstemp_cloexec(geomname); // printf("%s\n", geomname); if (subfd[j] < 0) {