Title: [134680] trunk/Source
Revision
134680
Author
jsb...@chromium.org
Date
2012-11-14 15:28:54 -0800 (Wed, 14 Nov 2012)

Log Message

IndexedDB: Remove magic numbers in record comparator, handle missing case
https://bugs.webkit.org/show_bug.cgi?id=102255

Reviewed by Tony Chang.

Source/WebCore:

For some ranges of metadata entries, a simple type byte comparison is sufficient
for the backing store comparator. In two places those ranges used magic numbers,
one of which was incorrect - which could lead to failed reads/writes.

Test: webkit_unit_tests --gtest_filter='IDBLevelDBCodingTest.ComparisonTest'

* Modules/indexeddb/IDBLevelDBCoding.cpp:
(IDBLevelDBCoding):
(WebCore::IDBLevelDBCoding::compare):
* Modules/indexeddb/IDBLevelDBCoding.h:

Source/WebKit/chromium:

Add test keys for various metadata types.

* tests/IDBLevelDBCodingTest.cpp:
(IDBLevelDBCoding::TEST):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (134679 => 134680)


--- trunk/Source/WebCore/ChangeLog	2012-11-14 23:27:11 UTC (rev 134679)
+++ trunk/Source/WebCore/ChangeLog	2012-11-14 23:28:54 UTC (rev 134680)
@@ -1,3 +1,21 @@
+2012-11-14  Joshua Bell  <jsb...@chromium.org>
+
+        IndexedDB: Remove magic numbers in record comparator, handle missing case
+        https://bugs.webkit.org/show_bug.cgi?id=102255
+
+        Reviewed by Tony Chang.
+
+        For some ranges of metadata entries, a simple type byte comparison is sufficient
+        for the backing store comparator. In two places those ranges used magic numbers,
+        one of which was incorrect - which could lead to failed reads/writes.
+
+        Test: webkit_unit_tests --gtest_filter='IDBLevelDBCodingTest.ComparisonTest'
+
+        * Modules/indexeddb/IDBLevelDBCoding.cpp:
+        (IDBLevelDBCoding):
+        (WebCore::IDBLevelDBCoding::compare):
+        * Modules/indexeddb/IDBLevelDBCoding.h:
+
 2012-11-14  Dirk Schulze  <k...@webkit.org>
 
         Cleanup BasicShape blending check

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.cpp (134679 => 134680)


--- trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.cpp	2012-11-14 23:27:11 UTC (rev 134679)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.cpp	2012-11-14 23:28:54 UTC (rev 134680)
@@ -61,6 +61,7 @@
 //     <database id, 0, 0, 1> => utf16 database name [DatabaseMetaDataKey]
 //     <database id, 0, 0, 2> => utf16 user version data [DatabaseMetaDataKey]
 //     <database id, 0, 0, 3> => maximum object store id ever allocated [DatabaseMetaDataKey]
+//     <database id, 0, 0, 4> => user integer version (var int) [DatabaseMetaDataKey]
 //
 //
 // Object store meta-data:
@@ -153,6 +154,7 @@
 
 static const unsigned char SchemaVersionTypeByte = 0;
 static const unsigned char MaxDatabaseIdTypeByte = 1;
+static const unsigned char MaxSimpleGlobalMetaDataTypeByte = 2; // Insert before this and increment.
 static const unsigned char DatabaseFreeListTypeByte = 100;
 static const unsigned char DatabaseNameTypeByte = 201;
 
@@ -857,9 +859,9 @@
 
         if (int x = typeByteA - typeByteB)
             return x;
-
-        if (typeByteA <= 1)
+        if (typeByteA < MaxSimpleGlobalMetaDataTypeByte)
             return 0;
+
         if (typeByteA == DatabaseFreeListTypeByte)
             return compare<DatabaseFreeListKey>(a, b);
         if (typeByteA == DatabaseNameTypeByte)
@@ -875,9 +877,7 @@
 
         if (int x = typeByteA - typeByteB)
             return x;
-
-        // FIXME: Replace this magic number. Should it account for UserIntVersion?
-        if (typeByteA <= 3)
+        if (typeByteA < DatabaseMetaDataKey::MaxSimpleMetaDataType)
             return 0;
 
         if (typeByteA == ObjectStoreMetaDataTypeByte)
@@ -892,9 +892,6 @@
             return compare<ObjectStoreNamesKey>(a, b);
         if (typeByteA == IndexNamesKeyTypeByte)
             return compare<IndexNamesKey>(a, b);
