From 41c026796deccf1933e6770bfd0375f88faad462 Mon Sep 17 00:00:00 2001 From: Eric Fischer Date: Thu, 2 Nov 2017 16:33:14 -0700 Subject: [PATCH] Port fix for array index out of bounds in decimal conversion https://github.com/miloyip/dtoa-benchmark/issues/7 commit fe550f38669fe0f488926c1ef0feb6c101f586d6 Author: Eli Fidler Date: Tue May 31 11:51:37 2016 -0400 avoid array index out-of-bounds UBSAN gave "runtime error: index 13 out of bounds for type 'const uint32_t [10]'" --- CHANGELOG.md | 4 ++++ milo/dtoa_milo.h | 3 ++- version.hpp | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b57aa47ab..1bd023b28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.26.4 + +* Array bounds bug fix in binary to decimal conversion library + ## 1.26.3 * Guard against impossible coordinates when decoding tilesets diff --git a/milo/dtoa_milo.h b/milo/dtoa_milo.h index d6821ed95..02c8c0849 100644 --- a/milo/dtoa_milo.h +++ b/milo/dtoa_milo.h @@ -284,7 +284,8 @@ inline void DigitGen(const DiyFp& W, const DiyFp& Mp, uint64_t delta, std::strin kappa--; if (p2 < delta) { *K += kappa; - GrisuRound(buffer, *len, delta, p2, one.f, wp_w.f * kPow10[-kappa]); + int index = -static_cast(kappa); + GrisuRound(buffer, *len, delta, p2, one.f, wp_w.f * (index < 9 ? kPow10[-static_cast(kappa)] : 0)); return; } } diff --git a/version.hpp b/version.hpp index f45cace8a..fb26719da 100644 --- a/version.hpp +++ b/version.hpp @@ -1,6 +1,6 @@ #ifndef VERSION_HPP #define VERSION_HPP -#define VERSION "tippecanoe v1.26.3\n" +#define VERSION "tippecanoe v1.26.4\n" #endif