Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: d919344236c47b610930636d3310f00380624d43
      
https://github.com/WebKit/WebKit/commit/d919344236c47b610930636d3310f00380624d43
  Author: Sihui Liu <[email protected]>
  Date:   2026-06-03 (Wed, 03 Jun 2026)

  Changed paths:
    M Source/WebCore/Modules/indexeddb/IDBKeyData.cpp
    M Source/WebCore/Modules/indexeddb/IDBKeyData.h
    M Tools/TestWebKitAPI/CMakeLists.txt
    M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
    A Tools/TestWebKitAPI/Tests/WebCore/IDBKeyData.cpp

  Log Message:
  -----------
  [IndexedDB] IDBKeyData operator== and operator<=> define different 
equivalence classes
rdar://174327363

Reviewed by Brady Eidson.

IDBKeyData::operator== and IDBKeyData::operator<=> currently disagree in two 
cases:
1. String-typed keys: operator== (via WTF::String::operator==) distinguishes 
null String from empty String, but
operator<=> (via codePointCompare) treats them as equivalent.
2. Invalid-typed keys: operator== checks isNull() to distinguish nullptr_t from 
Invalid{}, but operator<=> treats all
Invalid-typed keys as equivalent.

This could cause inconsistency in containers of MemoryIDBBackingStore, 
specifically HashMap keyed by operator== and
std::set ordered by operator<=>, and defeats cursor-invalidation guards (which 
compare with operator== while erases use
operator<). This patch makes sure IDBKeyData::operator<=> match 
IDBKeyData::operator== for equality check.

API tests: IDBKeyData.NullAndInvalidAreNotEquivalentInvalidKey
           IDBKeyData.NullStringAndEmptyStringAreNotEquivalentStringKey
           IDBKeyData.SetDistinguishesNullAndInvalid
           IDBKeyData.SetDistinguishesNullStringAndEmptyString

* Source/WebCore/Modules/indexeddb/IDBKeyData.cpp:
(WebCore::operator<=>):
* Source/WebCore/Modules/indexeddb/IDBKeyData.h:
* Tools/TestWebKitAPI/CMakeLists.txt:
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebCore/IDBKeyData.cpp: Added.
(TestWebKitAPI::TEST(IDBKeyData, NullAndInvalidAreNotEquivalentInvalidKey)):
(TestWebKitAPI::TEST(IDBKeyData, 
NullStringAndEmptyStringAreNotEquivalentStringKey)):
(TestWebKitAPI::TEST(IDBKeyData, SetDistinguishesNullAndInvalid)):
(TestWebKitAPI::TEST(IDBKeyData, SetDistinguishesNullStringAndEmptyString)):

Originally-landed-as: 305413.663@safari-7624-branch (3efb02c6bee1). 
rdar://176058928
Canonical link: https://commits.webkit.org/314463@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to