npm / playwright-core / 1.64.1-beta-1791924977000
playwright-core 1.64.1-beta-1791924977000
- Source
- https://github.com/microsoft/playwright
- Commit scanned
866cbb864009- Directory
packages/playwright-core- Compared with
606ecd8b34ba(0 signals introduced since)- Files
- 370 scanned, 49 skipped (binary, oversized, or unrecognised)
- Signals
- 0 critical · 1 warn · 25 info
- Scan time
- 18.3 s
- LLM review
- Reviewed by claude-haiku-5-5 (Anthropic): 17 of 17 warn and critical signals; 16 demoted to info.
- Disclude version
- 4.0.0
- Scanned (UTC)
- 2026-10-15 00:07
Signals
Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.
-
likely benign Dynamically requires an init-page module and invokes its default export with the page object.
Reasoning
The require call uses a variable (initPage) as its specifier, which is a dynamic-load pattern. The snippet is a try block that loads an init module and calls its default export with the page. This reads as a plugin or init-script hook. The snippet doesn't show where initPage comes from; if it came from untrusted input it would be a code-execution risk, so confidence is moderate.
-
info
warn→ info by reviewobfuscated-command-namepackages/playwright-core/bin/reinstall_chrome_beta_mac.sh:13:1likely benign Invokes the Google Chrome Beta binary by its escaped path to print its version.Reasoning
The backslash escapes are ordinary bash escaping of spaces in the Chrome Beta app bundle path. The command runs the app's --version flag, which fits a reinstall helper script.
-
info
warn→ info by reviewobfuscated-command-namepackages/playwright-core/bin/reinstall_msedge_beta_mac.sh:11:1likely benign Runs the Microsoft Edge Beta binary by its escaped path to check its version.Reasoning
The escaped spaces in the Microsoft Edge Beta app path are standard shell quoting. The script removes a temp pkg and then checks the version, which is consistent with a legitimate reinstall helper.
-
info
warn→ info by reviewobfuscated-command-namepackages/playwright-core/bin/reinstall_msedge_dev_mac.sh:11:1likely benign Runs the Microsoft Edge Dev binary by its escaped path to check its version.Reasoning
Same pattern as the Edge Beta script: escaped spaces in the app path with a version check. No download-and-execute chain is visible.
-
continue; const packageJSON = ; const version = packageJSON.; dirToVersion.;likely benign Reads the version from a browser directory's package.json via a computed require path.Reasoning
The require targets package.json inside a browser reference directory built with path.join. This is a plain metadata read, not code loading from an untrusted source.
-
-
-
; ; ;likely benign Loads the package's own package.json using a path derived from __dirname.Reasoning
The require resolves package.json relative to the package root computed from __dirname. This is a standard way to load a project's own metadata.
-
# Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) -
# Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) -
# Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) -
# For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) -
# For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) -
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/server/android/driver/gradlew:233:1eval "set -- $( printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | xargs -n1 |likely benign Gradle wrapper script word-splits JVM options through eval to build the argument list.Reasoning
The eval over a set -- of xargs-split options is the well-known Gradle wrapper idiom for splitting JVM option strings. It operates on the script's own option variables, not on fetched data.
-
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/server/android/driver/gradlew:240:1exec "$JAVACMD" "$@"likely benign Gradle wrapper execs the resolved Java command with the script arguments.Reasoning
exec of $JAVACMD with the forwarded arguments is the standard final line of the Gradle wrapper. It launches the Java binary the script resolved.
-
-
-
likely benign Decodes base64 file payloads into bytes to construct File objects for drag-and-drop simulation.
Reasoning
atob decodes base64 file contents supplied by the caller so a File object can be built for a drag-and-drop payload. The decoded bytes are data, not executed code.
-
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/server/javascript.ts:315:7likely benign Uses new Function as a parse check to test whether an expression is valid JavaScript.Reasoning
new Function on the wrapped expression is used as a syntax-validity probe while serializing user-supplied JS expressions. The code is parsed, not run, and the pattern is a common parse-check idiom.
-
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/server/javascript.ts:324:9likely benign Second Function-based syntax probe in the expression serializer fallback path.Reasoning
This is the second parse-check fallback in the same expression serializer. It matches the first Function call and serves the same purpose.
-
info
warn→ info by reviewdynamic-importpackages/playwright-core/src/server/registry/index.ts:1201:30linkTarget = .; const browsersJSON = ; const descriptors = ;likely benign Loads browsers.json from a path read from a cache symlink target.Reasoning
The require loads browsers.json from a path derived from a symlink target in the browser cache. That is a dynamic path, but it is a data file in a tool-managed directory, and no hidden or encoded payload is visible.
-
info
warn→ info by reviewdynamic-importpackages/playwright-core/src/server/registry/index.ts:1396:38; ;likely benign Loads the bundled browsers.json manifest from the package root.Reasoning
The require loads browsers.json from the package root. It is a fixed, expected data file with no untrusted input.
-
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/tools/backend/evaluate.ts:50:25evalResult = await locator..likely benign Evaluates a user-supplied JavaScript expression against a locator's element in the browser.Reasoning
eval runs a caller-supplied expression inside the page. That is the stated purpose of an evaluate tool in browser automation, not hidden obfuscation, though it is a powerful capability to keep in view.
-
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/tools/backend/evaluate.ts:57:25evalResult = await tab..likely benign Evaluates a user-supplied JavaScript expression on the page.Reasoning
Same as the locator case: eval of a caller-provided expression inside the page is the intended behavior of the evaluate tool.
-
info
warn→ info by reviewdynamic-importpackages/playwright-core/src/tools/cli-client/program.ts:78:16const clientInfo = ; const help = ; const argv = process.argv.;dismissed Loads a bundled help.json file via a path helper inside the CLI client.Reasoning
The require specifier is built by libPath with literal segments pointing at a bundled help.json file. It is a non-literal expression to the scanner, but it is a fixed, local, data-file load with no user-controlled component visible in the snippet.
-
: Promise<playwright.>likely benign Loads a Playwright library chosen by a descriptor to connect to a browser of a matching version.Reasoning
The module is loaded from descriptor.playwrightLib, which allows connecting to a Playwright build matching a given browser version. Then it picks a browser type by name and connects. This is consistent with a deliberate cross-version compatibility feature. The risk depends on whether descriptor can be attacker-controlled, which the snippet does not show.
Reproduce This Scan
Run disclude locally to verify. Add --format sarif for SARIF output. Add --llm (with an API key in the environment) to include the LLM review.
&&