Skip to content

Commit 3a90b2a

Browse files
authored
Merge pull request #73 from maciejmrozinski/chunk_size_leading_zeros
Trim leading zeros from chunk size, Varnish Cache problem
2 parents ec3f739 + 3c9ab0a commit 3a90b2a

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

src/ChunkedStreamDecoder.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,12 @@ protected function iterateBuffer()
111111
if (strpos($lengthChunk, ';') !== false) {
112112
list($lengthChunk) = explode(';', $lengthChunk, 2);
113113
}
114+
if ($lengthChunk !== '') {
115+
$lengthChunk = ltrim($lengthChunk, "0");
116+
if ($lengthChunk === '') {
117+
$lengthChunk = "0";
118+
}
119+
}
114120
if (dechex(hexdec($lengthChunk)) !== $lengthChunk) {
115121
$this->emit('error', [
116122
new Exception('Unable to validate "' . $lengthChunk . '" as chunk length header'),

tests/DecodeChunkedStreamTest.php

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,37 @@ public function provideChunkedEncoding()
4343
["6\r\nWi\r\n", "ki\r\n5\r\npedia\r\ne\r\n in\r\n\r\nchunks.\r\n0\r\n\r\n"],
4444
"Wi\r\nkipedia in\r\n\r\nchunks."
4545
],
46+
'varnish-type-response-1' => [
47+
["0017\r\nWikipedia in\r\n\r\nchunks.\r\n0\r\n\r\n"]
48+
],
49+
'varnish-type-response-2' => [
50+
["000017\r\nWikipedia in\r\n\r\nchunks.\r\n0\r\n\r\n"]
51+
],
52+
'varnish-type-response-3' => [
53+
["017\r\nWikipedia in\r\n\r\nchunks.\r\n0\r\n\r\n"]
54+
],
55+
'varnish-type-response-4' => [
56+
["004\r\nWiki\r\n005\r\npedia\r\n00e\r\n in\r\n\r\nchunks.\r\n0\r\n\r\n"]
57+
],
58+
'varnish-type-response-5' => [
59+
["000004\r\nWiki\r\n00005\r\npedia\r\n000e\r\n in\r\n\r\nchunks.\r\n0\r\n\r\n"]
60+
],
61+
'varnish-type-response-extra-line' => [
62+
["006\r\nWi\r\nki\r\n005\r\npedia\r\n00e\r\n in\r\n\r\nchunks.\r\n0\r\n\r\n"],
63+
"Wi\r\nkipedia in\r\n\r\nchunks."
64+
],
65+
'varnish-type-response-random' => [
66+
[str_repeat("0", rand(0, 10)), "4\r\nWiki\r\n", str_repeat("0", rand(0, 10)), "5\r\npedia\r\n", str_repeat("0", rand(0, 10)), "e\r\n in\r\n\r\nchunks.\r\n0\r\n\r\n"]
67+
],
68+
'end-chunk-zero-check-1' => [
69+
["4\r\nWiki\r\n5\r\npedia\r\ne\r\n in\r\n\r\nchunks.\r\n00\r\n\r\n"]
70+
],
71+
'end-chunk-zero-check-2' => [
72+
["4\r\nWiki\r\n5\r\npedia\r\ne\r\n in\r\n\r\nchunks.\r\n000\r\n\r\n"]
73+
],
74+
'end-chunk-zero-check-3' => [
75+
["00004\r\nWiki\r\n005\r\npedia\r\ne\r\n in\r\n\r\nchunks.\r\n0000\r\n\r\n"]
76+
]
4677
];
4778
}
4879

@@ -78,7 +109,7 @@ public function provideInvalidChunkedEncoding()
78109
],
79110
'header-chunk-to-long' => [
80111
str_split(str_repeat('a', 2015) . "\r\nWi\r\nki\r\n5\r\npedia\r\ne\r\n in\r\n\r\nchunks.\r\n0\r\n\r\n")
81-
],
112+
]
82113
];
83114
}
84115

0 commit comments

Comments
 (0)