diff --git a/ext/zlib/tests/001.phpt b/ext/zlib/tests/001.phpt new file mode 100644 index 00000000000..fab6d5dfa34 --- /dev/null +++ b/ext/zlib/tests/001.phpt @@ -0,0 +1,17 @@ +--TEST-- +gzdeflate()/gzinflate() +--SKIPIF-- + +--POST-- +--GET-- +--FILE-- + +--EXPECT-- +100 36864 +Strings are equal diff --git a/ext/zlib/tests/002.phpt b/ext/zlib/tests/002.phpt new file mode 100644 index 00000000000..24ad827e325 --- /dev/null +++ b/ext/zlib/tests/002.phpt @@ -0,0 +1,17 @@ +--TEST-- +gzcompress()/gzuncompress() +--SKIPIF-- + +--POST-- +--GET-- +--FILE-- + +--EXPECT-- +106 36864 +Strings are equal diff --git a/ext/zlib/tests/003.phpt b/ext/zlib/tests/003.phpt new file mode 100644 index 00000000000..c6fa912dee5 --- /dev/null +++ b/ext/zlib/tests/003.phpt @@ -0,0 +1,16 @@ +--TEST-- +gzdeflate()/gzinflate() +--SKIPIF-- + +--POST-- +--GET-- +--FILE-- + +--EXPECT-- +124 36864 +Strings are equal diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index a752c4ae0cd..5d36cec76f4 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -760,7 +760,7 @@ PHP_FUNCTION(gzcompress) } convert_to_string_ex(data); - l2 = (*data)->value.str.len + ((*data)->value.str.len/1000) + 15; + l2 = (*data)->value.str.len + ((*data)->value.str.len/1000) + 15 + 1; /* room for \0 */ s2 = (char *) emalloc(l2); if(! s2) RETURN_FALSE; @@ -770,7 +770,9 @@ PHP_FUNCTION(gzcompress) status = compress(s2,&l2,(*data)->value.str.val, (*data)->value.str.len); } - if(status==Z_OK) { + if (status==Z_OK) { + s2 = erealloc(s2,l2 + 1); + s2[l2] = '\0'; RETURN_STRINGL(s2, l2, 0); } else { efree(s2); @@ -785,7 +787,7 @@ PHP_FUNCTION(gzcompress) PHP_FUNCTION(gzuncompress) { zval **data, **zlimit = NULL; - int status,factor=1,maxfactor=8; + int status,factor=1,maxfactor=16; unsigned long plength=0,length; char *s1=NULL,*s2=NULL; @@ -825,8 +827,9 @@ PHP_FUNCTION(gzuncompress) s1=s2; } while((status==Z_BUF_ERROR)&&(!plength)&&(factor *p_buffer_len) { - buffer = realloc(buffer, outlen+start_offset+end_offset); + buffer = erealloc(buffer, outlen+start_offset+end_offset); } ZLIBG(stream).next_out = buffer+start_offset + prev_outlen;