From d3a82c5e45566cbce3024ad34094cc1e2d45544e Mon Sep 17 00:00:00 2001 From: Will Pazner Date: Thu, 19 Nov 2020 20:50:36 -0800 Subject: Fix format string errors in sscanf --- tinyxml2.cpp | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/tinyxml2.cpp b/tinyxml2.cpp index 1bacbe1..13b5ce0 100755 --- a/tinyxml2.cpp +++ b/tinyxml2.cpp @@ -610,8 +610,17 @@ void XMLUtil::ToStr( uint64_t v, char* buffer, int bufferSize ) bool XMLUtil::ToInt(const char* str, int* value) { - if (TIXML_SSCANF(str, IsPrefixHex(str) ? "%x" : "%d", value) == 1) { - return true; + if (IsPrefixHex(str)) { + unsigned v; + if (TIXML_SSCANF(str, "%x", &v) == 1) { + *value = static_cast(v); + return true; + } + } + else { + if (TIXML_SSCANF(str, "%d", value) == 1) { + return true; + } } return false; } @@ -670,11 +679,20 @@ bool XMLUtil::ToDouble( const char* str, double* value ) bool XMLUtil::ToInt64(const char* str, int64_t* value) { - long long v = 0; // horrible syntax trick to make the compiler happy about %lld - if (TIXML_SSCANF(str, IsPrefixHex(str) ? "%llx" : "%lld", &v) == 1) { - *value = static_cast(v); - return true; - } + if (IsPrefixHex(str)) { + unsigned long long v = 0; // horrible syntax trick to make the compiler happy about %llx + if (TIXML_SSCANF(str, "%llx", &v) == 1) { + *value = static_cast(v); + return true; + } + } + else { + long long v = 0; // horrible syntax trick to make the compiler happy about %lld + if (TIXML_SSCANF(str, "%lld", &v) == 1) { + *value = static_cast(v); + return true; + } + } return false; } -- cgit v1.2.3