Use std::strtoll instead of std::stol

This commit is contained in:
kannibalox
2024-10-27 16:47:50 -04:00
committed by Jari Sundell
parent c18df7a366
commit b360a734f1
2 changed files with 10 additions and 1 deletions
+6 -1
View File
@@ -115,7 +115,12 @@ xml_value_to_object(const tinyxml2::XMLNode* elem) {
}
return torrent::Object(value_element_child->ToText()->Value());
} else if (value_element_type == "i4" || value_element_type == "i8" || value_element_type == "int") {
return torrent::Object(std::stol(std::string(value_element->FirstChild()->ToText()->Value())));
char* pos;
auto str = value_element->FirstChild()->ToText()->Value();
auto result = std::strtoll(str, &pos, 10);
if (pos == str || *pos != '\0')
throw xmlrpc_error(XMLRPC_TYPE_ERROR, "unable to parse integer value");
return torrent::Object(result);
} else if (value_element_type == "boolean") {
auto boolean_text = std::string(value_element->FirstChild()->ToText()->Value());
if (boolean_text == "1") {
+4
View File
@@ -53,3 +53,7 @@
# Invalid - broken XML
thodCall><methodName>test_a</methodName><params><param><value><i4>41</i4></value></param></params></method
<?xml version="1.0"?><methodReponse><fault><struct><member><name>faultCode</name><value><int>-503</int></value></member><member><name>faultString</name><value><string>Error=XML_ERROR_PARSING_ELEMENT ErrorID=6 (0x6) Line number=1: XMLElement name=method</string></value></member></struct></fault></methodReponse>
# Invalid - non-integer i4
<?xml version="1.0"?><methodCall><methodName>xmlrpc_reflect</methodName><params><param><value><i4>string value</i4></value></param></params></methodCall>
<?xml version="1.0"?><methodReponse><fault><struct><member><name>faultCode</name><value><int>-501</int></value></member><member><name>faultString</name><value><string>unable to parse integer value</string></value></member></struct></fault></methodReponse>