From 5840b0d7520f00bc681f4e3a96ac02fe5a9047bd Mon Sep 17 00:00:00 2001 From: Frederik Bosch Date: Wed, 6 Dec 2017 17:41:34 +0100 Subject: [PATCH] make sure __toString always delivers same result for base64 and quoted printable encoding, prevents wrong dkim signatures --- src/Stream/Base64EncodedStream.php | 1 + src/Stream/QuotedPrintableStream.php | 1 + test/Stub/BugReport/issue-30.txt | 15 +++++++++++++++ test/Unit/Stream/Base64StreamTest.php | 11 +++++++++++ test/Unit/Stream/QuotedPrintableStreamTest.php | 12 ++++++++++++ 5 files changed, 40 insertions(+) create mode 100644 test/Stub/BugReport/issue-30.txt diff --git a/src/Stream/Base64EncodedStream.php b/src/Stream/Base64EncodedStream.php index 7fcbe5d1..8e9d7a6f 100644 --- a/src/Stream/Base64EncodedStream.php +++ b/src/Stream/Base64EncodedStream.php @@ -80,6 +80,7 @@ private function removeFilter(): void */ public function __toString(): string { + $this->rewind(); return $this->decoratedStream->__toString(); } diff --git a/src/Stream/QuotedPrintableStream.php b/src/Stream/QuotedPrintableStream.php index 7e2bf23b..8e8163c2 100644 --- a/src/Stream/QuotedPrintableStream.php +++ b/src/Stream/QuotedPrintableStream.php @@ -89,6 +89,7 @@ private function removeFilter(): void */ public function __toString(): string { + $this->rewind(); return $this->decoratedStream->__toString(); } diff --git a/test/Stub/BugReport/issue-30.txt b/test/Stub/BugReport/issue-30.txt new file mode 100644 index 00000000..1d7f4e26 --- /dev/null +++ b/test/Stub/BugReport/issue-30.txt @@ -0,0 +1,15 @@ +Deze e-mail online lezen + +*Nieuwsbrief december 2017* + +Goedendag, + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur iaculis velit ac blandit +rutrum. Donec imperdiet hendrerit placerat. Donec suscipit ut leo vel laoreet. Curabitur +facilisis nunc ac urna laoreet finibus vitae luctus odio. Ut porttitor tempor hendrerit. +Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce sollicitudin placerat +scelerisque. Quisque luctus sapien quis augue malesuada, ac fringilla augue luctus. Vestibulum +pharetra et libero at pellentesque. Sed non semper magna. Fusce auctor sit amet ex vitae euismod. +Sed nec arcu a est molestie ullamcorper. + +*12 januari congres Impact van ullamcorper op auctor et ABC* \ No newline at end of file diff --git a/test/Unit/Stream/Base64StreamTest.php b/test/Unit/Stream/Base64StreamTest.php index 4e7a0db5..e8913a2c 100644 --- a/test/Unit/Stream/Base64StreamTest.php +++ b/test/Unit/Stream/Base64StreamTest.php @@ -113,4 +113,15 @@ function ($line) { $this->assertLessThanOrEqual(76, max($lines)); } + /** + * @test + */ + public function it_produces_equally_result_with_to_string_twice() + { + $stream = Base64EncodedStream::fromString( + file_get_contents(__DIR__.'/../../Stub/BugReport/issue-30.txt') + ); + + $this->assertEquals((string)$stream, (string)$stream); + } } \ No newline at end of file diff --git a/test/Unit/Stream/QuotedPrintableStreamTest.php b/test/Unit/Stream/QuotedPrintableStreamTest.php index d4e7bffe..96edf1ee 100644 --- a/test/Unit/Stream/QuotedPrintableStreamTest.php +++ b/test/Unit/Stream/QuotedPrintableStreamTest.php @@ -149,4 +149,16 @@ public function it_uses_correct_line_endings_tab() $this->assertEquals(str_repeat("tëst1\ttest2\r\n", 50), quoted_printable_decode($encoded)); } + /** + * @test + */ + public function it_produces_equally_result_with_to_string_twice() + { + $stream = QuotedPrintableStream::fromString( + file_get_contents(__DIR__.'/../../Stub/BugReport/issue-30.txt') + ); + + $this->assertEquals((string)$stream, (string)$stream); + } + } \ No newline at end of file