diff options
author | Daniel Balla <dballa@inf.u-szeged.hu> | 2017-11-09 21:12:29 +0100 |
---|---|---|
committer | László Langó <llango.u-szeged@partner.samsung.com> | 2017-11-09 21:12:29 +0100 |
commit | 7e51423ca7cdc18898414dfa0926d8b4f5632cab (patch) | |
tree | e7e38ddb4a9ae0d810e5c0497287116e16b150c1 /jerry-core/ecma/builtin-objects/ecma-builtin-date.c | |
parent | 519ba8eb6cc66be26ff769a75cb7ebfe32826460 (diff) |
Fix Date.parse() in ecma-builtin-date.c (#2081)
Fixes issue #2073, which introduced an error caused by Date.parse()
The problem was that the function didn't properly check if there was a ':' after the hours.
If any UTF8 character was inserted there which got decoded into multiple characters, it caused the pointer to point at a wrong character.
JerryScript-DCO-1.0-Signed-off-by: Daniel Balla dballa@inf.u-szeged.hu
Diffstat (limited to 'jerry-core/ecma/builtin-objects/ecma-builtin-date.c')
-rw-r--r-- | jerry-core/ecma/builtin-objects/ecma-builtin-date.c | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-date.c b/jerry-core/ecma/builtin-objects/ecma-builtin-date.c index aaa3413b..929c98d5 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-date.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-date.c @@ -263,40 +263,44 @@ ecma_builtin_date_parse (ecma_value_t this_arg, /**< this argument */ hours = ECMA_NUMBER_ZERO; } - /* eat up ':' */ - date_str_curr_p++; - - minutes = ecma_date_parse_date_chars (&date_str_curr_p, date_str_end_p, 2); - - if (minutes < 0 || minutes > 59) - { - minutes = ecma_number_make_nan (); - } - - /* 4.2 read seconds if any */ if (date_str_curr_p < date_str_end_p && *date_str_curr_p == ':') { /* eat up ':' */ date_str_curr_p++; - seconds = ecma_date_parse_date_chars (&date_str_curr_p, date_str_end_p, 2); - if (seconds < 0 || seconds > 59) + minutes = ecma_date_parse_date_chars (&date_str_curr_p, date_str_end_p, 2); + + if (minutes < 0 || minutes > 59) { - seconds = ecma_number_make_nan (); + minutes = ecma_number_make_nan (); } - /* 4.3 read milliseconds if any */ + /* 4.2 read seconds if any */ if (date_str_curr_p < date_str_end_p - && *date_str_curr_p == '.') + && *date_str_curr_p == ':') { - /* eat up '.' */ + /* eat up ':' */ date_str_curr_p++; - milliseconds = ecma_date_parse_date_chars (&date_str_curr_p, date_str_end_p, 3); + seconds = ecma_date_parse_date_chars (&date_str_curr_p, date_str_end_p, 2); + + if (seconds < 0 || seconds > 59) + { + seconds = ecma_number_make_nan (); + } - if (milliseconds < 0) + /* 4.3 read milliseconds if any */ + if (date_str_curr_p < date_str_end_p + && *date_str_curr_p == '.') { - milliseconds = ecma_number_make_nan (); + /* eat up '.' */ + date_str_curr_p++; + milliseconds = ecma_date_parse_date_chars (&date_str_curr_p, date_str_end_p, 3); + + if (milliseconds < 0) + { + milliseconds = ecma_number_make_nan (); + } } } } |