WebKit Bugzilla
Attachment 373444 Details for
Bug 199302
: ASSERT that a sessionID is valid when encoding it
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-199302-20190703173859.patch (text/plain), 6.85 KB, created by
youenn fablet
on 2019-07-03 17:38:59 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2019-07-03 17:38:59 PDT
Size:
6.85 KB
patch
obsolete
>Subversion Revision: 247095 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index a8fe580fa13d35396845b1a3202ccbd9a3737afe..0e4dc4d2715cbb274e6cd48a0bd2f86008f87f9d 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,25 @@ >+2019-07-03 Youenn Fablet <youenn@apple.com> >+ >+ ASSERT that a sessionID is valid when encoding it >+ https://bugs.webkit.org/show_bug.cgi?id=199302 >+ >+ Reviewed by Darin Adler. >+ >+ For IDBValue, instead of encoding an invalid session ID, encode a boolean that tells there is no sessionID. >+ For IDBRequestData, keep track of whether there is an IDBDatabaseIdentifier >+ and encode/decode accordingly to not encode an invalid sessionID. >+ No observable change of behavior. >+ >+ * Modules/indexeddb/IDBValue.h: >+ (WebCore::IDBValue::sessionID const): >+ (WebCore::IDBValue::encode const): >+ (WebCore::IDBValue::decode): >+ * Modules/indexeddb/shared/IDBRequestData.cpp: >+ (WebCore::IDBRequestData::isolatedCopy): >+ * Modules/indexeddb/shared/IDBRequestData.h: >+ (WebCore::IDBRequestData::databaseIdentifier const): >+ (WebCore::IDBRequestData::decode): >+ > 2019-07-03 Ryan Haddad <ryanhaddad@apple.com> > > Unreviewed, rolling out r246616. >diff --git a/Source/WebCore/PAL/ChangeLog b/Source/WebCore/PAL/ChangeLog >index f43dae8a1afa72142cea5c5b3a00995f9cb00841..894127e8ee4ebc453089bd99eb3cd6dfb7b39b46 100644 >--- a/Source/WebCore/PAL/ChangeLog >+++ b/Source/WebCore/PAL/ChangeLog >@@ -1,3 +1,16 @@ >+2019-07-03 Youenn Fablet <youenn@apple.com> >+ >+ ASSERT that a sessionID is valid when encoding it >+ https://bugs.webkit.org/show_bug.cgi?id=199302 >+ >+ Reviewed by Darin Adler. >+ >+ ASSERT that a sessionID is valid at encoding/decoding time. >+ >+ * pal/SessionID.h: >+ (PAL::SessionID::encode const): >+ (PAL::SessionID::decode): >+ > 2019-07-03 Ryan Haddad <ryanhaddad@apple.com> > > Unreviewed, rolling out r246616. >diff --git a/Source/WebCore/Modules/indexeddb/IDBValue.h b/Source/WebCore/Modules/indexeddb/IDBValue.h >index fb46700a77538a16e6b6846f3abb6f396865cf36..c7f2322c03b7292d2ca5497e8fbed2b4bd5b08b4 100644 >--- a/Source/WebCore/Modules/indexeddb/IDBValue.h >+++ b/Source/WebCore/Modules/indexeddb/IDBValue.h >@@ -50,7 +50,7 @@ public: > > const ThreadSafeDataBuffer& data() const { return m_data; } > const Vector<String>& blobURLs() const { return m_blobURLs; } >- const PAL::SessionID& sessionID() const { return m_sessionID; } >+ const PAL::SessionID& sessionID() const; > const Vector<String>& blobFilePaths() const { return m_blobFilePaths; } > > template<class Encoder> void encode(Encoder&) const; >@@ -59,10 +59,17 @@ public: > private: > ThreadSafeDataBuffer m_data; > Vector<String> m_blobURLs; >- PAL::SessionID m_sessionID; >+ mutable Optional<PAL::SessionID> m_sessionID; > Vector<String> m_blobFilePaths; > }; > >+inline const PAL::SessionID& IDBValue::sessionID() const >+{ >+ // FIXME: We should assert m_sessionID is valid or remove m_sessionID. >+ if (!m_sessionID) >+ m_sessionID = PAL::SessionID { }; >+ return *m_sessionID; >+} > > template<class Encoder> > void IDBValue::encode(Encoder& encoder) const >diff --git a/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.cpp b/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.cpp >index 574ea8b01d9bbf1329cce89eddc552ef59b81032..b10d84099b2528e6f73c28b1504a8a9324d0b21a 100644 >--- a/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.cpp >+++ b/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.cpp >@@ -98,7 +98,8 @@ void IDBRequestData::isolatedCopy(const IDBRequestData& source, IDBRequestData& > destination.m_requestedVersion = source.m_requestedVersion; > destination.m_requestType = source.m_requestType; > >- destination.m_databaseIdentifier = source.m_databaseIdentifier.isolatedCopy(); >+ if (source.m_databaseIdentifier) >+ destination.m_databaseIdentifier = source.m_databaseIdentifier->isolatedCopy(); > > if (source.m_requestIdentifier) > destination.m_requestIdentifier = std::make_unique<IDBResourceIdentifier>(*source.m_requestIdentifier); >diff --git a/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.h b/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.h >index b5821675bb9aea12e8d6991a021d9eed18fd6651..45cffaea603a53b59904c8b14b7a1def7d25f310 100644 >--- a/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.h >+++ b/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.h >@@ -65,7 +65,7 @@ public: > IndexedDB::IndexRecordType indexRecordType() const; > IDBResourceIdentifier cursorIdentifier() const; > >- const IDBDatabaseIdentifier& databaseIdentifier() const { return m_databaseIdentifier; } >+ const IDBDatabaseIdentifier& databaseIdentifier() const; > uint64_t requestedVersion() const; > > bool isOpenRequest() const { return m_requestType == IndexedDB::RequestType::Open; } >@@ -89,12 +89,20 @@ private: > uint64_t m_indexIdentifier { 0 }; > IndexedDB::IndexRecordType m_indexRecordType; > >- IDBDatabaseIdentifier m_databaseIdentifier; >+ mutable Optional<IDBDatabaseIdentifier> m_databaseIdentifier; > uint64_t m_requestedVersion { 0 }; > > IndexedDB::RequestType m_requestType { IndexedDB::RequestType::Other }; > }; > >+inline const IDBDatabaseIdentifier& IDBRequestData::databaseIdentifier() const >+{ >+ ASSERT(m_databaseIdentifier); >+ if (!m_databaseIdentifier) >+ m_databaseIdentifier = IDBDatabaseIdentifier { }; >+ return *m_databaseIdentifier; >+} >+ > template<class Encoder> > void IDBRequestData::encode(Encoder& encoder) const > { >@@ -128,7 +136,7 @@ bool IDBRequestData::decode(Decoder& decoder, IDBRequestData& request) > if (!decoder.decode(request.m_indexIdentifier)) > return false; > >- Optional<IDBDatabaseIdentifier> databaseIdentifier; >+ Optional<Optional<IDBDatabaseIdentifier>> databaseIdentifier; > decoder >> databaseIdentifier; > if (!databaseIdentifier) > return false; >diff --git a/Source/WebCore/PAL/pal/SessionID.h b/Source/WebCore/PAL/pal/SessionID.h >index 2b1cdb29874940f7005f2b9924451402a2cace1c..f7cca7df1347e0ca39055eccb1eac80a92146c7a 100644 >--- a/Source/WebCore/PAL/pal/SessionID.h >+++ b/Source/WebCore/PAL/pal/SessionID.h >@@ -80,7 +80,7 @@ private: > template<class Encoder> > void SessionID::encode(Encoder& encoder) const > { >- // FIXME: Eliminate places that encode invalid SessionIDs, then ASSERT here that the sessionID is valid. >+ ASSERT(isValid()); > encoder << m_sessionID; > } > >@@ -104,7 +104,8 @@ Optional<SessionID> SessionID::decode(Decoder& decoder) > if (!sessionID) > return WTF::nullopt; > >- // FIXME: Eliminate places that encode invalid SessionIDs, then fail to decode an invalid sessionID. >+ // FIXME: We should fail to decode an invalid sessionID. >+ ASSERT(SessionID { *sessionID }.isValid()); > return SessionID { *sessionID }; > } >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 199302
:
373074
|
373444
|
375687