Skip to content

Commit 907d1ca

Browse files
authored
Merge pull request #402 from php-enqueue/fs-throw-if-reserved-symbols-used
[fs] Escape delimiter symbols.
2 parents 92c3a61 + 47f01b4 commit 907d1ca

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

pkg/fs/FsConsumer.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ public function receiveNoWait()
131131
ftruncate($file, fstat($file)['size'] - strlen($frame));
132132
rewind($file);
133133

134-
$rawMessage = substr(trim($frame), 1);
134+
$rawMessage = str_replace('\|\{', '|{', $frame);
135+
$rawMessage = substr(trim($rawMessage), 1);
135136

136137
if ($rawMessage) {
137138
try {

pkg/fs/FsProducer.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,9 @@ public function send(PsrDestination $destination, PsrMessage $message)
5252
$message->setHeader('x-expire-at', microtime(true) + ($this->timeToLive / 1000));
5353
}
5454

55-
$rawMessage = '|'.json_encode($message);
55+
$rawMessage = json_encode($message);
56+
$rawMessage = str_replace('|{', '\|\{', $rawMessage);
57+
$rawMessage = '|'.$rawMessage;
5658

5759
if (JSON_ERROR_NONE !== json_last_error()) {
5860
throw new \InvalidArgumentException(sprintf(

pkg/fs/Tests/Functional/FsConsumerTest.php

+27
Original file line numberDiff line numberDiff line change
@@ -171,4 +171,31 @@ public function testShouldThrowExceptionWhenFrameSizeNotDivideExactly()
171171
$this->expectExceptionMessage('The frame size is "12" and it must divide exactly to 64 but it leaves a reminder "12".');
172172
$consumer->receiveNoWait();
173173
}
174+
175+
/**
176+
* @group bug
177+
* @group bug390
178+
*/
179+
public function testShouldUnEscapeDelimiterSymbolsInMessageBody()
180+
{
181+
$context = $this->fsContext;
182+
$queue = $context->createQueue('fs_test_queue');
183+
$context->purge($queue);
184+
185+
$message = $this->fsContext->createMessage(' |{"body":"aMessageData","properties":{"enqueue.topic_name":"user_updated"},"headers":{"content_type":"text\/plain","message_id":"90979b6c-d9ff-4b39-9938-878b83a95360","timestamp":1519899428,"reply_to":null,"correlation_id":""}}');
186+
187+
$this->fsContext->createProducer()->send($queue, $message);
188+
189+
$this->assertSame(0, strlen(file_get_contents(sys_get_temp_dir().'/fs_test_queue')) % 64);
190+
$this->assertSame(
191+
' |{"body":" \|\{\"body\":\"aMessageData\",\"properties\":{\"enqueue.topic_name\":\"user_updated\"},\"headers\":{\"content_type\":\"text\\\\\/plain\",\"message_id\":\"90979b6c-d9ff-4b39-9938-878b83a95360\",\"timestamp\":1519899428,\"reply_to\":null,\"correlation_id\":\"\"}}","properties":[],"headers":[]}',
192+
file_get_contents(sys_get_temp_dir().'/fs_test_queue')
193+
);
194+
195+
$consumer = $context->createConsumer($queue);
196+
197+
$message = $consumer->receiveNoWait();
198+
199+
$this->assertSame(' |{"body":"aMessageData","properties":{"enqueue.topic_name":"user_updated"},"headers":{"content_type":"text\/plain","message_id":"90979b6c-d9ff-4b39-9938-878b83a95360","timestamp":1519899428,"reply_to":null,"correlation_id":""}}', $message->getBody());
200+
}
174201
}

0 commit comments

Comments
 (0)