]> Savannah Git Hosting - gnulib.git/commitdiff
glob: pacify fuzzer for mempcpy
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 18 Oct 2017 17:19:35 +0000 (10:19 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 18 Oct 2017 17:19:57 +0000 (10:19 -0700)
Problem reported by Tim Rühsen in:
https://lists.gnu.org/archive/html/bug-gnulib/2017-10/msg00054.html
* lib/glob.c (glob): Do not pass NULL to mempcpy.

ChangeLog
lib/glob.c

index 5e0c3c7f2263f01f5187ff9d4e49d85872131e32..b280a7753dd5a6f302293a9d688149f0ca7b07ce 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2017-10-18  Paul Eggert  <eggert@cs.ucla.edu>
+
+       glob: pacify fuzzer for mempcpy
+       Problem reported by Tim Rühsen in:
+       https://lists.gnu.org/archive/html/bug-gnulib/2017-10/msg00054.html
+       * lib/glob.c (glob): Do not pass NULL to mempcpy.
+
 2017-10-12  Bruno Haible  <bruno@clisp.org>
 
        doc: Fix syntax error (regression from 2017-10-03).
index 9d677d9826430fd4c93bccb25fe064b469281b1e..33030ec72bb2502a2b93823c5e02bbf40ac195ae 100644 (file)
@@ -800,6 +800,7 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int),
               {
                 size_t home_len = strlen (p->pw_dir);
                 size_t rest_len = end_name == NULL ? 0 : strlen (end_name);
+                char *d;
 
                 if (__glibc_unlikely (malloc_dirname))
                   free (dirname);
@@ -819,8 +820,10 @@ glob (const char *pattern, int flags, int (*errfunc) (const char *, int),
                       }
                     malloc_dirname = 1;
                   }
-                *((char *) mempcpy (mempcpy (dirname, p->pw_dir, home_len),
-                                    end_name, rest_len)) = '\0';
+                d = mempcpy (dirname, p->pw_dir, home_len);
+                if (end_name != NULL)
+                  d = mempcpy (d, end_name, rest_len);
+                *d = '\0';
 
                 dirlen = home_len + rest_len;
                 dirname_modified = 1;