@@ -110,7 +110,9 @@ public function getDonut(AbstractUri $uri): ResourceDonut|null
110110 */
111111 public function hasEtag (string $ etag ): bool
112112 {
113- return $ this ->etagPool ->hasItem ($ etag );
113+ // Sanitize etag to remove reserved characters
114+ $ sanitizedEtag = str_replace (['/ ' , '\\' , ': ' , '@ ' , '( ' , ') ' , '{ ' , '} ' ], '_ ' , $ etag );
115+ return $ this ->etagPool ->hasItem ($ sanitizedEtag );
114116 }
115117
116118 /**
@@ -254,7 +256,9 @@ public function saveEtag(AbstractUri $uri, string $etag, string $surrogateKeys,
254256 /** @var list<string> $uniqueTags */
255257 $ uniqueTags = array_unique ($ tags );
256258 $ this ->logger ->log ('save-etag uri:%s etag:%s surrogate-keys:%s ' , $ uri , $ etag , $ uniqueTags );
257- $ this ->saver ->__invoke ($ etag , 'etag ' , $ this ->etagPool , $ uniqueTags , $ ttl );
259+ // Sanitize etag to remove reserved characters
260+ $ sanitizedEtag = str_replace (['/ ' , '\\' , ': ' , '@ ' , '( ' , ') ' , '{ ' , '} ' ], '_ ' , $ etag );
261+ $ this ->saver ->__invoke ($ sanitizedEtag , 'etag ' , $ this ->etagPool , $ uniqueTags , $ ttl );
258262 }
259263
260264 public function __serialize (): array
0 commit comments