MIRROR: javascript for ๐Ÿœ's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

add support for signed integers in JSON parsing

+10 -5
+10 -5
src/modules/json.c
··· 1 1 #include <stdlib.h> 2 + #include <stdint.h> 2 3 #include <string.h> 3 4 #include <math.h> 4 5 #include <yyjson.h> ··· 14 15 switch (yyjson_get_type(val)) { 15 16 case YYJSON_TYPE_NULL: return js_mknull(); 16 17 case YYJSON_TYPE_BOOL: return yyjson_get_bool(val) ? js_mktrue() : js_mkfalse(); 18 + case YYJSON_TYPE_STR: return js_mkstr(js, yyjson_get_str(val), yyjson_get_len(val)); 17 19 18 - case YYJSON_TYPE_NUM: 20 + case YYJSON_TYPE_NUM: { 19 21 if (yyjson_is_int(val)) return js_mknum((double)yyjson_get_int(val)); 22 + if (yyjson_is_sint(val)) return js_mknum((double)yyjson_get_sint(val)); 20 23 if (yyjson_is_uint(val)) return js_mknum((double)yyjson_get_uint(val)); 21 24 return js_mknum(yyjson_get_real(val)); 22 - 23 - case YYJSON_TYPE_STR: 24 - return js_mkstr(js, yyjson_get_str(val), yyjson_get_len(val)); 25 + } 25 26 26 27 case YYJSON_TYPE_ARR: { 27 28 jsval_t arr = js_mkarr(js); ··· 168 169 case JS_NUM: { 169 170 double num = js_getnum(val); 170 171 if (isnan(num) || isinf(num)) return yyjson_mut_null(doc); 171 - if (num == (double)(int64_t)num) return yyjson_mut_sint(doc, (int64_t)num); 172 + if ( 173 + num >= (double)INT64_MIN && 174 + num < (double)INT64_MAX && 175 + num == (double)(int64_t)num 176 + ) return yyjson_mut_sint(doc, (int64_t)num); 172 177 return yyjson_mut_real(doc, num); 173 178 } 174 179