...
|
...
|
@@ -74,14 +74,16 @@ static int xar_cleanup_temp_file(cli_ctx *ctx, int fd, char * tmpname)
|
74
|
74
|
static int xar_get_numeric_from_xml_element(xmlTextReaderPtr reader, size_t * value)
|
75
|
75
|
{
|
76
|
76
|
const xmlChar * numstr;
|
77
|
|
- ssize_t numval;
|
78
|
77
|
|
79
|
78
|
if (xmlTextReaderRead(reader) == 1 && xmlTextReaderNodeType(reader) == XML_READER_TYPE_TEXT) {
|
80
|
79
|
numstr = xmlTextReaderConstValue(reader);
|
81
|
80
|
if (numstr) {
|
82
|
|
- numval = atol((const char *)numstr);
|
83
|
|
- if (numval < 0) {
|
84
|
|
- cli_dbgmsg("cli_scanxar: XML element value %zd\n", numval);
|
|
81
|
+ long numval;
|
|
82
|
+ char *endptr;
|
|
83
|
+ errno = 0;
|
|
84
|
+ numval = strtol((const char *)numstr, &endptr, 10);
|
|
85
|
+ if (numval < 0 || (numval == LONG_MAX && errno) || endptr == numstr) {
|
|
86
|
+ cli_dbgmsg("cli_scanxar: XML element value %s\n", numstr);
|
85
|
87
|
return CL_EFORMAT;
|
86
|
88
|
}
|
87
|
89
|
*value = numval;
|