From c525e3a1c20f6b5d9809c8b84f80090a8e416c92 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 18 Feb 2017 16:59:02 +0100 Subject: patch 8.0.0337: invalid memory access in :recover command Problem: Invalid memory access in :recover command. Solution: Avoid access before directory name. (Dominique Pelle, closes #1488) --- src/memline.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/memline.c') diff --git a/src/memline.c b/src/memline.c index 5874b5d69..df799b1b2 100644 --- a/src/memline.c +++ b/src/memline.c @@ -1863,8 +1863,10 @@ recover_names( else { #if defined(UNIX) || defined(WIN3264) - p = dir_name + STRLEN(dir_name); - if (after_pathsep(dir_name, p) && p[-1] == p[-2]) + int len = STRLEN(dir_name); + + p = dir_name + len; + if (after_pathsep(dir_name, p) && len > 1 && p[-1] == p[-2]) { /* Ends with '//', Use Full path for swap name */ tail = make_percent_swname(dir_name, fname_res); @@ -3922,8 +3924,10 @@ makeswapname( #endif #if defined(UNIX) || defined(WIN3264) /* Need _very_ long file names */ - s = dir_name + STRLEN(dir_name); - if (after_pathsep(dir_name, s) && s[-1] == s[-2]) + int len = STRLEN(dir_name); + + s = dir_name + len; + if (after_pathsep(dir_name, s) && len > 1 && s[-1] == s[-2]) { /* Ends with '//', Use Full path */ r = NULL; if ((s = make_percent_swname(dir_name, fname)) != NULL) -- cgit v1.2.1