Skip to content

Commit f1aa752

Browse files
Fixed segfault at error message in njs_property_query().
The issue was introduced in b28e50b (0.9.0). This closes #918 issue on Github.
1 parent 0c0d4e5 commit f1aa752

File tree

7 files changed

+12
-33
lines changed

7 files changed

+12
-33
lines changed

src/njs_generator.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5491,7 +5491,7 @@ njs_generate_reference_error(njs_vm_t *vm, njs_generator_t *generator,
54915491

54925492
ref_err->type = NJS_OBJ_TYPE_REF_ERROR;
54935493

5494-
njs_lexer_entry(vm, node->u.reference.atom_id, &entry);
5494+
njs_atom_string_get(vm, node->u.reference.atom_id, &entry);
54955495

54965496
return njs_name_copy(vm, &ref_err->u.name, &entry);
54975497
}

src/njs_lexer.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -288,16 +288,6 @@ const njs_lexer_keyword_entry_t *njs_lexer_keyword(const u_char *key,
288288
njs_int_t njs_lexer_keywords(njs_arr_t *array);
289289

290290

291-
njs_inline void
292-
njs_lexer_entry(njs_vm_t *vm, uintptr_t atom_id, njs_str_t *entry)
293-
{
294-
njs_value_t value;
295-
296-
njs_atom_to_value(vm, &value, atom_id);
297-
njs_string_get(vm, &value, entry);
298-
}
299-
300-
301291
njs_inline njs_bool_t
302292
njs_lexer_token_is_keyword(njs_lexer_token_t *token)
303293
{

src/njs_object.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -241,18 +241,17 @@ njs_key_string_get(njs_vm_t *vm, njs_value_t *key, njs_str_t *str)
241241
}
242242

243243

244-
njs_inline njs_int_t
244+
njs_inline void
245245
njs_atom_string_get(njs_vm_t *vm, uint32_t atom_id, njs_str_t *str)
246246
{
247247
njs_value_t value;
248248

249249
if (njs_atom_to_value(vm, &value, atom_id) != NJS_OK) {
250-
return NJS_ERROR;
250+
str->start = (u_char *) "unknown";
251+
str->length = njs_length("unknown");
251252
}
252253

253254
njs_key_string_get(vm, &value, str);
254-
255-
return NJS_OK;
256255
}
257256

258257

src/njs_parser.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6702,7 +6702,6 @@ njs_parser_labelled_statement_after(njs_parser_t *parser,
67026702
njs_int_t ret;
67036703
njs_str_t str;
67046704
uintptr_t atom_id;
6705-
njs_value_t entry;
67066705
njs_parser_node_t *node;
67076706

67086707
node = parser->node;
@@ -6719,8 +6718,7 @@ njs_parser_labelled_statement_after(njs_parser_t *parser,
67196718

67206719
atom_id = (uint32_t) (uintptr_t) parser->target;
67216720

6722-
njs_atom_to_value(parser->vm, &entry, atom_id);
6723-
njs_string_get(parser->vm, &entry, &str);
6721+
njs_atom_string_get(parser->vm, atom_id, &str);
67246722

67256723
ret = njs_name_copy(parser->vm, &parser->node->name, &str);
67266724
if (ret != NJS_OK) {

src/njs_value.c

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,6 @@ njs_property_query(njs_vm_t *vm, njs_property_query_t *pq, njs_value_t *value,
560560
{
561561
uint32_t index;
562562
njs_int_t ret;
563-
njs_value_t key;
564563
njs_object_t *obj;
565564
njs_function_t *function;
566565

@@ -607,19 +606,9 @@ njs_property_query(njs_vm_t *vm, njs_property_query_t *pq, njs_value_t *value,
607606
case NJS_UNDEFINED:
608607
case NJS_NULL:
609608
default:
610-
ret = njs_atom_to_value(vm, &key, atom_id);
611-
612-
if (njs_fast_path(ret == NJS_OK)) {
613-
njs_string_get(vm, &key, &pq->lhq.key);
614-
njs_type_error(vm, "cannot get property \"%V\" of %s",
615-
&pq->lhq.key, njs_is_null(value) ? "null"
616-
: "undefined");
617-
return NJS_ERROR;
618-
}
619-
620-
njs_type_error(vm, "cannot get property \"unknown\" of %s",
621-
njs_is_null(value) ? "null" : "undefined");
622-
609+
njs_atom_string_get(vm, atom_id, &pq->lhq.key);
610+
njs_type_error(vm, "cannot get property \"%V\" of %s", &pq->lhq.key,
611+
njs_type_string(value->type));
623612
return NJS_ERROR;
624613
}
625614

src/njs_variable.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ njs_variable_scope_find(njs_parser_t *parser, njs_parser_scope_t *scope,
239239

240240
failed:
241241

242-
njs_lexer_entry(parser->vm, atom_id, &entry);
242+
njs_atom_string_get(parser->vm, atom_id, &entry);
243243

244244
njs_parser_syntax_error(parser, "\"%V\" has already been declared", &entry);
245245
return NULL;

src/test/njs_unit_test.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3923,6 +3923,9 @@ static njs_unit_test_t njs_test[] =
39233923
{ njs_str("delete this !== true"),
39243924
njs_str("false") },
39253925

3926+
{ njs_str("undefined[Symbol()]"),
3927+
njs_str("TypeError: cannot get property \"Symbol()\" of undefined") },
3928+
39263929
/* Object shorthand methods. */
39273930

39283931
{ njs_str("var o = {m(){}}; new o.m();"),

0 commit comments

Comments
 (0)