From 7b5f25e7325e11d5e9e6fea97b064051f40f0572 Mon Sep 17 00:00:00 2001 From: Matthias Loy Date: Thu, 14 Aug 2014 20:54:35 +0200 Subject: [PATCH 1/3] free does nothing if parameter equals NULL --- src/lib_json/json_value.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp index 637016f3b..30c1208bd 100644 --- a/src/lib_json/json_value.cpp +++ b/src/lib_json/json_value.cpp @@ -105,8 +105,7 @@ static inline char *duplicateStringValue(const char *value, /** Free the string duplicated by duplicateStringValue(). */ static inline void releaseStringValue(char *value) { - if (value) - free(value); + free(value); } } // namespace Json From b51f16a4e1f9747ae0a7c914d00fe29ab0bf7f3f Mon Sep 17 00:00:00 2001 From: Matthias Loy Date: Thu, 14 Aug 2014 20:58:02 +0200 Subject: [PATCH 2/3] snprintf already calculated the length --- src/lib_json/json_writer.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp index 77ed27dce..dcbbe1be9 100644 --- a/src/lib_json/json_writer.cpp +++ b/src/lib_json/json_writer.cpp @@ -74,15 +74,18 @@ std::string valueToString(double value) { #if defined(_MSC_VER) && defined(__STDC_SECURE_LIB__) // Use secure version with // visual studio 2005 to // avoid warning. + size_t len; #if defined(WINCE) - _snprintf(buffer, sizeof(buffer), "%.16g", value); + len = _snprintf(buffer, sizeof(buffer), "%.16g", value); #else - sprintf_s(buffer, sizeof(buffer), "%.16g", value); + len = sprintf_s(buffer, sizeof(buffer), "%.16g", value); #endif + fixNumericLocale(buffer, buffer + len); #else if ( isfinite( value )) - { - snprintf(buffer, sizeof(buffer), "%.16g", value); + { + size_t len = snprintf(buffer, sizeof(buffer), "%.16g", value); + fixNumericLocale(buffer, buffer + len); } else { @@ -99,12 +102,8 @@ std::string valueToString(double value) { { snprintf(buffer, sizeof(buffer), "1e+9999"); } - // nothing more to do, return. - return buffer; } - #endif - fixNumericLocale(buffer, buffer + strlen(buffer)); return buffer; } From 21bfaec23ae46801fea90776befa982cd2533d16 Mon Sep 17 00:00:00 2001 From: mloy Date: Tue, 19 Aug 2014 14:34:00 +0200 Subject: [PATCH 3/3] snprintf does return a signed integer assert if returned value is neagtive --- src/lib_json/json_writer.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp index dcbbe1be9..71bd86028 100644 --- a/src/lib_json/json_writer.cpp +++ b/src/lib_json/json_writer.cpp @@ -74,17 +74,19 @@ std::string valueToString(double value) { #if defined(_MSC_VER) && defined(__STDC_SECURE_LIB__) // Use secure version with // visual studio 2005 to // avoid warning. - size_t len; + int len; #if defined(WINCE) len = _snprintf(buffer, sizeof(buffer), "%.16g", value); #else len = sprintf_s(buffer, sizeof(buffer), "%.16g", value); #endif + assert(len>=0); fixNumericLocale(buffer, buffer + len); #else if ( isfinite( value )) { - size_t len = snprintf(buffer, sizeof(buffer), "%.16g", value); + int len = snprintf(buffer, sizeof(buffer), "%.16g", value); + assert(len>=0); fixNumericLocale(buffer, buffer + len); } else