unlzma: fix memory leak (Pascal Bellard)

This commit is contained in:
Denis Vlasenko 2008-06-27 15:48:45 +00:00
parent ac2b50ebea
commit 2bbdda09df

View File

@ -60,7 +60,7 @@ static rc_t* rc_init(int fd) /*, int buffer_size) */
int i; int i;
rc_t *rc; rc_t *rc;
rc = xmalloc(sizeof(rc_t) + RC_BUFFER_SIZE); rc = xmalloc(sizeof(*rc) + RC_BUFFER_SIZE);
rc->fd = fd; rc->fd = fd;
/* rc->buffer_size = buffer_size; */ /* rc->buffer_size = buffer_size; */
@ -80,7 +80,6 @@ static rc_t* rc_init(int fd) /*, int buffer_size) */
/* Called once */ /* Called once */
static ALWAYS_INLINE void rc_free(rc_t *rc) static ALWAYS_INLINE void rc_free(rc_t *rc)
{ {
if (ENABLE_FEATURE_CLEAN_UP)
free(rc); free(rc);
} }
@ -489,12 +488,16 @@ unpack_lzma_stream(int src_fd, int dst_fd)
} }
} }
{
SKIP_DESKTOP(int total_written = 0; /* success */)
USE_DESKTOP(total_written += buffer_pos;)
if (full_write(dst_fd, buffer, buffer_pos) != (ssize_t)buffer_pos) { if (full_write(dst_fd, buffer, buffer_pos) != (ssize_t)buffer_pos) {
bad: bad:
rc_free(rc); total_written = -1; /* failure */
return -1;
} }
rc_free(rc); rc_free(rc);
USE_DESKTOP(total_written += buffer_pos;) free(p);
return USE_DESKTOP(total_written) + 0; free(buffer);
return total_written;
}
} }