-
-        // FIXME: Assert not reached here?
-        return 0;
     }
 
     if (prefixA.type() == KeyPrefix::ObjectStoreData) {

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.h (134679 => 134680)


--- trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.h	2012-11-14 23:27:11 UTC (rev 134679)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBCoding.h	2012-11-14 23:28:54 UTC (rev 134680)
@@ -146,7 +146,8 @@
         DatabaseName = 1,
         UserVersion = 2,
         MaxObjectStoreId = 3,
-        UserIntVersion = 4
+        UserIntVersion = 4,
+        MaxSimpleMetaDataType = 5
     };
 
     static Vector<char> encode(int64_t databaseId, MetaDataType);

Modified: trunk/Source/WebKit/chromium/ChangeLog (134679 => 134680)


--- trunk/Source/WebKit/chromium/ChangeLog	2012-11-14 23:27:11 UTC (rev 134679)
+++ trunk/Source/WebKit/chromium/ChangeLog	2012-11-14 23:28:54 UTC (rev 134680)
@@ -1,3 +1,15 @@
+2012-11-14  Joshua Bell  <jsb...@chromium.org>
+
+        IndexedDB: Remove magic numbers in record comparator, handle missing case
+        https://bugs.webkit.org/show_bug.cgi?id=102255
+
+        Reviewed by Tony Chang.
+
+        Add test keys for various metadata types.
+
+        * tests/IDBLevelDBCodingTest.cpp:
+        (IDBLevelDBCoding::TEST):
+
 2012-11-14  Eric Uhrhane  <er...@chromium.org>
 
         [chromium] Don't let shift-click turn popup into tab.

Modified: trunk/Source/WebKit/chromium/tests/IDBLevelDBCodingTest.cpp (134679 => 134680)


--- trunk/Source/WebKit/chromium/tests/IDBLevelDBCodingTest.cpp	2012-11-14 23:27:11 UTC (rev 134679)
+++ trunk/Source/WebKit/chromium/tests/IDBLevelDBCodingTest.cpp	2012-11-14 23:28:54 UTC (rev 134680)
@@ -651,12 +651,25 @@
     keys.append(DatabaseNameKey::encode("", "a"));
     keys.append(DatabaseNameKey::encode("a", "a"));
     keys.append(DatabaseMetaDataKey::encode(1, DatabaseMetaDataKey::OriginName));
-    keys.append(ObjectStoreMetaDataKey::encode(1, 1, 0));
-    keys.append(ObjectStoreMetaDataKey::encode(1, 1, 1));
+    keys.append(DatabaseMetaDataKey::encode(1, DatabaseMetaDataKey::DatabaseName));
+    keys.append(DatabaseMetaDataKey::encode(1, DatabaseMetaDataKey::UserVersion));
+    keys.append(DatabaseMetaDataKey::encode(1, DatabaseMetaDataKey::MaxObjectStoreId));
+    keys.append(DatabaseMetaDataKey::encode(1, DatabaseMetaDataKey::UserIntVersion));
+    keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::Name));
+    keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::KeyPath));
+    keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::AutoIncrement));
+    keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::Evictable));
+    keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::LastVersion));
+    keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::MaxIndexId));
+    keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::HasKeyPath));
+    keys.append(ObjectStoreMetaDataKey::encode(1, 1, ObjectStoreMetaDataKey::KeyGeneratorCurrentNumber));
     keys.append(ObjectStoreMetaDataKey::encodeMaxKey(1, 1));
     keys.append(ObjectStoreMetaDataKey::encodeMaxKey(1, 2));
     keys.append(ObjectStoreMetaDataKey::encodeMaxKey(1));
-    keys.append(IndexMetaDataKey::encode(1, 1, 30, 0));
+    keys.append(IndexMetaDataKey::encode(1, 1, 30, IndexMetaDataKey::Name));
+    keys.append(IndexMetaDataKey::encode(1, 1, 30, IndexMetaDataKey::Unique));
+    keys.append(IndexMetaDataKey::encode(1, 1, 30, IndexMetaDataKey::KeyPath));
+    keys.append(IndexMetaDataKey::encode(1, 1, 30, IndexMetaDataKey::MultiEntry));
     keys.append(IndexMetaDataKey::encode(1, 1, 31, 0));
     keys.append(IndexMetaDataKey::encode(1, 1, 31, 1));
     keys.append(IndexMetaDataKey::encodeMaxKey(1, 1, 31));
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to