mirror of
https://github.com/fluencelabs/redis
synced 2025-03-19 09:00:51 +00:00
Merge pull request #4470 from oranagra/fix_string_to_double
fix string to double conversion, stopped parsing on \0 …
This commit is contained in:
commit
58ac57f665
@ -560,7 +560,7 @@ int getDoubleFromObject(const robj *o, double *target) {
|
|||||||
value = strtod(o->ptr, &eptr);
|
value = strtod(o->ptr, &eptr);
|
||||||
if (sdslen(o->ptr) == 0 ||
|
if (sdslen(o->ptr) == 0 ||
|
||||||
isspace(((const char*)o->ptr)[0]) ||
|
isspace(((const char*)o->ptr)[0]) ||
|
||||||
eptr[0] != '\0' ||
|
(size_t)(eptr-(char*)o->ptr) != sdslen(o->ptr) ||
|
||||||
(errno == ERANGE &&
|
(errno == ERANGE &&
|
||||||
(value == HUGE_VAL || value == -HUGE_VAL || value == 0)) ||
|
(value == HUGE_VAL || value == -HUGE_VAL || value == 0)) ||
|
||||||
isnan(value))
|
isnan(value))
|
||||||
@ -602,7 +602,7 @@ int getLongDoubleFromObject(robj *o, long double *target) {
|
|||||||
value = strtold(o->ptr, &eptr);
|
value = strtold(o->ptr, &eptr);
|
||||||
if (sdslen(o->ptr) == 0 ||
|
if (sdslen(o->ptr) == 0 ||
|
||||||
isspace(((const char*)o->ptr)[0]) ||
|
isspace(((const char*)o->ptr)[0]) ||
|
||||||
eptr[0] != '\0' ||
|
(size_t)(eptr-(char*)o->ptr) != sdslen(o->ptr) ||
|
||||||
(errno == ERANGE &&
|
(errno == ERANGE &&
|
||||||
(value == HUGE_VAL || value == -HUGE_VAL || value == 0)) ||
|
(value == HUGE_VAL || value == -HUGE_VAL || value == 0)) ||
|
||||||
isnan(value))
|
isnan(value))
|
||||||
|
@ -144,4 +144,11 @@ start_server {tags {"incr"}} {
|
|||||||
r set foo 1
|
r set foo 1
|
||||||
roundFloat [r incrbyfloat foo -1.1]
|
roundFloat [r incrbyfloat foo -1.1]
|
||||||
} {-0.1}
|
} {-0.1}
|
||||||
|
|
||||||
|
test {string to double with null terminator} {
|
||||||
|
r set foo 1
|
||||||
|
r setrange foo 2 2
|
||||||
|
catch {r incrbyfloat foo 1} err
|
||||||
|
format $err
|
||||||
|
} {ERR*valid*}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user