Ticket #1393 (closed defect: fixed)

Opened 10 years ago

Last modified 10 years ago

Memory leak in src/file.c::copy_dir_dir()

Reported by: andrew_b Owned by: andrew_b
Priority: critical Milestone: 4.7.0-pre1
Component: mc-core Version: master
Keywords: Cc:
Blocked By: Blocking:
Branch state: Votes for changeset: committed-master

Description

Bugreport in mc-devel@ mail list from vda:

Noticed this memory leak while working on another problem.
Watch variable d:

    char *d;

    /* First get the mode of the source dir */
  retry_src_stat:
    if ((*ctx->stat_func) (s, &cbuf)) {
        return_status =
            file_error (_(" Cannot stat source directory \"%s\" \n %s "), s);
        if (return_status == FILE_RETRY)
            goto retry_src_stat;
        return return_status;
    }

    if (is_in_linklist (dest_dirs, s, &cbuf)) {
        /* Don't copy a directory we created before (we don't want to copy.
           infinitely if a directory is copied into itself) */
        /* FIXME: should there be an error message and FILE_SKIP? - Norbert */
        return FILE_CONT;
    }

    d = strutils_shell_unescape (_d);

/* Hmm, hardlink to directory??? - Norbert */
/* FIXME: In this step we should do something
   in case the destination already exist */
    /* Check the hardlinks */
    if (ctx->preserve && cbuf.st_nlink > 1
        && check_hardlinks (s, d, &cbuf) == 1) {
        /* We have made a hardlink - no more processing is necessary */
        g_free(d);
        return return_status;
    }

    if (!S_ISDIR (cbuf.st_mode)) {
        return_status =
            file_error (_(" Source \"%s\" is not a directory \n %s "), s);
        if (return_status == FILE_RETRY)
//bug: leaking d
            goto retry_src_stat;
        g_free(d);
        return return_status;
    }


The fix is simple: move g_free(d) up two lines.

Please, can someone with write access do this? Thanks.

Change History

comment:1 Changed 10 years ago by andrew_b

  • Status changed from new to accepted
  • Owner set to andrew_b

comment:2 Changed 10 years ago by andrew_b

  • severity changed from no branch to on review

Created 1393_copy_dir_dir_memleak branch. Parent branch: master.
Initial changeset:80006e30e37436f7ba06dfd08608c7e20d1a3dcd

comment:3 Changed 10 years ago by winnie

  • Votes for changeset set to winnie

looks fine, thanks for the patch

comment:4 Changed 10 years ago by angel_il

  • Votes for changeset changed from winnie to winnie angel_il
  • severity changed from on review to approved

comment:5 Changed 10 years ago by angel_il

  • Votes for changeset changed from winnie angel_il to winnie
  • severity changed from approved to on review

comment:6 Changed 10 years ago by angel_il

  • Votes for changeset changed from winnie to winnie angel_il
  • severity changed from on review to approved

comment:7 Changed 10 years ago by andrew_b

  • Status changed from accepted to testing
  • Resolution set to fixed
  • severity changed from approved to merged

comment:8 Changed 10 years ago by andrew_b

  • Status changed from testing to closed

comment:9 Changed 10 years ago by angel_il

  • Votes for changeset changed from winnie angel_il to commited-master
Note: See TracTickets for help on using tickets.