]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
Fix memory leak when restore is aborted
authorEric Bollengier <eric@baculasystems.com>
Fri, 19 Nov 2021 21:22:22 +0000 (22:22 +0100)
committerEric Bollengier <eric@baculasystems.com>
Thu, 14 Sep 2023 11:56:56 +0000 (13:56 +0200)
bacula/src/dird/bsr.c
bacula/src/dird/ua_restore.c

index f97e61b173f68ce9e3fa928b39a17338423d1952..0b401ed441ba34883d09b15ef2e4625ff3ee9862 100644 (file)
@@ -162,6 +162,9 @@ RBSR *new_bsr()
 void free_bsr(rblist *bsr_list)
 {
    RBSR *bsr;
+   if (!bsr_list) {
+      return;                   /* Already done */
+   }
    foreach_rblist(bsr, bsr_list) {
       delete bsr->fi_list;
       if (bsr->VolParams) {
index 2c71c176ab0b679af4546777b8ecf97b4f71bf9d..64f17ef71714a37de7a933167d3a4c1ad8ff5473 100644 (file)
@@ -413,21 +413,23 @@ int restore_cmd(UAContext *ua, const char *cmd)
     *  line.
     */
    /* ***FIXME*** pass jobids on command line */
-   if (jcr->JobIds) {
-      free_pool_memory(jcr->JobIds);
-   }
+   free_and_null_pool_memory(jcr->JobIds);
    jcr->JobIds = rx.JobIds;
    rx.JobIds = NULL;
+
+   free_and_null_pool_memory(jcr->component_fname);
    jcr->component_fname = rx.component_fname;
    rx.component_fname = NULL;
+
    jcr->component_fd = rx.component_fd;
    rx.component_fd = NULL;
+   /* The Client might request the file list */
    if (jcr->bsr_list) {
       free_bsr(jcr->bsr_list);
    }
-   /* The Client might request the file list */
    jcr->bsr_list = rx.bsr_list;
    rx.bsr_list = NULL;
+
    parse_ua_args(ua);
    run_cmd(ua, ua->cmd);
    free_rx(&rx);