summaryrefslogtreecommitdiff
path: root/jim-zlib.c
diff options
context:
space:
mode:
Diffstat (limited to 'jim-zlib.c')
-rw-r--r--jim-zlib.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/jim-zlib.c b/jim-zlib.c
index 4bf88a4..bb91913 100644
--- a/jim-zlib.c
+++ b/jim-zlib.c
@@ -44,8 +44,7 @@
static int JimZlibCheckBufSize(Jim_Interp *interp, jim_wide bufsiz)
{
if ((bufsiz <= 0) || (bufsiz > INT_MAX)) {
- Jim_SetResultString(interp, "buffer size must be 0 to ", -1);
- Jim_AppendObj(interp, Jim_GetResult(interp), Jim_NewIntObj(interp, INT_MAX));
+ Jim_SetResultFormatted(interp, "buffer size must be 0 to %#s", Jim_NewIntObj(interp, INT_MAX));
return JIM_ERR;
}
return JIM_OK;
@@ -86,6 +85,10 @@ static int Jim_Compress(Jim_Interp *interp, const char *in, int len, long level,
}
strm.avail_out = deflateBound(&strm, (uLong)len);
+
+ /* Some compression methods may need a little more space */
+ strm.avail_out += 100;
+
if (strm.avail_out > INT_MAX) {
deflateEnd(&strm);
return JIM_ERR;
@@ -99,15 +102,17 @@ static int Jim_Compress(Jim_Interp *interp, const char *in, int len, long level,
* decompressed data anyway, so there's no reason to do chunked
* decompression */
if (deflate(&strm, Z_FINISH) != Z_STREAM_END) {
- Jim_Free(strm.next_out);
+ Jim_Free(buf);
deflateEnd(&strm);
+ Jim_SetResultString(interp, "not enough output space", -1);
return JIM_ERR;
}
deflateEnd(&strm);
if (strm.total_out > INT_MAX) {
- Jim_Free(strm.next_out);
+ Jim_Free(buf);
+ Jim_SetResultString(interp, "too much output", -1);
return JIM_ERR;
}