From b5e9d933ad5232a1585f8bc8dfe7860e17dad57f Mon Sep 17 00:00:00 2001 From: Renaud Guillard Date: Sun, 4 Jun 2017 21:10:19 +0200 Subject: use snprintf instead of sprintf --- src/pugixml.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 56d7c75..9973999 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -4632,7 +4632,8 @@ PUGI__NS_BEGIN PUGI__FN bool set_value_convert(String& dest, Header& header, uintptr_t header_mask, float value) { char buf[128]; - sprintf(buf, "%.9g", value); + snprintf(buf, 128, "%.9g", value); + buf[127] = '\0'; return set_value_ascii(dest, header, header_mask, buf); } @@ -4641,7 +4642,8 @@ PUGI__NS_BEGIN PUGI__FN bool set_value_convert(String& dest, Header& header, uintptr_t header_mask, double value) { char buf[128]; - sprintf(buf, "%.17g", value); + snprintf(buf, 128, "%.17g", value); + buf[127] = '\0'; return set_value_ascii(dest, header, header_mask, buf); } @@ -7997,9 +7999,8 @@ PUGI__NS_BEGIN PUGI__FN void convert_number_to_mantissa_exponent(double value, char* buffer, size_t buffer_size, char** out_mantissa, int* out_exponent) { // get a scientific notation value with IEEE DBL_DIG decimals - sprintf(buffer, "%.*e", DBL_DIG, value); - assert(strlen(buffer) < buffer_size); - (void)!buffer_size; + snprintf(buffer, buffer_size, "%.*e", DBL_DIG, value); + buffer[buffer_size - 1] = '\0'; // get the exponent (possibly negative) char* exponent_string = strchr(buffer, 'e'); -- cgit v1.2.3 From 810f1f600d5366fc3d3f95189ce2fe7699532e25 Mon Sep 17 00:00:00 2001 From: Renaud Guillard Date: Mon, 5 Jun 2017 13:31:58 +0200 Subject: use _snprintf if MSVC --- src/pugixml.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 9973999..37a62fc 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -4632,7 +4632,11 @@ PUGI__NS_BEGIN PUGI__FN bool set_value_convert(String& dest, Header& header, uintptr_t header_mask, float value) { char buf[128]; +#if defined(PUGI__MSVC_CRT_VERSION) + _snprintf(buf, 128, "%.9g", value); +#else snprintf(buf, 128, "%.9g", value); +#endif buf[127] = '\0'; return set_value_ascii(dest, header, header_mask, buf); @@ -4642,7 +4646,11 @@ PUGI__NS_BEGIN PUGI__FN bool set_value_convert(String& dest, Header& header, uintptr_t header_mask, double value) { char buf[128]; +#if defined(PUGI__MSVC_CRT_VERSION) + _snprintf(buf, 128, "%.17g", value); +#else snprintf(buf, 128, "%.17g", value); +#endif buf[127] = '\0'; return set_value_ascii(dest, header, header_mask, buf); @@ -7999,7 +8007,11 @@ PUGI__NS_BEGIN PUGI__FN void convert_number_to_mantissa_exponent(double value, char* buffer, size_t buffer_size, char** out_mantissa, int* out_exponent) { // get a scientific notation value with IEEE DBL_DIG decimals +#if defined(PUGI__MSVC_CRT_VERSION) + _snprintf(buffer, buffer_size, "%.*e", DBL_DIG, value); +#else snprintf(buffer, buffer_size, "%.*e", DBL_DIG, value); +#endif buffer[buffer_size - 1] = '\0'; // get the exponent (possibly negative) -- cgit v1.2.3 From 0d8022eced90223e593d499af23317407abc5c18 Mon Sep 17 00:00:00 2001 From: Renaud Guillard Date: Sun, 11 Jun 2017 18:33:28 +0200 Subject: use snprintf if available, _snprintf or sprintf otherwise --- src/pugixml.cpp | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 37a62fc..25606d2 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -127,6 +127,10 @@ using std::memset; # define PUGI__MSVC_CRT_VERSION _MSC_VER #endif +#if (defined(PUGI__MSVC_CRT_VERSION) && (PUGI__MSVC_CRT_VERSION >= 1900)) || (__cplusplus >= 201103) +# define PUGI__HAVE_SNPRINTF +#endif + #ifdef PUGIXML_HEADER_ONLY # define PUGI__NS_BEGIN namespace pugi { namespace impl { # define PUGI__NS_END } } @@ -4632,12 +4636,14 @@ PUGI__NS_BEGIN PUGI__FN bool set_value_convert(String& dest, Header& header, uintptr_t header_mask, float value) { char buf[128]; -#if defined(PUGI__MSVC_CRT_VERSION) +#if defined(PUGI__HAVE_SNPRINTF) + snprintf(buf, 128, "%.9g", value); +#elif defined(PUGI__MSVC_CRT_VERSION) _snprintf(buf, 128, "%.9g", value); + buf[127] = '\0'; #else - snprintf(buf, 128, "%.9g", value); + sprintf(buf, "%.9g", value); #endif - buf[127] = '\0'; return set_value_ascii(dest, header, header_mask, buf); } @@ -4646,12 +4652,14 @@ PUGI__NS_BEGIN PUGI__FN bool set_value_convert(String& dest, Header& header, uintptr_t header_mask, double value) { char buf[128]; -#if defined(PUGI__MSVC_CRT_VERSION) +#if defined(PUGI__HAVE_SNPRINTF) + snprintf(buf, 128, "%.17g", value); +#elif defined (PUGI__MSVC_CRT_VERSION) _snprintf(buf, 128, "%.17g", value); + buf[127] = '\0'; #else - snprintf(buf, 128, "%.17g", value); + sprintf(buf, "%.17g", value); #endif - buf[127] = '\0'; return set_value_ascii(dest, header, header_mask, buf); } @@ -8007,12 +8015,16 @@ PUGI__NS_BEGIN PUGI__FN void convert_number_to_mantissa_exponent(double value, char* buffer, size_t buffer_size, char** out_mantissa, int* out_exponent) { // get a scientific notation value with IEEE DBL_DIG decimals -#if defined(PUGI__MSVC_CRT_VERSION) +#if defined(PUGI__HAVE_SNPRINTF) + snprintf(buffer, buffer_size, "%.*e", DBL_DIG, value); +#elif defined(PUGI__MSVC_CRT_VERSION) _snprintf(buffer, buffer_size, "%.*e", DBL_DIG, value); + buffer[buffer_size - 1] = '\0'; #else - snprintf(buffer, buffer_size, "%.*e", DBL_DIG, value); + sprintf(buffer, "%.*e", DBL_DIG, value); + assert(strlen(buffer) < buffer_size); #endif - buffer[buffer_size - 1] = '\0'; + // get the exponent (possibly negative) char* exponent_string = strchr(buffer, 'e'); -- cgit v1.2.3