From 9a12a76855cdcaf41a6e9c0f501c0e7222de49c2 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Fri, 17 Nov 2017 15:47:10 -0800 Subject: [PATCH] Fix overflow when iterating through 0-length lists backwards --- CHANGELOG.md | 1 + serial.cpp | 4 ++-- tile.cpp | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7e95f4..e92a822 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ * Add tippecanoe-json-tool for sorting and joining GeoJSON files * Fix problem where --detect-shared-borders could simplify polygons away * Attach --coalesce-smallest-as-needed leftovers to the last feature, not the first +* Fix overflow when iterating through 0-length lists backwards ## 1.26.7 diff --git a/serial.cpp b/serial.cpp index d5e896f..7bbbd80 100644 --- a/serial.cpp +++ b/serial.cpp @@ -515,7 +515,7 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf) { exit(EXIT_FAILURE); } - for (ssize_t i = sf.full_keys.size() - 1; i >= 0; i--) { + for (ssize_t i = (ssize_t) sf.full_keys.size() - 1; i >= 0; i--) { if (sst->exclude_all) { if (sst->include->count(sf.full_keys[i]) == 0) { sf.full_keys.erase(sf.full_keys.begin() + i); @@ -569,7 +569,7 @@ int serialize_feature(struct serialization_state *sst, serial_feature &sf) { } } - for (ssize_t i = sf.full_keys.size() - 1; i >= 0; i--) { + for (ssize_t i = (ssize_t) sf.full_keys.size() - 1; i >= 0; i--) { if (sf.full_values[i].type == mvt_null) { sf.full_keys.erase(sf.full_keys.begin() + i); sf.full_values.erase(sf.full_values.begin() + i); diff --git a/tile.cpp b/tile.cpp index 18e3c0c..8298584 100644 --- a/tile.cpp +++ b/tile.cpp @@ -1631,7 +1631,7 @@ long long write_tile(FILE *geoms, long long *geompos_in, char *metabase, char *s } // Attach any pieces that were waiting to be coalesced onto some features that did make it. - for (ssize_t i = coalesced_geometry.size() - 1; i >= 0; i--) { + for (ssize_t i = (ssize_t) coalesced_geometry.size() - 1; i >= 0; i--) { for (ssize_t j = partials.size() - 1; j >= 0; j--) { if (partials[j].layer == coalesced_geometry[i].layer && partials[j].t == coalesced_geometry[i].t) { for (size_t k = 0; k < coalesced_geometry[i].geometry.size(); k++) {