diff options
Diffstat (limited to 'jim-zlib.c')
-rw-r--r-- | jim-zlib.c | 13 |
1 files changed, 9 insertions, 4 deletions
@@ -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; } |