]> git.neil.brown.name Git - wiggle.git/commitdiff
Fix very minor memory leaks in do_merge()
authorStephen M. Cameron <stephenmcameron@gmail.com>
Tue, 1 Oct 2019 11:17:40 +0000 (07:17 -0400)
committerStephen M. Cameron <stephenmcameron@gmail.com>
Tue, 1 Oct 2019 11:18:34 +0000 (07:18 -0400)
Signed-off-by: Stephen M. Cameron <stephenmcameron@gmail.com>
wiggle.c

index d4e88ebd0c6d149ec32428cc7336b5f8978e0634..e1728a3778af85f94bfe4d016cb28ddd043ae338 100644 (file)
--- a/wiggle.c
+++ b/wiggle.c
@@ -543,6 +543,8 @@ static int do_merge(int argc, char *argv[], int obj, int blanks,
                        fprintf(stderr, "%s: %s already exists\n",
                                Cmd,
                                orignew);
+                       free(replacename);
+                       free(orignew);
                        return 2;
                }
                strcat(replacename, "XXXXXX");
@@ -552,6 +554,8 @@ static int do_merge(int argc, char *argv[], int obj, int blanks,
                                "%s: could not create temporary file for %s\n",
                                Cmd,
                                replacename);
+                       free(replacename);
+                       free(orignew);
                        return 2;
                }
                outfile = fdopen(fd, "w");
@@ -595,12 +599,16 @@ static int do_merge(int argc, char *argv[], int obj, int blanks,
                        fprintf(stderr,
                                "%s: failed to stat original file. - %s\n",
                                Cmd, strerror(errno));
+                       free(replacename);
+                       free(orignew);
                        return 2;
                }
                if (fchmod(fileno(outfile), statbuf.st_mode) != 0) {
                        fprintf(stderr,
                                "%s: failed to change permission of new file. - %s\n",
                                Cmd, strerror(errno));
+                       free(replacename);
+                       free(orignew);
                        return 2;
                }
                fclose(outfile);
@@ -611,9 +619,15 @@ static int do_merge(int argc, char *argv[], int obj, int blanks,
                        fprintf(stderr,
                                "%s: failed to move new file into place.\n",
                                Cmd);
+                       free(replacename);
+                       free(orignew);
                        return 2;
                }
        }
+       if (replacename)
+               free(replacename);
+       if (orignew)
+               free(orignew);
        if (show_wiggles)
                return ci.conflicts + ci.wiggles > 0;
        else