Changeset 248971 in webkit


Ignore:
Timestamp:
Aug 21, 2019 3:45:46 PM (5 years ago)
Author:
Chris Dumez
Message:

Crash under StringImpl::endsWith() in SQLiteIDBBackingStore::fullDatabaseDirectoryWithUpgrade()
https://bugs.webkit.org/show_bug.cgi?id=200990
<rdar://problem/54566439>

Reviewed by Alex Christensen.

Make sure we call isolatedCopy() on SQLiteIDBBackingStore::m_databaseRootDirectory before using
it from background threads.

  • Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:

(WebCore::IDBServer::SQLiteIDBBackingStore::fullDatabaseDirectoryWithUpgrade):
(WebCore::IDBServer::SQLiteIDBBackingStore::databasesSizeForOrigin const):
(WebCore::IDBServer::SQLiteIDBBackingStore::deleteBackingStore):

  • Modules/indexeddb/server/SQLiteIDBBackingStore.h:

(WebCore::IDBServer::SQLiteIDBBackingStore::databaseRootDirectory const):

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r248969 r248971  
     12019-08-21  Chris Dumez  <cdumez@apple.com>
     2
     3        Crash under StringImpl::endsWith() in SQLiteIDBBackingStore::fullDatabaseDirectoryWithUpgrade()
     4        https://bugs.webkit.org/show_bug.cgi?id=200990
     5        <rdar://problem/54566439>
     6
     7        Reviewed by Alex Christensen.
     8
     9        Make sure we call isolatedCopy() on SQLiteIDBBackingStore::m_databaseRootDirectory before using
     10        it from background threads.
     11
     12        * Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:
     13        (WebCore::IDBServer::SQLiteIDBBackingStore::fullDatabaseDirectoryWithUpgrade):
     14        (WebCore::IDBServer::SQLiteIDBBackingStore::databasesSizeForOrigin const):
     15        (WebCore::IDBServer::SQLiteIDBBackingStore::deleteBackingStore):
     16        * Modules/indexeddb/server/SQLiteIDBBackingStore.h:
     17        (WebCore::IDBServer::SQLiteIDBBackingStore::databaseRootDirectory const):
     18
    1192019-08-21  Chris Dumez  <cdumez@apple.com>
    220
  • trunk/Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp

    r248856 r248971  
    766766String SQLiteIDBBackingStore::fullDatabaseDirectoryWithUpgrade()
    767767{
    768     String oldOriginDirectory = m_identifier.databaseDirectoryRelativeToRoot(m_databaseRootDirectory, "v0");
     768    auto databaseRootDirectory = this->databaseRootDirectory();
     769    String oldOriginDirectory = m_identifier.databaseDirectoryRelativeToRoot(databaseRootDirectory, "v0");
    769770    String oldDatabaseDirectory = FileSystem::pathByAppendingComponent(oldOriginDirectory, filenameForDatabaseName());
    770     String newOriginDirectory = m_identifier.databaseDirectoryRelativeToRoot(m_databaseRootDirectory, "v1");
     771    String newOriginDirectory = m_identifier.databaseDirectoryRelativeToRoot(databaseRootDirectory, "v1");
    771772    String fileNameHash = SQLiteFileSystem::computeHashForFileName(m_identifier.databaseName());
    772773    Vector<String> directoriesWithSameHash = FileSystem::listDirectory(newOriginDirectory, fileNameHash + "*");
     
    857858uint64_t SQLiteIDBBackingStore::databasesSizeForOrigin() const
    858859{
    859     String oldVersionOriginDirectory = m_identifier.databaseDirectoryRelativeToRoot(m_databaseRootDirectory, "v0");
    860     String newVersionOriginDirectory = m_identifier.databaseDirectoryRelativeToRoot(m_databaseRootDirectory, "v1");
     860    auto databaseRootDirectory = this->databaseRootDirectory();
     861    String oldVersionOriginDirectory = m_identifier.databaseDirectoryRelativeToRoot(databaseRootDirectory, "v0");
     862    String newVersionOriginDirectory = m_identifier.databaseDirectoryRelativeToRoot(databaseRootDirectory, "v1");
    861863    return databasesSizeForFolder(oldVersionOriginDirectory) + databasesSizeForFolder(newVersionOriginDirectory);
    862864}
     
    25612563    SQLiteFileSystem::deleteDatabaseFile(dbFilename);
    25622564    SQLiteFileSystem::deleteEmptyDatabaseDirectory(m_databaseDirectory);
    2563     SQLiteFileSystem::deleteEmptyDatabaseDirectory(m_identifier.databaseDirectoryRelativeToRoot(m_databaseRootDirectory));
     2565    SQLiteFileSystem::deleteEmptyDatabaseDirectory(m_identifier.databaseDirectoryRelativeToRoot(databaseRootDirectory()));
    25642566}
    25652567
  • trunk/Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.h

    r248856 r248971  
    109109    String fullDatabasePath() const;
    110110    String fullDatabaseDirectoryWithUpgrade();
     111   
     112    String databaseRootDirectory() const { return m_databaseRootDirectory.isolatedCopy(); }
    111113
    112114    bool ensureValidRecordsTable();
Note: See TracChangeset for help on using the changeset viewer.