mirror of
https://github.com/morluto/rea.git
synced 2026-11-12 01:41:21 +00:00
feat(electron): report V8 cachedData compilation boundaries (#9501)
* feat(electron): report V8 cachedData execution boundaries
analyze-javascript-application treated new vm.Script(source, {cachedData}) and vm.compileFunction(..., {cachedData}) as ordinary source. V8 deserializes previously compiled bytecode for those calls, so an Electron preload wrapper that delegates its whole contextBridge and IPC surface to a .cache/.jsc snapshot appeared to have been fully analyzed with zero exposed APIs.
Record each vm compilation with its inert cache path when the cachedData value traces to a readFileSync/readFile of path syntax, and project a cached-data execution unknown plus a loads edge from the owning source. Compilations without a cache stay recorded as no-cached-data so absence remains distinguishable from an unparsed snapshot. Count cachedData executions in the Electron summary and state the coverage limit in the graph limitations.
* style(cli): wrap the native data type path description
The `inspect-native-data-type` argument description line is 82 columns, over the repository's 80-column `.oxfmtrc.json` limit, so `npm run format:check` fails on main and on every branch merged from it. It came in with #9465 and the following commits to this file did not touch it. Reformat the one call the formatter objects to; no behaviour change.
* style(domain): reformat the pending dynamic-code accumulator field
`npm run format:check` fails on this branch, which is what `Static checks` reports: oxfmt wants the `pendingDynamicCode` union on one line. Applying it is the whole change; no behaviour is touched.
* fix(electron): preserve VM callable and cache source uncertainty
* docs(javascript): specify cached-data compilation boundaries
* fix(electron): exclude disabled caches from recovered boundaries
---------
Co-authored-by: 2SinceJuly <202121119+2SinceJuly@users.noreply.github.com>
Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>
This commit is contained in:
21 files changed
+982
-4
No files matched your search
@@ -22,6 +22,7 @@ import type {
|
||||
ElectronNativeAddonBindingFinding,
|
||||
ElectronSenderValidationFinding,
|
||||
ElectronProtocolFinding,
|
||||
ElectronDynamicCodeFinding,
|
||||
ElectronUtilityProcessFinding,
|
||||
ElectronWindowConstructor,
|
||||
} from "./electronStaticAnalysisTypes.js";
|
||||
@@ -95,6 +96,8 @@ export interface JavaScriptAnalysisAccumulator {
|
||||
| t.AssignmentExpression
|
||||
)[];
|
||||
readonly protocols: LocatedJavaScriptFinding<ElectronProtocolFinding>[];
|
||||
readonly dynamicCode: LocatedJavaScriptFinding<ElectronDynamicCodeFinding>[];
|
||||
readonly pendingDynamicCode: (t.NewExpression | t.CallExpression)[];
|
||||
readonly moduleRangeIndex: JavaScriptModuleRangeIndex;
|
||||
/** Binding identities proven as third-parameter loaders of recovered factories. */
|
||||
readonly factoryRequireBindingIds: Set<string>;
|
||||
@@ -201,6 +204,8 @@ export const createJavaScriptAnalysisAccumulator = (
|
||||
nativeAddonBindings: [],
|
||||
pendingNativeAddonBindings: [],
|
||||
protocols: [],
|
||||
dynamicCode: [],
|
||||
pendingDynamicCode: [],
|
||||
moduleRangeIndex: new JavaScriptModuleRangeIndex(sourceLength),
|
||||
factoryRequireBindingIds: new Set(),
|
||||
seen: new Set(),
|
||||
|
||||
Reference in new issue
Block a user