]> git.wh0rd.org Git - nano.git/commitdiff
in input_tab(), if the tab-completed path is a directory, make sure
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Fri, 13 Oct 2006 16:18:40 +0000 (16:18 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Fri, 13 Oct 2006 16:18:40 +0000 (16:18 +0000)
enough space is allocated before tacking a slash onto the end of it

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@3900 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/files.c

index 4f65f083e4c189052d33272c477efb0706d4d867..57078695795490f79812db8974952b5b4374b434 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,9 @@ CVS code -
        - Since the field precision operator used in the sprintf() uses
          ints and not size_t's, replace it with two strncpy()s, which
          use size_t's. (DLR)
+       - If the tab-completed path is a directory, make sure enough
+         space is allocated before tacking a slash onto the end of it.
+         (DLR)
 - help.c:
   parse_help_input()
        - Add 'E' and 'e' as aliases for Exit, for consistency with the
index 5e7f41f626a23915f1870eeb2193ce5fb546f45d..bfc11ad7730d896369d6152df3ea53d175a2ef51 100644 (file)
@@ -2240,18 +2240,19 @@ char *input_tab(char *buf, bool allow_files, size_t *place, bool
 
        mzero = charalloc(lastslash_len + common_len + 1);
 
-       /*sprintf(mzero, "%.*s%.*s", lastslash_len, buf, common_len,
-               matches[0]);*/
        strncpy(mzero, buf, lastslash_len);
        strncpy(mzero + lastslash_len, matches[0], common_len);
 
        common_len += lastslash_len;
+       mzero[common_len] = '\0';
 
        assert(common_len >= *place);
 
        if (num_matches == 1 && is_dir(mzero)) {
-           mzero[common_len] = '/';
            common_len++;
+           mzero = charealloc(mzero, common_len + 1);
+           mzero[common_len - 1] = '/';
+           mzero[common_len] = '\0';
 
            assert(common_len > *place);
        }