imported/w3c/web-platform-tests/IndexedDB/keygenerator-explicit.html crashing on...
authorsihui_liu@apple.com <sihui_liu@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Nov 2018 23:34:29 +0000 (23:34 +0000)
committersihui_liu@apple.com <sihui_liu@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Nov 2018 23:34:29 +0000 (23:34 +0000)
https://bugs.webkit.org/show_bug.cgi?id=191500

Reviewed by Dean Jackson.

LayoutTests/imported/w3c:

* web-platform-tests/IndexedDB/keygenerator-explicit-expected.txt:

Source/WebCore:

When double value is bigger than maximum unsigned int, converting double to unsigned int has
different behaviors on macOS and iOS. On macOS, the result would be 0 while on iOS it would be
maximum unsigned int.

Covered by existing test.

* Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
(WebCore::IDBServer::SQLiteIDBBackingStore::generateKeyNumber):
(WebCore::IDBServer::SQLiteIDBBackingStore::maybeUpdateKeyGeneratorNumber):

LayoutTests:

The test should not crash now.

* platform/ios-device/TestExpectations:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@238112 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/IndexedDB/keygenerator-explicit-expected.txt
LayoutTests/platform/ios-device/TestExpectations
Source/WebCore/ChangeLog
Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp

index 70af55c..356a58f 100644 (file)
@@ -1,3 +1,14 @@
+2018-11-12  Sihui Liu  <sihui_liu@apple.com>
+
+        imported/w3c/web-platform-tests/IndexedDB/keygenerator-explicit.html crashing on iOS device
+        https://bugs.webkit.org/show_bug.cgi?id=191500
+
+        Reviewed by Dean Jackson.
+
+        The test should not crash now.
+
+        * platform/ios-device/TestExpectations:
+
 2018-11-12  Tim Horton  <timothy_horton@apple.com>
 
         Make it possible to edit images inline
index dbecd93..64cf282 100644 (file)
@@ -1,3 +1,12 @@
+2018-11-12  Sihui Liu  <sihui_liu@apple.com>
+
+        imported/w3c/web-platform-tests/IndexedDB/keygenerator-explicit.html crashing on iOS device
+        https://bugs.webkit.org/show_bug.cgi?id=191500
+
+        Reviewed by Dean Jackson.
+
+        * web-platform-tests/IndexedDB/keygenerator-explicit-expected.txt:
+
 2018-11-12  Youenn Fablet  <youenn@apple.com>
 
         Support setting stream ids when adding a transceiver
index 8a9786b..52cd5ab 100644 (file)
@@ -2,12 +2,12 @@
 PASS Key generator vs. explicit key 53 bits 
 PASS Key generator vs. explicit key greater than 53 bits, less than 64 bits 
 PASS Key generator vs. explicit key greater than 53 bits, less than 64 bits (negative) 
-FAIL Key generator vs. explicit key 63 bits assert_unreached: put should succeed Reached unreachable code
+PASS Key generator vs. explicit key 63 bits 
 PASS Key generator vs. explicit key 63 bits (negative) 
-FAIL Key generator vs. explicit key 64 bits assert_unreached: put should fail Reached unreachable code
+PASS Key generator vs. explicit key 64 bits 
 PASS Key generator vs. explicit key 64 bits (negative) 
-FAIL Key generator vs. explicit key greater than 64 bits, but still finite assert_unreached: put should fail Reached unreachable code
+PASS Key generator vs. explicit key greater than 64 bits, but still finite 
 PASS Key generator vs. explicit key greater than 64 bits, but still finite (negative) 
-FAIL Key generator vs. explicit key equal to Infinity assert_unreached: put should fail Reached unreachable code
+PASS Key generator vs. explicit key equal to Infinity 
 PASS Key generator vs. explicit key equal to -Infinity 
 
