aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2016-03-09 02:08:53 +0300
committerZyX <kp-pav@yandex.ru>2016-04-18 02:48:20 +0300
commit515fea1ef09e3debee9e226f34d3e62e47e8a08d (patch)
tree0b3bafae697739e2a1d10870c117b4b6b49f409d /src
parent69ce17878eb6a95e40b6e5c36c62a5ffdf2df62d (diff)
downloadrneovim-515fea1ef09e3debee9e226f34d3e62e47e8a08d.tar.gz
rneovim-515fea1ef09e3debee9e226f34d3e62e47e8a08d.tar.bz2
rneovim-515fea1ef09e3debee9e226f34d3e62e47e8a08d.zip
eval/decode: Reject even more numbers
Rejects leading zeroes and numbers like 1.e+5 (decimal dot with missing number with signed exponent).
Diffstat (limited to 'src')
-rw-r--r--src/nvim/eval/decode.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/nvim/eval/decode.c b/src/nvim/eval/decode.c
index ec3be2cfb6..f74f2b3150 100644
--- a/src/nvim/eval/decode.c
+++ b/src/nvim/eval/decode.c
@@ -492,6 +492,7 @@ static inline int parse_json_number(const char *const buf, const size_t buf_len,
const char *ints = NULL;
const char *fracs = NULL;
const char *exps = NULL;
+ const char *exps_s = NULL;
if (*p == '-') {
p++;
}
@@ -499,6 +500,10 @@ static inline int parse_json_number(const char *const buf, const size_t buf_len,
while (p < e && ascii_isdigit(*p)) {
p++;
}
+ if (p != ints + 1 && *ints == '0') {
+ emsgf(_("E474: Leading zeroes are not allowed: %.*s"), LENP(s, e));
+ goto parse_json_number_fail;
+ }
if (p < e && p != ints && (*p == '.' || *p == 'e' || *p == 'E')) {
if (*p == '.') {
p++;
@@ -509,6 +514,7 @@ static inline int parse_json_number(const char *const buf, const size_t buf_len,
}
if (p < e && (*p == 'e' || *p == 'E')) {
p++;
+ exps_s = p;
if (p < e && (*p == '-' || *p == '+')) {
p++;
}
@@ -521,7 +527,7 @@ static inline int parse_json_number(const char *const buf, const size_t buf_len,
if (p == ints) {
emsgf(_("E474: Missing number after minus sign: %.*s"), LENP(s, e));
goto parse_json_number_fail;
- } else if (p == fracs || exps == fracs + 1) {
+ } else if (p == fracs || exps_s == fracs + 1) {
emsgf(_("E474: Missing number after decimal dot: %.*s"), LENP(s, e));
goto parse_json_number_fail;
} else if (p == exps) {