@@ -203,7 +203,7 @@ private function fetchMessage(): bool
203
203
$ headers = [];
204
204
$ attributes = $ message ->getMessageAttributes ();
205
205
if (isset ($ attributes [self ::MESSAGE_ATTRIBUTE_NAME ]) && 'String ' === $ attributes [self ::MESSAGE_ATTRIBUTE_NAME ]->getDataType ()) {
206
- $ headers = \ json_decode ($ attributes [self ::MESSAGE_ATTRIBUTE_NAME ]->getStringValue (), true );
206
+ $ headers = json_decode ($ attributes [self ::MESSAGE_ATTRIBUTE_NAME ]->getStringValue (), true );
207
207
unset($ attributes [self ::MESSAGE_ATTRIBUTE_NAME ]);
208
208
}
209
209
foreach ($ attributes as $ name => $ attribute ) {
@@ -290,10 +290,28 @@ public function send(string $body, array $headers, int $delay = 0, ?string $mess
290
290
'MessageAttributes ' => [],
291
291
];
292
292
293
- $ parameters ['MessageAttributes ' ][self ::MESSAGE_ATTRIBUTE_NAME ] = new MessageAttributeValue ([
294
- 'DataType ' => 'String ' ,
295
- 'StringValue ' => \json_encode ($ headers ),
296
- ]);
293
+ $ specialHeaders = [];
294
+ foreach ($ headers as $ name => $ value ) {
295
+ if ('. ' === $ name [0 ] || self ::MESSAGE_ATTRIBUTE_NAME === $ name || \strlen ($ name ) > 256 || '. ' === substr ($ name , -1 ) || 'AWS. ' === substr ($ name , 0 , \strlen ('AWS. ' )) || 'Amazon. ' === substr ($ name , 0 , \strlen ('Amazon. ' )) || preg_match ('/([^a-zA-Z0-9_\.-]+|\.\.)/ ' , $ name )) {
296
+ $ specialHeaders [$ name ] = $ value ;
297
+
298
+ continue ;
299
+ }
300
+
301
+ $ parameters ['MessageAttributes ' ][$ name ] = new MessageAttributeValue ([
302
+ 'DataType ' => 'String ' ,
303
+ 'StringValue ' => $ value ,
304
+ ]);
305
+ }
306
+
307
+ if (!empty ($ specialHeaders )) {
308
+ $ parameters ['MessageAttributes ' ][self ::MESSAGE_ATTRIBUTE_NAME ] = new MessageAttributeValue ([
309
+ 'DataType ' => 'String ' ,
310
+ 'StringValue ' => json_encode ($ specialHeaders ),
311
+ ]);
312
+ }
313
+
314
+ dd ($ parameters );
297
315
298
316
if (self ::isFifoQueue ($ this ->configuration ['queue_name ' ])) {
299
317
$ parameters ['MessageGroupId ' ] = null !== $ messageGroupId ? $ messageGroupId : __METHOD__ ;
0 commit comments