index d5c8e19..3cd77ed 100644 (file)
@@ -63,7 +63,6 @@ http/tests/websocket/tests/hybi/multiple-connections.html [ Skip ]
 imported/blink/storage/indexeddb/blob-delete-objectstore-db.html [ Failure ]
 imported/blink/storage/indexeddb/blob-valid-after-deletion.html [ Failure ]
 imported/blink/storage/indexeddb/blob-valid-before-commit.html [ Failure ]
-imported/w3c/web-platform-tests/IndexedDB/keygenerator-explicit.html [ Failure ]
 imported/w3c/web-platform-tests/IndexedDB/keypath-special-identifiers.htm [ Failure ]
 imported/w3c/web-platform-tests/cssom-view/Screen-pixelDepth-Screen-colorDepth001.html [ Failure ]
 imported/w3c/web-platform-tests/cssom-view/scrolling-quirks-vs-nonquirks.html [ Failure ]
index be5d3a7..f922a24 100644 (file)
@@ -1,3 +1,20 @@
+2018-11-12  Sihui Liu  <sihui_liu@apple.com>
+
+        imported/w3c/web-platform-tests/IndexedDB/keygenerator-explicit.html crashing on iOS device
+        https://bugs.webkit.org/show_bug.cgi?id=191500
+
+        Reviewed by Dean Jackson.
+
+        When double value is bigger than maximum unsigned int, converting double to unsigned int has
+        different behaviors on macOS and iOS. On macOS, the result would be 0 while on iOS it would be
+        maximum unsigned int.
+
+        Covered by existing test.
+
+        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
+        (WebCore::IDBServer::SQLiteIDBBackingStore::generateKeyNumber):
+        (WebCore::IDBServer::SQLiteIDBBackingStore::maybeUpdateKeyGeneratorNumber):
+
 2018-11-12  Basuke Suzuki  <basuke.suzuki@sony.com>
 
         [Curl] Add API Test for Curl cookie backend.
index 582d3ca..4f72122 100644 (file)
@@ -63,6 +63,9 @@ namespace IDBServer {
 // Current version of the metadata schema being used in the metadata database.
 static const int currentMetadataVersion = 1;
 
+// The IndexedDatabase spec defines the max key generator value as 2^53.
+static const uint64_t maxGeneratorValue = 0x20000000000000;
+
 static int idbKeyCollate(int aLength, const void* aBuffer, int bLength, const void* bBuffer)
 {
     IDBKeyData a, b;
@@ -2399,9 +2402,6 @@ IDBError SQLiteIDBBackingStore::generateKeyNumber(const IDBResourceIdentifier& t
     ASSERT(m_sqliteDB);
     ASSERT(m_sqliteDB->isOpen());
 
-    // The IndexedDatabase spec defines the max key generator value as 2^53;
-    static uint64_t maxGeneratorValue = 0x20000000000000;
-
     auto* transaction = m_transactions.get(transactionIdentifier);
     if (!transaction || !transaction->inProgress()) {
         LOG_ERROR("Attempt to generate key in database without an in-progress transaction");
@@ -2470,13 +2470,7 @@ IDBError SQLiteIDBBackingStore::maybeUpdateKeyGeneratorNumber(const IDBResourceI
     if (newKeyNumber <= currentValue)
         return IDBError { };
 
-    uint64_t newKeyInteger(newKeyNumber);
-    if (newKeyInteger <= uint64_t(newKeyNumber))
-        ++newKeyInteger;
-
-    ASSERT(newKeyInteger > uint64_t(newKeyNumber));
-
-    return uncheckedSetKeyGeneratorValue(objectStoreID, newKeyInteger - 1);
+    return uncheckedSetKeyGeneratorValue(objectStoreID, std::min(newKeyNumber, (double)maxGeneratorValue));
 }
 
 IDBError SQLiteIDBBackingStore::openCursor(const IDBResourceIdentifier& transactionIdentifier, const IDBCursorInfo& info, IDBGetResult& result)