Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 57afbafbe26097d0816e24c85b2a9c096bcab60d
https://github.com/WebKit/WebKit/commit/57afbafbe26097d0816e24c85b2a9c096bcab60d
Author: Alex Christensen <[email protected]>
Date: 2023-11-16 (Thu, 16 Nov 2023)
Changed paths:
M Source/WTF/wtf/OptionSet.h
M Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionCommand.mm
M Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionContext.mm
M Source/WebKit/UIProcess/Extensions/WebExtension.h
M Source/WebKit/UIProcess/Extensions/WebExtensionTab.h
M Source/WebKit/UIProcess/Extensions/WebExtensionWindow.h
M
Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIWindowsCocoa.mm
Log Message:
-----------
Stop using EnumTraits in OptionSet
https://bugs.webkit.org/show_bug.cgi?id=264903
Reviewed by Timothy Hatcher.
It was used for only a few things:
1. It was used for isValidOptionSet, which is called when deserializing bytes
from IPC.
These uses are on their way to being entirely generated instead of using
EnumTraits,
and EnumTraits continues to be used for the types that are deserialized from
IPC but
have not yet been generated.
2. It was used in OptionSet::all to generate an OptionSet that contained only
the valid
bits. The 3 uses of this function have been replaced by manually-written
constexpr
functions that are right next to the enum class definition, making it
difficult to
make errors of omission. These 3 uses and any similar future uses are not
worth
keeping EnumTraits infrastructure around.
3. It was used to trim unused bits in OptionSet::fromRaw. A manual inspection
of all
the functions named "decodeForPersistence" indicated that there are 0 places
where
OptionSet::fromRaw was used to "parse" data from disk. Similarly, searching
for
">::fromRaw(" shows us the 36 places this is used, and most of them are just
converting bit fields to OptionSets, but none of them are used to get data
from an
untrusted source and use operations like OptionSet::operator==. Other
operations
like contains, add, remove, etc. are unaffected by unrecognized bits.
4. It was used for debug assertions in constructors that take enum values
directly. I
replaced these assertions by stricter assertions using hasOneBitSet instead.
Generated serialization is generating isValidOptionSet functions directly,
which keeps
our code from decoding unexpected bits from IPC to prevent untrusted, possibly
compromised web content processes from being able to do unexpected things.
* Source/WTF/wtf/OptionSet.h:
(WTF::OptionSet::fromRaw):
(WTF::OptionSet::OptionSet):
(WTF::isValidOptionSet):
(WTF::isValidOptionSetEnum): Deleted.
(WTF::maskRawValue): Deleted.
(WTF::OptionSet::all): Deleted.
* Source/WebKit/UIProcess/API/Cocoa/_WKWebExtensionContext.mm:
(toImpl):
* Source/WebKit/UIProcess/Extensions/WebExtensionTab.h:
(WebKit::WebExtensionTab::allChangedProperties):
* Source/WebKit/UIProcess/Extensions/WebExtensionWindow.h:
(WebKit::allWebExtensionWindowTypeFilters):
* Source/WebKit/WebProcess/Extensions/API/Cocoa/WebExtensionAPIWindowsCocoa.mm:
(WebKit::WebExtensionAPIWindows::parseWindowTypesFilter):
(WebKit::WebExtensionContextProxy::dispatchWindowsEvent):
Canonical link: https://commits.webkit.org/270838@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes