diff options
author | Tony Cook <tony@develop-help.com> | 2019-08-20 15:43:05 +1000 |
---|---|---|
committer | Tony Cook <tony@develop-help.com> | 2019-08-26 09:42:10 +1000 |
commit | 14d26b44a1d7eee67837ec0ea8fb0368ac6fe33e (patch) | |
tree | 23883b0092aee8cdd983468d975c6e1a4b88fc8c /numeric.c | |
parent | 6e0fc9025db5865d3181fcac99d17efa4680df6c (diff) | |
download | perl-14d26b44a1d7eee67837ec0ea8fb0368ac6fe33e.tar.gz |
(perl #134230) don't interpret 0x, 0b when numifying strings
Diffstat (limited to 'numeric.c')
-rw-r--r-- | numeric.c | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -1551,6 +1551,15 @@ Perl_my_atof3(pTHX_ const char* orig, NV* value, const STRLEN len) if ((endp = S_my_atof_infnan(aTHX_ s, negative, send, value))) return endp; + /* strtold() accepts 0x-prefixed hex and in POSIX implementations, + 0b-prefixed binary numbers, which is backward incompatible + */ + if ((len == 0 || len >= 2) && *s == '0' && + (isALPHA_FOLD_EQ(s[1], 'x') || isALPHA_FOLD_EQ(s[1], 'b'))) { + *value = 0; + return (char *)s+1; + } + /* If the length is passed in, the input string isn't NUL-terminated, * and in it turns out the function below assumes it is; therefore we * create a copy and NUL-terminate that */ |