Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.sbin/makemandb fix memory allocation problems detected b...
details: https://anonhg.NetBSD.org/src/rev/3f958eac4ba0
branches: trunk
changeset: 449473:3f958eac4ba0
user: christos <christos%NetBSD.org@localhost>
date: Thu Mar 07 22:08:59 2019 +0000
description:
fix memory allocation problems detected by jemalloc...
diffstat:
usr.sbin/makemandb/apropos-utils.c | 20 +++++++++++++-------
1 files changed, 13 insertions(+), 7 deletions(-)
diffs (64 lines):
diff -r 164f2b8c8a32 -r 3f958eac4ba0 usr.sbin/makemandb/apropos-utils.c
--- a/usr.sbin/makemandb/apropos-utils.c Thu Mar 07 18:32:10 2019 +0000
+++ b/usr.sbin/makemandb/apropos-utils.c Thu Mar 07 22:08:59 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: apropos-utils.c,v 1.40 2017/11/25 14:29:38 abhinav Exp $ */
+/* $NetBSD: apropos-utils.c,v 1.41 2019/03/07 22:08:59 christos Exp $ */
/*-
* Copyright (c) 2011 Abhinav Upadhyay <er.abhinav.upadhyay%gmail.com@localhost>
* All rights reserved.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: apropos-utils.c,v 1.40 2017/11/25 14:29:38 abhinav Exp $");
+__RCSID("$NetBSD: apropos-utils.c,v 1.41 2019/03/07 22:08:59 christos Exp $");
#include <sys/queue.h>
#include <sys/stat.h>
@@ -270,34 +270,40 @@
unsigned int rc;
unsigned char *outbuf;
z_stream stream;
+ long total_out;
assert(nval == 1);
+ memset(&stream, 0, sizeof(stream));
stream.next_in = __UNCONST(sqlite3_value_blob(apval[0]));
stream.avail_in = sqlite3_value_bytes(apval[0]);
- stream.avail_out = stream.avail_in * 2 + 100;
- stream.next_out = outbuf = emalloc(stream.avail_out);
stream.zalloc = NULL;
stream.zfree = NULL;
if (inflateInit(&stream) != Z_OK) {
- free(outbuf);
return;
}
+ total_out = stream.avail_out = stream.avail_in * 2 + 100;
+ stream.next_out = outbuf = emalloc(stream.avail_out);
while ((rc = inflate(&stream, Z_SYNC_FLUSH)) != Z_STREAM_END) {
if (rc != Z_OK ||
(stream.avail_out != 0 && stream.avail_in == 0)) {
free(outbuf);
return;
}
- outbuf = erealloc(outbuf, stream.total_out * 2);
+ total_out <<= 1;
+ outbuf = erealloc(outbuf, total_out);
stream.next_out = outbuf + stream.total_out;
- stream.avail_out = stream.total_out;
+ stream.avail_out = total_out - stream.total_out;
}
if (inflateEnd(&stream) != Z_OK) {
free(outbuf);
return;
}
+ if (stream.total_out == 0) {
+ free(outbuf);
+ return;
+ }
outbuf = erealloc(outbuf, stream.total_out);
sqlite3_result_text(pctx, (const char *)outbuf, stream.total_out, free);
}
Home |
Main Index |
Thread Index |
Old Index