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:
Justin M. Keyes
2019-09-13 18:15:09 -07:00
parent 0a24a2c314
commit 3344cffe7b
22 changed files with 150 additions and 113 deletions

View File

@@ -176,15 +176,17 @@ char_u *parse_shape_opt(int what)
p += len;
if (!ascii_isdigit(*p))
return (char_u *)N_("E548: digit expected");
int n = getdigits_int(&p);
int n = getdigits_int(&p, false, 0);
if (len == 3) { /* "ver" or "hor" */
if (n == 0)
if (n == 0) {
return (char_u *)N_("E549: Illegal percentage");
}
if (round == 2) {
if (TOLOWER_ASC(i) == 'v')
if (TOLOWER_ASC(i) == 'v') {
shape_table[idx].shape = SHAPE_VER;
else
} else {
shape_table[idx].shape = SHAPE_HOR;
}
shape_table[idx].percentage = n;
}
} else if (round == 2) {