]> granicus.if.org Git - json-c/commitdiff
Apply same EINVAL handling to json_parse_uint64() as was done for json_parse_int64...
authorEric Haszlakiewicz <erh+git@nimenees.com>
Sun, 30 Oct 2022 03:25:32 +0000 (03:25 +0000)
committerEric Haszlakiewicz <erh+git@nimenees.com>
Sun, 30 Oct 2022 03:25:32 +0000 (03:25 +0000)
json_util.c
json_util.h

index 1a2dfcdd8520165ab7b48177ed30773fa54f8e34..0f570f237da2f2e29f038037bf97ebb545710b9b 100644 (file)
@@ -269,7 +269,12 @@ int json_parse_uint64(const char *buf, uint64_t *retval)
        val = strtoull(buf, &end, 10);
        if (end != buf)
                *retval = val;
-       return ((val == 0 && errno != 0) || (end == buf)) ? 1 : 0;
+       if ((val == 0 && errno != 0) || (end == buf))
+       {
+               errno = EINVAL;
+               return 1;
+       }
+       return 0;
 }
 
 #ifndef HAVE_REALLOC
index 1f663e872ad8e74242181c43c4563ba4bc2efc01..62ad68853e97b035f23c5419c438114a32d4d478 100644 (file)
@@ -100,8 +100,17 @@ JSON_EXPORT int json_object_to_fd(int fd, struct json_object *obj, int flags);
  */
 JSON_EXPORT const char *json_util_get_last_err(void);
 
-/* these parsing helpers return zero on success */
+/**
+ * A parsing helper for integer values.  Returns 0 on success,
+ * with the parsed value assigned to *retval.  Overflow/underflow
+ * are NOT considered errors, but errno will be set to ERANGE,
+ * just like the strtol/strtoll functions do.
+ */
 JSON_EXPORT int json_parse_int64(const char *buf, int64_t *retval);
+/**
+ * A parsing help for integer values, providing one extra bit of 
+ * magnitude beyond json_parse_int64().
+ */
 JSON_EXPORT int json_parse_uint64(const char *buf, uint64_t *retval);
 /**
  * @deprecated