Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Fix issues with pg_ctl
authorStephen Frost <sfrost@snowman.net>
Wed, 5 Mar 2014 06:30:03 +0000 (01:30 -0500)
committerStephen Frost <sfrost@snowman.net>
Wed, 5 Mar 2014 06:30:03 +0000 (01:30 -0500)
The new, small, free_readfile managed to have bug in it which could
cause it to try and free something it shouldn't, and fix the case
where it was being called with an invalid pointer leading to a
segfault.

Noted by Bruce, issues introduced and fixed by me.

src/bin/pg_ctl/pg_ctl.c

index 5c79d101c98eed3c9d36a6300306219820480b4e..ff84498a005e828ed51fc2c1d8fedf02cfc3026b 100644 (file)
@@ -376,13 +376,14 @@ readfile(const char *path)
 void
 free_readfile(char **optlines)
 {
-   int i = 0;
+   char   *curr_line = NULL;
+   int     i = 0;
 
    if (!optlines)
        return;
 
-   while (optlines[i++])
-       free(optlines[i]);
+   while ((curr_line = optlines[i++]))
+       free(curr_line);
 
    free(optlines);
 
@@ -1224,6 +1225,7 @@ do_status(void)
            if (postmaster_is_alive((pid_t) pid))
            {
                char      **optlines;
+               char      **curr_line;
 
                printf(_("%s: server is running (PID: %ld)\n"),
                       progname, pid);
@@ -1231,8 +1233,8 @@ do_status(void)
                optlines = readfile(postopts_file);
                if (optlines != NULL)
                {
-                   for (; *optlines != NULL; optlines++)
-                       fputs(*optlines, stdout);
+                   for (curr_line = optlines; *curr_line != NULL; curr_line++)
+                       fputs(*curr_line, stdout);
 
                    /* Free the results of readfile */
                    free_readfile(optlines);