67 lines
1.6 KiB
Diff
67 lines
1.6 KiB
Diff
From 2ddb89f8a94425cda1e5491efc80c1ccccb6e08e Mon Sep 17 00:00:00 2001
|
|
From: Bram Moolenaar <Bram@vim.org>
|
|
Date: Sat, 4 Sep 2021 21:20:41 +0200
|
|
Subject: [PATCH] patch 8.2.3403: memory leak for :retab with invalid argument
|
|
|
|
Problem: Memory leak for :retab with invalid argument.
|
|
Solution: Free the memory. Make error messages consistent.
|
|
---
|
|
src/indent.c | 13 +++++++++++--
|
|
src/version.c | 2 ++
|
|
2 files changed, 13 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/indent.c b/src/indent.c
|
|
index 7e196c2..7d04373 100644
|
|
--- a/src/indent.c
|
|
+++ b/src/indent.c
|
|
@@ -70,9 +70,12 @@ tabstop_set(char_u *var, int **array)
|
|
{
|
|
int n = atoi((char *)cp);
|
|
|
|
+ // Catch negative values, overflow and ridiculous big values.
|
|
if (n < 0 || n > 9999)
|
|
{
|
|
semsg(_(e_invarg2), cp);
|
|
+ vim_free(*array);
|
|
+ *array = NULL;
|
|
return FAIL;
|
|
}
|
|
(*array)[t++] = n;
|
|
@@ -1580,12 +1583,18 @@ ex_retab(exarg_T *eap)
|
|
else
|
|
new_ts_str = vim_strnsave(new_ts_str, eap->arg - new_ts_str);
|
|
#else
|
|
- new_ts = getdigits(&(eap->arg));
|
|
- if (new_ts < 0)
|
|
+ ptr = eap->arg;
|
|
+ new_ts = getdigits(&ptr);
|
|
+ if (new_ts < 0 && *eap->arg == '-')
|
|
{
|
|
emsg(_(e_positive));
|
|
return;
|
|
}
|
|
+ if (new_ts < 0 || new_ts > 9999)
|
|
+ {
|
|
+ semsg(_(e_invarg2), eap->arg);
|
|
+ return;
|
|
+ }
|
|
if (new_ts == 0)
|
|
new_ts = curbuf->b_p_ts;
|
|
#endif
|
|
diff --git a/src/version.c b/src/version.c
|
|
index 8912f62..f8e4561 100644
|
|
--- a/src/version.c
|
|
+++ b/src/version.c
|
|
@@ -743,6 +743,8 @@ static char *(features[]) =
|
|
static int included_patches[] =
|
|
{ /* Add new patch number below this line */
|
|
/**/
|
|
+ 3403,
|
|
+/**/
|
|
3402,
|
|
/**/
|
|
0
|
|
--
|
|
1.8.3.1
|
|
|