Skip to content

Commit bddc1fe

Browse files
authored
Merge pull request php-vcr#382 from php-vcr/268-abstract-code-transform-splits-in-middle-of-file
FIX: Read the whole stream and perform code transformations
2 parents a8eda85 + 9871fec commit bddc1fe

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

src/VCR/CodeTransform/AbstractCodeTransform.php

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,19 @@ abstract class AbstractCodeTransform extends \php_user_filter
1313
{
1414
public const NAME = 'vcr_abstract_filter';
1515

16+
private string $data = '';
17+
1618
/**
1719
* Attaches the current filter to a stream.
1820
*/
1921
public function register(): void
2022
{
2123
if (!\in_array(static::NAME, stream_get_filters(), true)) {
2224
$isRegistered = stream_filter_register(static::NAME, static::class);
23-
Assertion::true($isRegistered, sprintf('Failed registering stream filter "%s" on stream "%s"', static::class, static::NAME));
25+
Assertion::true(
26+
$isRegistered,
27+
sprintf('Failed registering stream filter "%s" on stream "%s"', static::class, static::NAME)
28+
);
2429
}
2530
}
2631

@@ -30,20 +35,26 @@ public function register(): void
3035
* @param resource $in
3136
* @param resource $out
3237
* @param int $consumed
33-
* @param bool $closing
3438
*
3539
* @return int PSFS_PASS_ON
3640
*
3741
* @see http://www.php.net/manual/en/php-user-filter.filter.php
3842
*/
39-
public function filter($in, $out, &$consumed, $closing): int
43+
public function filter($in, $out, &$consumed, bool $closing): int
4044
{
41-
while ($bucket = stream_bucket_make_writeable($in)) {
42-
$bucket->data = $this->transformCode($bucket->data);
43-
$consumed += $bucket->datalen;
44-
stream_bucket_append($out, $bucket);
45+
while ($buffer = stream_bucket_make_writeable($in)) {
46+
$this->data .= $buffer->data;
47+
$consumed += $buffer->datalen;
48+
}
49+
50+
if (!$closing) {
51+
return \PSFS_FEED_ME;
4552
}
4653

54+
$bucket = stream_bucket_new($this->stream, $this->transformCode($this->data));
55+
$this->data = '';
56+
stream_bucket_append($out, $bucket);
57+
4758
return \PSFS_PASS_ON;
4859
}
4960

0 commit comments

Comments
 (0)