Fix hash calculation for strings created using jerry_create_string_from_utf8 (#1912)
The hash was being calculated over the bytes *after* the actual string bytes. JerryScript-DCO-1.0-Signed-off-by: Martijn The martijn.the@intel.com
This commit is contained in:
committed by
Zoltan Herczeg
parent
18283d22c0
commit
91912689ad
@@ -298,6 +298,7 @@ ecma_new_ecma_string_from_utf8_converted_to_cesu8 (const lit_utf8_byte_t *string
|
|||||||
data_p = (lit_utf8_byte_t *) (long_string_desc_p + 1);
|
data_p = (lit_utf8_byte_t *) (long_string_desc_p + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const lit_utf8_byte_t *const begin_data_p = data_p;
|
||||||
pos = 0;
|
pos = 0;
|
||||||
|
|
||||||
while (pos < string_size)
|
while (pos < string_size)
|
||||||
@@ -324,7 +325,7 @@ ecma_new_ecma_string_from_utf8_converted_to_cesu8 (const lit_utf8_byte_t *string
|
|||||||
|
|
||||||
JERRY_ASSERT (pos == string_size);
|
JERRY_ASSERT (pos == string_size);
|
||||||
|
|
||||||
string_desc_p->hash = lit_utf8_string_calc_hash (data_p, converted_string_size);
|
string_desc_p->hash = lit_utf8_string_calc_hash (begin_data_p, converted_string_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
return string_desc_p;
|
return string_desc_p;
|
||||||
|
|||||||
@@ -338,6 +338,30 @@ test_run_simple (const char *script_p) /**< source code to run */
|
|||||||
return jerry_run_simple ((const jerry_char_t *) script_p, script_size, JERRY_INIT_EMPTY);
|
return jerry_run_simple ((const jerry_char_t *) script_p, script_size, JERRY_INIT_EMPTY);
|
||||||
} /* test_run_simple */
|
} /* test_run_simple */
|
||||||
|
|
||||||
|
static bool
|
||||||
|
strict_equals (jerry_value_t a,
|
||||||
|
jerry_value_t b)
|
||||||
|
{
|
||||||
|
bool is_strict_equal;
|
||||||
|
const char *is_equal_src;
|
||||||
|
jerry_value_t args[2];
|
||||||
|
jerry_value_t is_equal_fn_val;
|
||||||
|
jerry_value_t res;
|
||||||
|
|
||||||
|
is_equal_src = "var isEqual = function(a, b) { return (a === b); }; isEqual";
|
||||||
|
is_equal_fn_val = jerry_eval ((jerry_char_t *) is_equal_src, strlen (is_equal_src), false);
|
||||||
|
TEST_ASSERT (!jerry_value_has_error_flag (is_equal_fn_val));
|
||||||
|
args[0] = a;
|
||||||
|
args[1] = b;
|
||||||
|
res = jerry_call_function (is_equal_fn_val, jerry_create_undefined (), args, 2);
|
||||||
|
TEST_ASSERT (!jerry_value_has_error_flag (res));
|
||||||
|
TEST_ASSERT (jerry_value_is_boolean (res));
|
||||||
|
is_strict_equal = jerry_get_boolean_value (res);
|
||||||
|
jerry_release_value (res);
|
||||||
|
jerry_release_value (is_equal_fn_val);
|
||||||
|
return is_strict_equal;
|
||||||
|
} /* strict_equals */
|
||||||
|
|
||||||
int
|
int
|
||||||
main (void)
|
main (void)
|
||||||
{
|
{
|
||||||
@@ -402,6 +426,9 @@ main (void)
|
|||||||
args[0] = jerry_create_string_from_utf8 ((jerry_char_t *) "\x73\x74\x72\x3a \xf0\x90\x90\x80");
|
args[0] = jerry_create_string_from_utf8 ((jerry_char_t *) "\x73\x74\x72\x3a \xf0\x90\x90\x80");
|
||||||
args[1] = jerry_create_string ((jerry_char_t *) "\x73\x74\x72\x3a \xed\xa0\x81\xed\xb0\x80");
|
args[1] = jerry_create_string ((jerry_char_t *) "\x73\x74\x72\x3a \xed\xa0\x81\xed\xb0\x80");
|
||||||
|
|
||||||
|
/* Test that the strings are equal / ensure hashes are equal */
|
||||||
|
TEST_ASSERT (strict_equals (args[0], args[1]));
|
||||||
|
|
||||||
/* These sizes must be equal */
|
/* These sizes must be equal */
|
||||||
utf8_sz = jerry_get_utf8_string_size (args[0]);
|
utf8_sz = jerry_get_utf8_string_size (args[0]);
|
||||||
cesu8_sz = jerry_get_utf8_string_size (args[1]);
|
cesu8_sz = jerry_get_utf8_string_size (args[1]);
|
||||||
|
|||||||
Reference in New Issue
Block a user