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;
rc_t *rc;
rc = xmalloc(sizeof(rc_t) + RC_BUFFER_SIZE);
rc = xmalloc(sizeof(*rc) + RC_BUFFER_SIZE);
rc->fd = fd;
/* rc->buffer_size = buffer_size; */
@ -80,7 +80,6 @@ static rc_t* rc_init(int fd) /*, int buffer_size) */
/* Called once */
static ALWAYS_INLINE void rc_free(rc_t *rc)
{
if (ENABLE_FEATURE_CLEAN_UP)
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) {
bad:
rc_free(rc);
return -1;
total_written = -1; /* failure */
}
rc_free(rc);
USE_DESKTOP(total_written += buffer_pos;)
return USE_DESKTOP(total_written) + 0;
free(p);
free(buffer);
return total_written;
}
}