bug75273.phpt 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. --TEST--
  2. Bug #75273 (php_zlib_inflate_filter() may not update bytes_consumed)
  3. --EXTENSIONS--
  4. zlib
  5. --FILE--
  6. <?php
  7. function non_repeating_str($len = 8192) {
  8. $ret = '';
  9. mt_srand(1);
  10. $iterations = (int) ($len / 256) + 1;
  11. for ($i = 0; $i < $iterations; $i++) {
  12. $haves = array();
  13. $cnt = 0;
  14. while ($cnt < 256) {
  15. $j = mt_rand(0, 255);
  16. if (!isset($haves[$j])) {
  17. $haves[$j] = $j;
  18. $cnt++;
  19. $ret .= chr($j);
  20. }
  21. }
  22. }
  23. return substr($ret, 0, $len);
  24. }
  25. $base_len = 32768 - 23 /*overhead*/;
  26. $stream = fopen('php://memory', 'rb+');
  27. for ($i = 1; $i <= 8; $i++) {
  28. $in_data = non_repeating_str($base_len + $i);
  29. $deflate_filter = stream_filter_append($stream, 'zlib.deflate', STREAM_FILTER_WRITE, ['window' => 16 + 15]);
  30. rewind($stream);
  31. fwrite($stream, $in_data);
  32. stream_filter_remove($deflate_filter);
  33. rewind($stream);
  34. $out_data = stream_get_contents($stream);
  35. $out_data_len = strlen($out_data);
  36. $inflate_filter = stream_filter_prepend($stream, 'zlib.inflate', STREAM_FILTER_WRITE, ['window' => 16 + 15]);
  37. rewind($stream);
  38. $fwrite_len = fwrite($stream, $out_data);
  39. stream_filter_remove($inflate_filter);
  40. if ($out_data_len !== $fwrite_len) {
  41. echo "bug i=$i out_data_len=$out_data_len fwrite_len=$fwrite_len\n";
  42. }
  43. }
  44. fclose($stream);
  45. ?>
  46. ===DONE===
  47. --EXPECT--
  48. ===DONE===