Skip to content

Commit

Permalink
Do not skip leading whitespace in jvp_strtod
Browse files Browse the repository at this point in the history
`jvp_strtod` skips leading whitespace, but its decnum counterpart
`decNumberFromString` (called within `jv_number_with_literal`) does not.
Those two are called interchangeably, so it leads to inconsistent
behavior depending on whether the decnum feature is enabled.
Additionally, `classify`, used in the token scanner, only considers
[ \t\n\r] to be whitespace, but `jvp_strtod` consumes the larger set
[ \t\n\v\f\r], so those extra characters are considered literals.

Changing this deviates from the behavior of `strdod` from <stdlib.h> and
is technically a breaking API change, since it is a public symbol.
  • Loading branch information
thaliaarchi committed Nov 2, 2024
1 parent 984b5cd commit 7671872
Showing 1 changed file with 3 additions and 11 deletions.
14 changes: 3 additions & 11 deletions src/jv_dtoa.c
Original file line number Diff line number Diff line change
Expand Up @@ -2368,29 +2368,21 @@ jvp_strtod

sign = nz0 = nz1 = nz = bc.dplen = bc.uflchk = 0;
dval(&rv) = 0.;
for(s = s00;;s++) switch(*s) {
switch(*(s = s00)) {
case '-':
sign = 1;
/* no break */
JQ_FALLTHROUGH;
case '+':
if (*++s)
goto break2;
break;
/* no break */
JQ_FALLTHROUGH;
case 0:
goto ret0;
case '\t':
case '\n':
case '\v':
case '\f':
case '\r':
case ' ':
continue;
default:
goto break2;
break;
}
break2:
if (*s == '0') {
#ifndef NO_HEX_FP /*{*/
switch(s[1]) {
Expand Down

0 comments on commit 7671872

Please sign in to comment.