Fix accessing the contents of a direct string (#2261)

In the `ecma_string_get_chars` method
the contents of a direct string is accessed incorrectly.
It tries to extract the magic string id from the
string pointer but the direct string does not need
this step.

JerryScript-DCO-1.0-Signed-off-by: Peter Gal pgal.u-szeged@partner.samsung.com
This commit is contained in:
Péter Gál
2018-03-29 20:20:59 +02:00
committed by László Langó
parent ba22072db8
commit 708f66ad91
2 changed files with 11 additions and 3 deletions
+2 -3
View File
@@ -1450,14 +1450,13 @@ ecma_string_get_chars (const ecma_string_t *string_p, /**< ecma-string */
lit_magic_string_ex_id_t id = (lit_magic_string_ex_id_t) ECMA_GET_DIRECT_STRING_VALUE (string_p);
size = lit_get_magic_string_ex_size (id);
result_p = lit_get_magic_string_ex_utf8 (id);
length = 0;
if (unlikely (*flags_p & ECMA_STRING_FLAG_IS_ASCII))
{
length = lit_utf8_string_length (lit_get_magic_string_ex_utf8 (string_p->u.magic_string_ex_id), size);
length = lit_utf8_string_length (result_p, size);
}
result_p = lit_get_magic_string_ex_utf8 (id);
break;
}
}
+9
View File
@@ -1118,6 +1118,15 @@ main (void)
jerry_release_value (args[0]);
const char *test_magic_str_access_src_p = "'console'.charAt(6) == 'e'";
res = jerry_eval ((const jerry_char_t *) test_magic_str_access_src_p,
strlen (test_magic_str_access_src_p),
false);
TEST_ASSERT (jerry_value_is_boolean (res));
TEST_ASSERT (jerry_get_boolean_value (res) == true);
jerry_release_value (res);
cesu8_length = jerry_get_string_length (args[1]);
cesu8_sz = jerry_get_string_size (args[1]);