WebKit Bugzilla
Attachment 373074 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-20190627175637.patch (text/plain), 7.14 KB, created by
youenn fablet
on 2019-06-27 17:56:38 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2019-06-27 17:56:38 PDT
Size:
7.14 KB
patch
obsolete
>Subversion Revision: 246881 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index fb93f4fbb55a45cd97d7f189d67674a204a6878b..992250e131dd7aec093e45fe92ad78679ae4c91a 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,25 @@ >+2019-06-27 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 NOBODY (OOPS!). >+ >+ 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-06-27 Youenn Fablet <youenn@apple.com> > > [MacOS] getUserMedia called multiple times should better handle camera resolution >diff --git a/Source/WebCore/PAL/ChangeLog b/Source/WebCore/PAL/ChangeLog >index 4bb87f5eca202f1e8473ff4a5e4dbb103e253ffa..87b9a46de57d57a415dfd46a5b6446fda18bb80b 100644 >--- a/Source/WebCore/PAL/ChangeLog >+++ b/Source/WebCore/PAL/ChangeLog >@@ -1,3 +1,16 @@ >+2019-06-27 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 NOBODY (OOPS!). >+ >+ ASSERT that a sessionID is valid at encoding/decoding time. >+ >+ * pal/SessionID.h: >+ (PAL::SessionID::encode const): >+ (PAL::SessionID::decode): >+ > 2019-06-25 Alex Christensen <achristensen@webkit.org> > > Make HTTPCookieAcceptPolicy an enum class >diff --git a/Source/WebCore/Modules/indexeddb/IDBValue.h b/Source/WebCore/Modules/indexeddb/IDBValue.h >index fb46700a77538a16e6b6846f3abb6f396865cf36..4047a42760b6b90ae1c403386d15271299f9f554 100644 >--- a/Source/WebCore/Modules/indexeddb/IDBValue.h >+++ b/Source/WebCore/Modules/indexeddb/IDBValue.h >@@ -50,7 +50,11 @@ 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 >+ { >+ // FIXME: We should assert m_sessionID is valid or remove m_sessionID. >+ return m_sessionID; >+ } > const Vector<String>& blobFilePaths() const { return m_blobFilePaths; } > > template<class Encoder> void encode(Encoder&) const; >@@ -69,7 +73,9 @@ void IDBValue::encode(Encoder& encoder) const > { > encoder << m_data; > encoder << m_blobURLs; >- encoder << m_sessionID; >+ encoder << m_sessionID.isValid(); >+ if (m_sessionID.isValid()) >+ encoder << m_sessionID; > encoder << m_blobFilePaths; > } > >@@ -83,9 +89,15 @@ Optional<IDBValue> IDBValue::decode(Decoder& decoder) > if (!decoder.decode(result.m_blobURLs)) > return WTF::nullopt; > >- if (!decoder.decode(result.m_sessionID)) >+ bool hasSessionID; >+ if (!decoder.decode(hasSessionID)) > return WTF::nullopt; > >+ if (hasSessionID) { >+ if (!decoder.decode(result.m_sessionID)) >+ return WTF::nullopt; >+ } >+ > if (!decoder.decode(result.m_blobFilePaths)) > return WTF::nullopt; > >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..9f87477b1d9ab885967f3877a251f390de248126 100644 >--- a/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.h >+++ b/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.h >@@ -65,7 +65,14 @@ public: > IndexedDB::IndexRecordType indexRecordType() const; > IDBResourceIdentifier cursorIdentifier() const; > >- const IDBDatabaseIdentifier& databaseIdentifier() const { return m_databaseIdentifier; } >+ const IDBDatabaseIdentifier& databaseIdentifier() const >+ { >+ ASSERT(m_databaseIdentifier); >+ if (!m_databaseIdentifier) >+ m_databaseIdentifier = IDBDatabaseIdentifier { }; >+ return *m_databaseIdentifier; >+ } >+ > uint64_t requestedVersion() const; > > bool isOpenRequest() const { return m_requestType == IndexedDB::RequestType::Open; } >@@ -89,7 +96,7 @@ 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 }; >@@ -128,7 +135,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