Title: [131672] trunk/Source/WebCore
- Revision
- 131672
- Author
- dgro...@chromium.org
- Date
- 2012-10-17 17:02:25 -0700 (Wed, 17 Oct 2012)
Log Message
IndexedDB: Destroy leveldb directory if unknown schema is detected
https://bugs.webkit.org/show_bug.cgi?id=99636
Reviewed by Tony Chang.
chromium browser test in progress at
https://codereview.chromium.org/11196029
* Modules/indexeddb/IDBLevelDBBackingStore.cpp:
(WebCore):
(WebCore::isSchemaKnown):
Return true when the schema key doesn't exist because new databases
won't have one.
(WebCore::setUpMetadata):
(WebCore::IDBLevelDBBackingStore::open):
Piggy-back on existing leveldb::destroy code.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (131671 => 131672)
--- trunk/Source/WebCore/ChangeLog 2012-10-18 00:00:55 UTC (rev 131671)
+++ trunk/Source/WebCore/ChangeLog 2012-10-18 00:02:25 UTC (rev 131672)
@@ -1,3 +1,23 @@
+2012-10-17 David Grogan <dgro...@chromium.org>
+
+ IndexedDB: Destroy leveldb directory if unknown schema is detected
+ https://bugs.webkit.org/show_bug.cgi?id=99636
+
+ Reviewed by Tony Chang.
+
+ chromium browser test in progress at
+ https://codereview.chromium.org/11196029
+
+ * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
+ (WebCore):
+ (WebCore::isSchemaKnown):
+ Return true when the schema key doesn't exist because new databases
+ won't have one.
+
+ (WebCore::setUpMetadata):
+ (WebCore::IDBLevelDBBackingStore::open):
+ Piggy-back on existing leveldb::destroy code.
+
2012-10-17 Arpita Bahuguna <arpitabahug...@gmail.com>
Incorrect rendering of borders on <col> with span > 1
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp (131671 => 131672)
--- trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp 2012-10-18 00:00:55 UTC (rev 131671)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp 2012-10-18 00:02:25 UTC (rev 131672)
@@ -146,9 +146,18 @@
virtual const char* name() const { return "idb_cmp1"; }
};
+const int64_t latestSchemaVersion = 1;
+static bool isSchemaKnown(LevelDBDatabase* db)
+{
+ int64_t schemaVersion = 0;
+ const Vector<char> metaDataKey = SchemaVersionKey::encode();
+ if (!getInt(db, metaDataKey, schemaVersion))
+ return true;
+ return schemaVersion <= latestSchemaVersion;
+}
+
static bool setUpMetadata(LevelDBDatabase* db, const String& origin)
{
- const int64_t latestSchemaVersion = 1;
const Vector<char> metaDataKey = SchemaVersionKey::encode();
int64_t schemaVersion = 0;
@@ -157,6 +166,7 @@
if (!putInt(db, metaDataKey, latestSchemaVersion))
return false;
} else {
+ ASSERT(schemaVersion <= latestSchemaVersion);
if (!schemaVersion) {
schemaVersion = latestSchemaVersion;
RefPtr<LevelDBTransaction> transaction = LevelDBTransaction::create(db);
@@ -248,8 +258,11 @@
String path = pathByAppendingComponent(pathBase, securityOrigin->databaseIdentifier() + ".indexeddb.leveldb");
db = LevelDBDatabase::open(path, comparator.get());
+ bool knownSchema = isSchemaKnown(db.get());
+ if (!knownSchema)
+ LOG_ERROR("IndexedDB backing store had unknown schema, treating it as failure to open");
- if (!db) {
+ if (!db || !knownSchema) {
LOG_ERROR("IndexedDB backing store open failed, attempting cleanup");
bool success = LevelDBDatabase::destroy(path);
if (!success) {
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes