Fix a memory access and a double slash bug.
authorWerner Koch <wk@gnupg.org>
Thu, 8 May 2014 18:35:57 +0000 (20:35 +0200)
committerWerner Koch <wk@gnupg.org>
Thu, 8 May 2014 18:35:57 +0000 (20:35 +0200)
* src/engine-spawn.c (engspawn_start): Allocate space for list
terminator.
* src/posix-util.c (walk_path): Fix trailing slash detection.
--

Kudos to Valgrind for pointing out these two problems.

The first is a plain allocation bug in a code pattern I have written
thousands of times - this time it went wrong.  The allocation is not
user controlled thus not directly exploitable.

The second is missed to do what it intended to do.  Found due to the
access of malloced but not initialized memory.  Not using calloc
again proved to be helpful to detect logical error.

src/engine-spawn.c
src/posix-util.c

index bfcad3d..8ffc628 100644 (file)
@@ -250,7 +250,7 @@ engspawn_start (engine_spawn_t esp, const char *file, const char *argv[],
   n = 0;
   for (i = 0; esp->fd_data_map[i].data; i++)
     n++;
-  fd_list = calloc (n, sizeof *fd_list);
+  fd_list = calloc (n+1, sizeof *fd_list);
   if (!fd_list)
     return gpg_error_from_syserror ();
 
index e78cd77..f7e0a17 100644 (file)
@@ -95,7 +95,7 @@ walk_path (const char *pgm)
     {
       for (s=path, p=fname; *s && *s != ':'; s++, p++)
         *p = *s;
-      if (*p != '/')
+      if (p != fname && p[-1] != '/')
         *p++ = '/';
       strcpy (p, pgm);
       if (!access (fname, X_OK))