diff options
author | Anatol Belski <ab@php.net> | 2016-09-23 18:45:03 +0200 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2016-09-23 18:45:03 +0200 |
commit | 075aa911ff8c11620f1a5633c1a107c09919794f (patch) | |
tree | 2b31bda9ee51fb9898a92e5becb2a0982f63c253 | |
parent | 28887fe41b72069465fb3fc3acc3e202c2434e0e (diff) | |
download | php-git-075aa911ff8c11620f1a5633c1a107c09919794f.tar.gz |
Revert "Fixed bug #73037 SoapServer reports Bad Request when gzipped"
This reverts commit f9a699f6c3aa7acea922242a0f14731f6b829742.
-rw-r--r-- | ext/soap/soap.c | 2 | ||||
-rw-r--r-- | ext/soap/tests/bug73037.phpt | 197 | ||||
-rw-r--r-- | main/streams/streams.c | 2 |
3 files changed, 1 insertions, 200 deletions
diff --git a/ext/soap/soap.c b/ext/soap/soap.c index f79d84c8a1..f0e26bf19d 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -1598,8 +1598,6 @@ PHP_METHOD(SoapServer, handle) if (zf) { php_stream_filter_append(&SG(request_info).request_body->readfilters, zf); - SG(request_info).request_body->flags &= ~PHP_STREAM_FLAG_NO_BUFFER; - } else { php_error_docref(NULL TSRMLS_CC, E_WARNING,"Can't uncompress compressed request"); return; diff --git a/ext/soap/tests/bug73037.phpt b/ext/soap/tests/bug73037.phpt deleted file mode 100644 index c0e638545b..0000000000 --- a/ext/soap/tests/bug73037.phpt +++ /dev/null @@ -1,197 +0,0 @@ ---TEST-- -Bug #73037 SoapServer reports Bad Request when gzipped, var 0 ---SKIPIF-- -<?php - die("skip test needs improvement"); - require_once('skipif.inc'); - if (!extension_loaded("zlib")) { - echo "skip zlib is required for this test"; - } -?> ---FILE-- -<?php - -function get_data($max) -{ - $piece = "<CD> - <TITLE>Empire Burlesque</TITLE> - <ARTIST>Bob Dylan</ARTIST> - <COUNTRY>USA</COUNTRY> - <COMPANY>Columbia</COMPANY> - <PRICE>10.90</PRICE> - <YEAR>1985</YEAR> - </CD>"; - - $begin = '<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><CATALOG>'; - $end = '</CATALOG></soapenv:Body></soapenv:Envelope>'; - - $min = strlen($begin) + strlen($piece) + strlen($end); - $max = $max < $min ? $min : $max; - - $data = $begin; - $data .= $piece; - while (strlen($data) + strlen($end) < $max) { - /* Randomize a bit, taking gzip in account. */ - $tmp = str_replace( - array( - "Empire Burlesque", - "Bob Dylan", - ), - array( - md5(uniqid()), - sha1(uniqid()), - ), - $piece - ); - - if (strlen($begin) + strlen($tmp) + strlen($end) > $max) { - break; - } - - $data .= $tmp; - } - $data .= $end; - - return $data; -} - -$code = <<<'PHP' -$s = new SoapServer(NULL, array('uri' => 'http://here')); -$s->setObject(new stdclass()); -$s->handle(); -PHP; - -$router = "bug73037_server.php"; -file_put_contents(dirname(__FILE__) . DIRECTORY_SEPARATOR . $router, '<?php ' . $code . ' ?>'); - -$host = "localhost"; -$port = "8965"; -$desc = array( - 0 => STDIN, - 1 => STDOUT, - 2 => STDERR, -); -/*$desc = array( - array("pipe", "r"), - array("pipe", "w"), - array("pipe", "w") -);*/ -if (substr(PHP_OS, 0, 3) == 'WIN') { - $cmd = getenv('TEST_PHP_EXECUTABLE') . " -t " . dirname(__FILE__) . " -S $host:$port"; - $handle = proc_open($cmd, $desc, $pipes, dirname(__FILE__), NULL, array("bypass_shell" => true, "suppress_errors" => true)); -} else { - $cmd = getenv('TEST_PHP_EXECUTABLE') . " -t " . dirname(__FILE__) . " -S $host:$port 2>/dev/null"; - $handle = proc_open($cmd, $desc, $pipes, dirname(__FILE__)); -} -//echo stream_get_contents($pipes[1]), "\n", stream_get_contents($pipes[2]); - -foreach (array(1024-1, 1024*8-3, 1024*9+1, 1024*16-1, 1024*32-5, 1024*64+3, 1024*128-7) as $k => $i) { - echo "Iteration $k\n\n"; - - /* with and without compression */ - foreach (array(false, true) as $b) { - $data = get_data($i); - if ($b) { - $data = gzencode($data); - } - $len = strlen($data); - - //echo "len=$len\n"; - - $hdrs = <<<HDRS -POST /bug73037_server.php HTTP/1.1 -Content-Type: application/soap+xml; charset=UTF-8 -Accept: application/soap+xml, application/dime, multipart/related, text/* -SOAPAction: "urn:adressen#adressen#SetAda" -Expect: 100-continue -Content-Length: ${len} -HDRS; - if ($b) { - $hdrs .="\nContent-Encoding: gzip"; - } - //echo "Headers sent:\n$hdrs\n\n"; - $fp = fsockopen($host, $port, $errno, $errstr, 5); - if (!$fp) { - die("connect failed"); - } - - if(fwrite($fp, "$hdrs\n\n$data")) { - $out = ""; - while (!feof($fp)) { - $out .= fread($fp, 1024); - } - - $pos = strpos($out, "<env:Text>"); - if (false === $pos) { - echo $out; - goto cleanup; - } - $pos0 = $pos + strlen("<env:Text>"); - $pos = strpos($out, "</env:Text>"); - if (false === $pos) { - echo $out; - goto cleanup; - } - $len = $pos - $pos0; - echo substr($out, $pos0, $len); - } - -cleanup: - fclose($fp); - - echo "\n\n"; - } -} - -proc_terminate($handle); - -?> -==DONE== ---CLEAN-- -<?php -unlink(dirname(__FILE__) . DIRECTORY_SEPARATOR . "bug73037_server.php"); -?> ---EXPECT-- -Iteration 0 - -Function 'CATALOG' doesn't exist - -Function 'CATALOG' doesn't exist - -Iteration 1 - -Function 'CATALOG' doesn't exist - -Function 'CATALOG' doesn't exist - -Iteration 2 - -Function 'CATALOG' doesn't exist - -Function 'CATALOG' doesn't exist - -Iteration 3 - -Function 'CATALOG' doesn't exist - -Function 'CATALOG' doesn't exist - -Iteration 4 - -Function 'CATALOG' doesn't exist - -Function 'CATALOG' doesn't exist - -Iteration 5 - -Function 'CATALOG' doesn't exist - -Function 'CATALOG' doesn't exist - -Iteration 6 - -Function 'CATALOG' doesn't exist - -Function 'CATALOG' doesn't exist - -==DONE== diff --git a/main/streams/streams.c b/main/streams/streams.c index 4446f9ecd5..4e00cd1be3 100644 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -1289,7 +1289,7 @@ PHPAPI int _php_stream_seek(php_stream *stream, off_t offset, int whence TSRMLS_ } break; case SEEK_SET: - if (offset >= stream->position && + if (offset > stream->position && offset <= stream->position + stream->writepos - stream->readpos) { stream->readpos += offset - stream->position; stream->position = offset; |