diff --git a/spa/include/spa/utils/json.h b/spa/include/spa/utils/json.h index b9b75fbb0..291b7448d 100644 --- a/spa/include/spa/utils/json.h +++ b/spa/include/spa/utils/json.h @@ -238,7 +238,7 @@ static inline int spa_json_parse_float(const char *val, int len, float *result) { char *end; *result = strtof(val, &end); - return end == val + len; + return len > 0 && end == val + len; } static inline bool spa_json_is_float(const char *val, int len) { @@ -259,7 +259,7 @@ static inline int spa_json_parse_int(const char *val, int len, int *result) { char *end; *result = strtol(val, &end, 0); - return end == val + len; + return len > 0 && end == val + len; } static inline bool spa_json_is_int(const char *val, int len) { diff --git a/test/test-spa-json.c b/test/test-spa-json.c index c4ae709ac..877eb78d5 100644 --- a/test/test-spa-json.c +++ b/test/test-spa-json.c @@ -223,6 +223,20 @@ PWTEST(json_overflow) return PWTEST_PASS; } +PWTEST(json_float) +{ + float v; + pwtest_int_eq(spa_json_parse_float("", 0, &v), 0); + return PWTEST_PASS; +} + +PWTEST(json_int) +{ + int v; + pwtest_int_eq(spa_json_parse_int("", 0, &v), 0); + return PWTEST_PASS; +} + PWTEST_SUITE(spa_json) { pwtest_add(json_abi, PWTEST_NOARG); @@ -230,6 +244,8 @@ PWTEST_SUITE(spa_json) pwtest_add(json_encode, PWTEST_NOARG); pwtest_add(json_array, PWTEST_NOARG); pwtest_add(json_overflow, PWTEST_NOARG); + pwtest_add(json_float, PWTEST_NOARG); + pwtest_add(json_int, PWTEST_NOARG); return PWTEST_PASS; }