From cb08cd0af86f475f49af2de9efae269b4cd44182 Mon Sep 17 00:00:00 2001 From: Vadim Zhestikov Date: Mon, 29 Jan 2024 08:57:49 -0800 Subject: [PATCH] Fixed parsing of hex, oct and binary literals with no digits. --- src/njs_lexer.c | 6 +++--- src/test/njs_unit_test.c | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/njs_lexer.c b/src/njs_lexer.c index 310e9674..4a51c668 100644 --- a/src/njs_lexer.c +++ b/src/njs_lexer.c @@ -915,7 +915,7 @@ njs_lexer_number(njs_lexer_t *lexer, njs_lexer_token_t *token) if (*p == 'x' || *p == 'X') { p++; - if (p == lexer->end) { + if (p == lexer->end || njs_char_to_hex(*p) < 0) { goto illegal_token; } @@ -929,7 +929,7 @@ njs_lexer_number(njs_lexer_t *lexer, njs_lexer_token_t *token) if (*p == 'o' || *p == 'O') { p++; - if (p == lexer->end) { + if (p == lexer->end || (u_char)(*p - '0') > 7) { goto illegal_token; } @@ -947,7 +947,7 @@ njs_lexer_number(njs_lexer_t *lexer, njs_lexer_token_t *token) if (*p == 'b' || *p == 'B') { p++; - if (p == lexer->end) { + if (p == lexer->end || (u_char)(*p - '0') > 1) { goto illegal_token; } diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index 60541815..14bb6718 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -353,7 +353,10 @@ static njs_unit_test_t njs_test[] = njs_str("SyntaxError: Unexpected token \"0O778\" in 1") }, { njs_str("0O_7"), - njs_str("SyntaxError: Unexpected token \"_7\" in 1") }, + njs_str("SyntaxError: Unexpected token \"0O\" in 1") }, + + { njs_str("0O + 1"), + njs_str("SyntaxError: Unexpected token \"0O\" in 1") }, { njs_str("0o7_"), njs_str("SyntaxError: Unexpected token \"_\" in 1") }, @@ -408,7 +411,10 @@ static njs_unit_test_t njs_test[] = njs_str("SyntaxError: Unexpected token \"0B12\" in 1") }, { njs_str("0b_11"), - njs_str("SyntaxError: Unexpected token \"_11\" in 1") }, + njs_str("SyntaxError: Unexpected token \"0b\" in 1") }, + + { njs_str("0b + 1"), + njs_str("SyntaxError: Unexpected token \"0b\" in 1") }, { njs_str("0B1__1"), njs_str("SyntaxError: Unexpected token \"__1\" in 1") }, @@ -446,7 +452,10 @@ static njs_unit_test_t njs_test[] = njs_str("SyntaxError: Unexpected token \"g\" in 1") }, { njs_str("0X_ff"), - njs_str("SyntaxError: Unexpected token \"_ff\" in 1") }, + njs_str("SyntaxError: Unexpected token \"0X\" in 1") }, + + { njs_str("0X + 1"), + njs_str("SyntaxError: Unexpected token \"0X\" in 1") }, { njs_str("0xff_"), njs_str("SyntaxError: Unexpected token \"_\" in 1") }, -- 2.47.3