Browse code

xar_get_numeric_from_xml_element: use strtol

Craig Davison authored on 2018/02/22 09:52:38
Showing 1 changed files
... ...
@@ -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;