mirror of
https://github.com/neovim/neovim.git
synced 2025-09-18 09:18:19 +00:00
getdigits: introduce strict
, def
parameters
Problem: During a refactor long ago, we changed the `getdigits_*` familiy of functions to abort on overflow. But this is often wrong, because many of these codepaths are handling user input. Solution: Decide at each call-site whether to use "strict" mode. fix #5555
This commit is contained in:
@@ -2113,7 +2113,7 @@ int diffopt_changed(void)
|
||||
diff_flags_new |= DIFF_FILLER;
|
||||
} else if ((STRNCMP(p, "context:", 8) == 0) && ascii_isdigit(p[8])) {
|
||||
p += 8;
|
||||
diff_context_new = getdigits_int(&p);
|
||||
diff_context_new = getdigits_int(&p, false, diff_context_new);
|
||||
} else if (STRNCMP(p, "iblank", 6) == 0) {
|
||||
p += 6;
|
||||
diff_flags_new |= DIFF_IBLANK;
|
||||
@@ -2137,7 +2137,7 @@ int diffopt_changed(void)
|
||||
diff_flags_new |= DIFF_VERTICAL;
|
||||
} else if ((STRNCMP(p, "foldcolumn:", 11) == 0) && ascii_isdigit(p[11])) {
|
||||
p += 11;
|
||||
diff_foldcolumn_new = getdigits_int(&p);
|
||||
diff_foldcolumn_new = getdigits_int(&p, false, diff_foldcolumn_new);
|
||||
} else if (STRNCMP(p, "hiddenoff", 9) == 0) {
|
||||
p += 9;
|
||||
diff_flags_new |= DIFF_HIDDEN_OFF;
|
||||
@@ -3000,10 +3000,10 @@ static int parse_diff_ed(char_u *line,
|
||||
// append: {first}a{first}[,{last}]
|
||||
// delete: {first}[,{last}]d{first}
|
||||
p = line;
|
||||
f1 = getdigits(&p);
|
||||
f1 = getdigits(&p, true, 0);
|
||||
if (*p == ',') {
|
||||
p++;
|
||||
l1 = getdigits(&p);
|
||||
l1 = getdigits(&p, true, 0);
|
||||
} else {
|
||||
l1 = f1;
|
||||
}
|
||||
@@ -3011,10 +3011,10 @@ static int parse_diff_ed(char_u *line,
|
||||
return FAIL; // invalid diff format
|
||||
}
|
||||
difftype = *p++;
|
||||
f2 = getdigits(&p);
|
||||
f2 = getdigits(&p, true, 0);
|
||||
if (*p == ',') {
|
||||
p++;
|
||||
l2 = getdigits(&p);
|
||||
l2 = getdigits(&p, true, 0);
|
||||
} else {
|
||||
l2 = f2;
|
||||
}
|
||||
@@ -3056,18 +3056,18 @@ static int parse_diff_unified(char_u *line,
|
||||
// @@ -oldline,oldcount +newline,newcount @@
|
||||
p = line;
|
||||
if (*p++ == '@' && *p++ == '@' && *p++ == ' ' && *p++ == '-') {
|
||||
oldline = getdigits(&p);
|
||||
oldline = getdigits(&p, true, 0);
|
||||
if (*p == ',') {
|
||||
p++;
|
||||
oldcount = getdigits(&p);
|
||||
oldcount = getdigits(&p, true, 0);
|
||||
} else {
|
||||
oldcount = 1;
|
||||
}
|
||||
if (*p++ == ' ' && *p++ == '+') {
|
||||
newline = getdigits(&p);
|
||||
newline = getdigits(&p, true, 0);
|
||||
if (*p == ',') {
|
||||
p++;
|
||||
newcount = getdigits(&p);
|
||||
newcount = getdigits(&p, true, 0);
|
||||
} else {
|
||||
newcount = 1;
|
||||
}
|
||||
|
Reference in New Issue
Block a user