From c1917e2181263c44145ccb449871d3d88fdc5467 Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Mon, 8 Jan 2024 22:20:10 -0800 Subject: [PATCH] Avoiding casting NaN value to int64_t in njs.dump(). Found by UndefinedBehaviorSanitizer. --- src/njs_json.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/njs_json.c b/src/njs_json.c index 4e113ba2..0c46e93a 100644 --- a/src/njs_json.c +++ b/src/njs_json.c @@ -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; } -- 2.47.3