Skip to content

Commit c6e3783

Browse files
committed
Free context if zip_source_layered_create() fails.
Closes #512
1 parent 9de4dd8 commit c6e3783

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

lib/zip_source_crc.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ static zip_int64_t crc_read(zip_source_t *, void *, void *, zip_uint64_t, zip_so
5454
zip_source_t *
5555
zip_source_crc_create(zip_source_t *src, int validate, zip_error_t *error) {
5656
struct crc_context *ctx;
57+
zip_source_t *new_src;
5758

5859
if (src == NULL) {
5960
zip_error_set(error, ZIP_ER_INVAL, 0);
@@ -72,7 +73,12 @@ zip_source_crc_create(zip_source_t *src, int validate, zip_error_t *error) {
7273
ctx->crc = (zip_uint32_t)crc32(0, NULL, 0);
7374
ctx->size = 0;
7475

75-
return zip_source_layered_create(src, crc_read, ctx, error);
76+
new_src = zip_source_layered_create(src, crc_read, ctx, error);
77+
if (new_src == NULL) {
78+
free(ctx);
79+
return NULL;
80+
}
81+
return new_src;
7682
}
7783

7884

lib/zip_source_window.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,11 @@ _zip_source_window_new(zip_source_t *src, zip_uint64_t start, zip_int64_t length
125125
}
126126

127127
window_source = zip_source_layered_create(src, window_read, ctx, error);
128-
if (window_source != NULL && !take_ownership) {
128+
if (window_source == NULL) {
129+
free(ctx);
130+
return NULL;
131+
}
132+
if (!take_ownership) {
129133
zip_source_keep(src);
130134
}
131135
return window_source;

0 commit comments

Comments
 (0)