- Fixed bug #34893 (PHP5.1 overloading, Cannot access private property).
(Dmitry)
- Fixed bug #34899 (Fixed sqlite extension compile failure). (Ilia)
+- Fixed bug #34821 (zlib encoders fail on widely varying binary data on windows)
+ (Mike, Ilia)
- Fixed bug #34782 (token_get_all() gives wrong result). (Dmitry)
- Fixed bug #34767 (Zend Engine 1 Compatibility not copying objects correctly).
(Dmitry)
--- /dev/null
+--TEST--
+bug 34821
+--SKIPIF--
+<?php if (!extension_loaded("zlib")) print "skip"; ?>
+--FILE--
+<?php
+
+// test 50 bytes to 500k
+$b = array(
+ 50,
+ 500,
+ 5000,
+ 500000,
+// 1000000, // works, but test would take too long
+);
+
+srand(time());
+
+foreach ($b as $size) {
+ $s = '';
+ for ($i = 0; $i <= $size; ++$i) {
+ $s .= chr(rand(0,255));
+ }
+ var_dump($s == gzinflate(gzdeflate($s)));
+ var_dump($s == gzuncompress(gzcompress($s)));
+ var_dump($s == gzinflate(substr(gzencode($s), 10, -8)));
+}
+?>
+--EXPECT--
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
#endif
#endif
+/* Win32 needs some more memory */
+#ifdef PHP_WIN32
+#define PHP_ZLIB_MODIFIER 100
+#else
+#define PHP_ZLIB_MODIFIER 1000
+#endif
+
#define OS_CODE 0x03 /* FIXME */
#define GZIP_HEADER_LENGTH 10
#define GZIP_FOOTER_LENGTH 8
RETURN_FALSE;
}
- l2 = data_len + (data_len / 1000) + 15 + 1; /* room for \0 */
+ l2 = data_len + (data_len / PHP_ZLIB_MODIFIER) + 15 + 1; /* room for \0 */
s2 = (char *) emalloc(l2);
if (!s2) {
RETURN_FALSE;
stream.next_in = (Bytef *) data;
stream.avail_in = data_len;
- stream.avail_out = stream.avail_in + (stream.avail_in / 1000) + 15 + 1; /* room for \0 */
+ stream.avail_out = stream.avail_in + (stream.avail_in / PHP_ZLIB_MODIFIER) + 15 + 1; /* room for \0 */
s2 = (char *) emalloc(stream.avail_out);
if (!s2) {
int start_offset = ((do_start && ZLIBG(compression_coding) == CODING_GZIP) ? 10 : 0);
int end_offset = (do_end ? 8 : 0);
- outlen = (uint) (sizeof(char) * (str_length * 1.001f + 12) + 1); /* leave some room for a trailing \0 */
+ outlen = (uint) (sizeof(char) * (str_length / PHP_ZLIB_MODIFIER + 12) + 1); /* leave some room for a trailing \0 */
if ((outlen + start_offset + end_offset) > *p_buffer_len) {
buffer = (Bytef *) emalloc(outlen + start_offset + end_offset);
} else {
stream.next_in = (Bytef *) data;
stream.avail_in = data_len;
- stream.avail_out = stream.avail_in + (stream.avail_in / 1000) + 15 + 1; /* room for \0 */
+ stream.avail_out = stream.avail_in + (stream.avail_in / PHP_ZLIB_MODIFIER) + 15 + 1; /* room for \0 */
s2 = (char *) emalloc(stream.avail_out + GZIP_HEADER_LENGTH + (coding == CODING_GZIP ? GZIP_FOOTER_LENGTH : 0));
/* add gzip file header */