Some patchs

Denys Vlasenko vda.linux at googlemail.com
Fri Jun 27 15:48:00 UTC 2008


On Thursday 26 June 2008 16:17, Pascal Bellard wrote:
> unlzma: memory leak
> http://hg.slitaz.org/wok/raw-file/be0892d9efd5/busybox/stuff/busybox-1.11.0-unlzma.u

Good catch.

@@ -491,10 +491,14 @@

        if (full_write(dst_fd, buffer, buffer_pos) != (ssize_t)buffer_pos) {
  bad:
-               rc_free(rc);
-               return -1;
+               len = -1;
+       }
+       else {
+               USE_DESKTOP(total_written += buffer_pos;)
+               len = USE_DESKTOP(total_written) + 0;

The only problem here is that len is "int", whereas total_written is "llong".

        }
        rc_free(rc);
-       USE_DESKTOP(total_written += buffer_pos;)
-       return USE_DESKTOP(total_written) + 0;
+       rc_free(buffer);
+       rc_free(p);
+       return len;
 }

Oh, and we also leak buffer! :(

I propose the following:

        {
                USE_DESKTOP(total_written += buffer_pos;)
                SKIP_DESKTOP(int total_written = 0; /* success */)
                if (full_write(dst_fd, buffer, buffer_pos) != (ssize_t)buffer_pos) {
 bad:
                        total_written = -1; /* failure */
                }
                rc_free(rc);
                free(p);
                free(buffer);
                return total_written;
        }
}

--
vda




More information about the busybox mailing list