]> git.kaiwu.me - njs.git/commitdiff
Avoiding casting NaN value to int64_t in njs.dump().
authorDmitry Volyntsev <xeioex@nginx.com>
Tue, 9 Jan 2024 06:20:10 +0000 (22:20 -0800)
committerDmitry Volyntsev <xeioex@nginx.com>
Tue, 9 Jan 2024 06:20:10 +0000 (22:20 -0800)
Found by UndefinedBehaviorSanitizer.

src/njs_json.c

index 4e113ba2cb15da909fe2915711402b35b5961c9a..0c46e93aa2c94975dd1453e97a7177411c4758db 100644 (file)
@@ -1894,7 +1894,7 @@ njs_dump_visited(njs_vm_t *vm, njs_json_stringify_t *stringify,
 }
 
 
-njs_inline njs_bool_t
+njs_inline void
 njs_dump_empty(njs_json_stringify_t *stringify, njs_json_state_t *state,
     njs_chb_t *chain, njs_bool_t sep_position)
 {
@@ -1902,7 +1902,7 @@ njs_dump_empty(njs_json_stringify_t *stringify, njs_json_state_t *state,
     int64_t  diff;
 
     if (!state->array) {
-        return 0;
+        return;
     }
 
     if (sep_position) {
@@ -1919,6 +1919,10 @@ njs_dump_empty(njs_json_stringify_t *stringify, njs_json_state_t *state,
         }
     }
 
+    if (isnan(prev)) {
+        return;
+    }
+
     if (isnan(key)) {
         key = state->length;
     }
@@ -1947,8 +1951,6 @@ njs_dump_empty(njs_json_stringify_t *stringify, njs_json_state_t *state,
             njs_json_stringify_indent(stringify, chain, 1);
         }
     }
-
-    return 1;
 }