Small fixes in Date.parse (#333)
* Small fixes in Date.parse - reject AM/PM suffix for hours > 12 - stricter time parser (fixes last v8 test) - add explanatory comments
This commit is contained in:
parent
c7ca3febd3
commit
93d1742fc4
2 changed files with 10 additions and 3 deletions
12
quickjs.c
12
quickjs.c
|
@ -47770,7 +47770,9 @@ static BOOL js_date_parse_otherstring(const uint8_t *sp,
|
||||||
if (!string_get_digits(sp, &p, &fields[5], 1, 2))
|
if (!string_get_digits(sp, &p, &fields[5], 1, 2))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
string_get_milliseconds(sp, &p, &fields[6]);
|
string_get_milliseconds(sp, &p, &fields[6]);
|
||||||
}
|
} else
|
||||||
|
if (sp[p] != '\0' && sp[p] != ' ')
|
||||||
|
return FALSE;
|
||||||
has_time = TRUE;
|
has_time = TRUE;
|
||||||
} else {
|
} else {
|
||||||
if (p - p_start > 2) {
|
if (p - p_start > 2) {
|
||||||
|
@ -47792,11 +47794,17 @@ static BOOL js_date_parse_otherstring(const uint8_t *sp,
|
||||||
string_skip_until(sp, &p, "0123456789 -/(");
|
string_skip_until(sp, &p, "0123456789 -/(");
|
||||||
} else
|
} else
|
||||||
if (has_time && string_match(sp, &p, "PM")) {
|
if (has_time && string_match(sp, &p, "PM")) {
|
||||||
if (fields[3] < 12)
|
/* hours greater than 12 will be incremented and
|
||||||
|
rejected by the range check in js_Date_parse */
|
||||||
|
/* 00:00 PM will be silently converted as 12:00 */
|
||||||
|
if (fields[3] != 12)
|
||||||
fields[3] += 12;
|
fields[3] += 12;
|
||||||
continue;
|
continue;
|
||||||
} else
|
} else
|
||||||
if (has_time && string_match(sp, &p, "AM")) {
|
if (has_time && string_match(sp, &p, "AM")) {
|
||||||
|
/* 00:00 AM will be silently accepted */
|
||||||
|
if (fields[3] > 12)
|
||||||
|
return FALSE;
|
||||||
if (fields[3] == 12)
|
if (fields[3] == 12)
|
||||||
fields[3] -= 12;
|
fields[3] -= 12;
|
||||||
continue;
|
continue;
|
||||||
|
|
1
v8.txt
1
v8.txt
|
@ -137,7 +137,6 @@ Failure (54[]): expected <true> found <false>
|
||||||
Failure (55[]): expected <true> found <false>
|
Failure (55[]): expected <true> found <false>
|
||||||
Failure (56[]): expected <true> found <false>
|
Failure (56[]): expected <true> found <false>
|
||||||
=== date-parse.js
|
=== date-parse.js
|
||||||
Failure (May 25 2008 1:30( )AM (PM) is not NaN.): expected <true> found <false>
|
|
||||||
=== declare-locally.js
|
=== declare-locally.js
|
||||||
=== deep-recursion.js
|
=== deep-recursion.js
|
||||||
=== define-property-gc.js
|
=== define-property-gc.js
|
||||||
|
|
Loading…
Reference in a new issue