Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 263f7591998f036f63cefd4581e156c809205b0f
      
https://github.com/WebKit/WebKit/commit/263f7591998f036f63cefd4581e156c809205b0f
  Author: Chris Dumez <[email protected]>
  Date:   2024-10-12 (Sat, 12 Oct 2024)

  Changed paths:
    M Source/WTF/wtf/HashMap.h
    M Source/WTF/wtf/ObjectIdentifier.h
    M Source/WebCore/workers/service/server/SWServer.cpp

  Log Message:
  -----------
  HashMap::get() / HashMap::take() return invalid ObjectIdentifiers when the 
key is missing
https://bugs.webkit.org/show_bug.cgi?id=281306

Reviewed by Darin Adler.

An ObjectIdentifier cannot be invalid/empty, we normally use 
`std::optional<ObjectIdentifier>`
or `Markable<ObjectIdentifier>` to represent an invalid/empty identifier. The 
only way to
construct an "empty" ObjectIdentifier is via 
`HashTraits<ObjectIdentifier>::emptyValue()`,
which HashMap relies on internally. As long as the HashMap is only using this 
special value
internally, this is fine. However, HashMap::get() and HashMap::take() will 
return this
invalid "empty" value if the key is not present. This was very error-prone for
ObjectIdentifier since the client would receive an invalid ObjectIdentifier and 
have no way
to check if the ObjectIdentifier is valid or not (since we assume an 
ObjectIdentifier is
always valid).

To address the issue, Update HashMap::get() / HashMap::take() to return a 
std::optional
when the value type is ObjectIdentifier.

* Source/WTF/wtf/HashMap.h:
(WTF::Y>::takeOptional):
* Source/WTF/wtf/ObjectIdentifier.h:
* Source/WebCore/workers/service/server/SWServer.cpp:
(WebCore::SWServer::matchAll):

Canonical link: https://commits.webkit.org/285080@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to