Commit d0fc110 for zlib
commit d0fc110cc31a30132bf878a86cf530e83d34d974
Author: Mark Adler <madler@alumni.caltech.edu>
Date: Fri May 16 10:21:11 2025 -0700
Remove redundant frees of point list on error in examples/zran.c.
Also clean out the point list contents when freed, even though the
structure itself is freed, in case someone tries to free it again.
diff --git a/examples/zran.c b/examples/zran.c
index 6ce75dd..731d34d 100644
--- a/examples/zran.c
+++ b/examples/zran.c
@@ -1,7 +1,7 @@
/* zran.c -- example of deflate stream indexing and random access
- * Copyright (C) 2005, 2012, 2018, 2023, 2024 Mark Adler
+ * Copyright (C) 2005, 2012, 2018, 2023, 2024, 2025 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
- * Version 1.6 2 Aug 2024 Mark Adler */
+ * Version 1.7 16 May 2025 Mark Adler */
/* Version History:
1.0 29 May 2005 First version
@@ -19,6 +19,8 @@
Provide a reusable inflate engine in the index
Allocate the dictionaries to reduce memory usage
1.6 2 Aug 2024 Remove unneeded dependency on limits.h
+ 1.7 16 May 2025 Remove redundant frees of point list on error
+ Clean out point list structure when freed
*/
// Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary()
@@ -71,19 +73,19 @@
// See comments in zran.h.
void deflate_index_free(struct deflate_index *index) {
if (index != NULL) {
- size_t i = index->have;
- while (i)
- free(index->list[--i].window);
+ while (index->have)
+ free(index->list[--index->have].window);
free(index->list);
+ index->list = NULL;
inflateEnd(&index->strm);
free(index);
}
}
-// Add an access point to the list. If out of memory, deallocate the existing
-// list and return NULL. index->mode is temporarily the allocated number of
-// access points, until it is time for deflate_index_build() to return. Then
-// index->mode is set to the mode of inflation.
+// Add an access point to the list. If out of memory, return NULL. index->mode
+// is temporarily the allocated number of access points, until it is time for
+// deflate_index_build() to return. Then index->mode is set to the mode of
+// inflation.
static struct deflate_index *add_point(struct deflate_index *index, off_t in,
off_t out, off_t beg,
unsigned char *window) {
@@ -91,29 +93,23 @@ static struct deflate_index *add_point(struct deflate_index *index, off_t in,
// The list is full. Make it bigger.
index->mode = index->mode ? index->mode << 1 : 8;
point_t *next = realloc(index->list, sizeof(point_t) * index->mode);
- if (next == NULL) {
- deflate_index_free(index);
+ if (next == NULL)
return NULL;
- }
index->list = next;
}
// Fill in the access point and increment how many we have.
point_t *next = (point_t *)(index->list) + index->have++;
- if (index->have < 0) {
+ if (index->have < 0)
// Overflowed the int!
- deflate_index_free(index);
return NULL;
- }
next->out = out;
next->in = in;
next->bits = index->strm.data_type & 7;
next->dict = out - beg > WINSIZE ? WINSIZE : (unsigned)(out - beg);
next->window = malloc(next->dict);
- if (next->window == NULL) {
- deflate_index_free(index);
+ if (next->window == NULL)
return NULL;
- }
unsigned recent = WINSIZE - index->strm.avail_out;
unsigned copy = recent > next->dict ? next->dict : recent;
memcpy(next->window + next->dict - copy, window + recent - copy, copy);
diff --git a/examples/zran.h b/examples/zran.h
index 5c6e643..16a84fe 100644
--- a/examples/zran.h
+++ b/examples/zran.h
@@ -1,7 +1,7 @@
-/* zran.h -- example of deflated stream indexing and random access
- * Copyright (C) 2005, 2012, 2018, 2023, 2024 Mark Adler
+/* zran.h -- example of deflate stream indexing and random access
+ * Copyright (C) 2005, 2012, 2018, 2023, 2024, 2025 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
- * Version 1.5 4 Feb 2024 Mark Adler */
+ * Version 1.7 16 May 2025 Mark Adler */
#include <stdio.h>
#include "zlib.h"