Bug 246526
Summary: | [Fetch API] Headers iteration should not happen on cached headers list | ||
---|---|---|---|
Product: | WebKit | Reporter: | Raphael Kubo da Costa (:rakuco) <rakuco> |
Component: | WebCore Misc. | Assignee: | youenn fablet <youennf> |
Status: | RESOLVED FIXED | ||
Severity: | Normal | CC: | achristensen, annevk, webkit-bug-importer, youennf |
Priority: | P2 | Keywords: | InRadar |
Version: | WebKit Nightly Build | ||
Hardware: | Unspecified | ||
OS: | Unspecified | ||
Bug Depends on: | |||
Bug Blocks: | 151937 |
Raphael Kubo da Costa (:rakuco)
See https://github.com/web-platform-tests/wpt/pull/36455
FetchHeaders::Iterator seems to cache a FetchHeaders' keys at the time iteration starts, so if the same instance is modified during iteration not all changes will be visible.
Attachments | ||
---|---|---|
Add attachment proposed patch, testcase, etc. |
Radar WebKit Bug Importer
<rdar://problem/101235580>
youenn fablet
Pull request: https://github.com/WebKit/WebKit/pull/5437
Anne van Kesteren
Raphael, did you happen to check `FormData` and `URLSearchParams` as well? This might benefit from testing in each API with `iterable<>` given how it's implemented.
EWS
Committed 255639@main (68f5a2f24c94): <https://commits.webkit.org/255639@main>
Reviewed commits have been landed. Closing PR #5437 and removing active labels.
Raphael Kubo da Costa (:rakuco)
(In reply to Anne van Kesteren from comment #3)
> Raphael, did you happen to check `FormData` and `URLSearchParams` as well?
> This might benefit from testing in each API with `iterable<>` given how it's
> implemented.
URLSearchParams is covered by https://github.com/web-platform-tests/wpt/blob/master/webidl/ecmascript-binding/iterator-invalidation-foreach.html (I actually based the Fetch tests on it).
I've submitted https://github.com/web-platform-tests/wpt/pull/36532 to cover FormData.
I haven't checked it in depth, but I think all engines implement them correctly because their "value pairs to iterate over" are just their internal name-value lists.
Things get trickier with Headers because it's one of the few cases where the value pairs require modification to the internal data structure. AFAICS only a handful of interfaces do that: Headers, MediaKeyStatusMap (possibly), XRHand (also possibly), and StylePropertyMap (it's CSS so I have close to no idea :-).
Anne van Kesteren
Thanks Raphael, much appreciated!