Skip to content

Sync upstream/main (60 commits)#7

Merged
alii merged 61 commits intomainfrom
disable-ffi-and-sync-upstream
Mar 20, 2026
Merged

Sync upstream/main (60 commits)#7
alii merged 61 commits intomainfrom
disable-ffi-and-sync-upstream

Conversation

@alii
Copy link
Copy Markdown
Member

@alii alii commented Mar 20, 2026

Merges googleprojectzero/fuzzilli main (60 commits).

Main relevant change: profiles moved from Sources/FuzzilliCli/Profiles/ into Sources/Fuzzilli/Profiles/ (now part of the library). BunProfile.swift moved and import Fuzzilli dropped accordingly.

Other upstream highlights:

  • New FuzzilliDetectMissingBuiltins tool
  • Many new builtin registrations (Intl.DisplayNames, Intl.DurationFormat, Iterator.zip, WebAssembly errors, Error.stackTraceLimit, etc.)
  • V8/wasm code generator improvements
  • Smi-range magic numbers in integer generator

.github/workflows/swift.yml is reverted to our version (OAuth lacks workflow scope; upstream changes were just -v flags and apt update — trivial).

Includes the FFI fix from #6 as a parent commit — if #6 merges first this diff will only show the sync.

Dominik Klemba and others added 30 commits February 19, 2026 01:33
Change the loop condition to compare the iteration index against 'indices.count - 1' instead of 'indices.last!'.

Also added regression test testDestructuringSimplificationWithRest, which reproduces the original bug using sparse indices with 'lastIsRest' set to true, ensuring that DestructArray is simplified into GetElement and a residual DestructArray for the rest elements.

Change-Id: Ic630615bb85231d703046be4dc669e4314927db2
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9027276
Reviewed-by: Matthias Liedtke <mliedtke@google.com>
Auto-Submit: Dominik Klemba <tacet@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: Michael Achenbach <machenbach@google.com>
While this feature is disabled by default, it is a non-experimental
feature and other fuzzers already create exposure of this feature
(see
https://source.chromium.org/chromium/chromium/src/+/main:v8/tools/clusterfuzz/trials/clusterfuzz_trials_config.json;l=60;drc=84a1682b877e88c8912cebf44a8513c7d84206ed)

Bug: 485657212
Change-Id: I899357c64d4e2dfd9385d3da5f445f0edc447765
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9035976
Reviewed-by: Darius Mercadier <dmercadier@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Change-Id: Icee437b92f284e7f9f7dc339d31ee157c6f876ae
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9032277
Reviewed-by: Samuel Groß <saelo@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Bug: 465497343
Change-Id: I81b857dc9dac3fb95f8cd3b0f45be04b396626d8
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9043816
Commit-Queue: Michael Achenbach <machenbach@google.com>
Auto-Submit: Michael Achenbach <machenbach@google.com>
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Commit-Queue: Danylo Mocherniuk <mdanylo@google.com>
Change-Id: I7351c40670430f5b21ecff521eb5d419dc3ce2ac
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9051356
Reviewed-by: Dominik Klemba <tacet@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Commit-Queue: Dominik Klemba <tacet@google.com>
This is needed for a tool that uses the JavaScriptExecutor and produces
a large amount of output (the list of all builtins available in the
global scope).

Bug: 487347678
Change-Id: Ib83ee2ae33a609e5b8ce1598b14892a8cedfd0a4
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9047637
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor

Change-Id: Iaa324d06653a8dfeb2cc5e48b8357f5e4d2670c2
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9051196
Reviewed-by: Michael Achenbach <machenbach@google.com>
Commit-Queue: Michael Achenbach <machenbach@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Fuzzilli functionality for ref.cast added similarly to ref.test

Bug: 474940922
Change-Id: I7cd3a28b05b7289c8ea0836be0c6d1024556e24c
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/8995238
Commit-Queue: Doga Yüksel <dyuksel@google.com>
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Reviewed-by: Matthias Liedtke <mliedtke@google.com>
…d instance type

See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DisposableStack

Bug: 487347678
Change-Id: I85e523864482d16d5b1f2a1c9d0cd3ba0cb77613
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9051796
Commit-Queue: Rezvan Mahdavi Hezaveh <rezvan@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: Rezvan Mahdavi Hezaveh <rezvan@google.com>
…ds and instance types

See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AsyncDisposableStack

Bug: 487347678
Change-Id: I6a0506f0e09c8597c8f24a22833083a99c0c4472
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9051797
Reviewed-by: Rezvan Mahdavi Hezaveh <rezvan@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
getBigInt64 and getBigUin64 also take an optional second parameter
which is a bool to mark if little-endian encoding should be used.

Bug: 487347678
Change-Id: I352e74c7e5d74bd72f5c7ae35c8114bceba297d6
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9050878
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Bug: 487347678
Change-Id: Ide8f3c5d4439981c729f14ecc96e4e54e4cfbe6f
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9050879
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
This also requires some refactoring:
1) We need to extend createPrototypeObjectGroup() to also allow
   additional properties as BYTES_PER_ELEMENT appears on the
   TypedArray builtin (the constructor) and on its prototype (and due to
   the prototype also on any instance of such typed array).
2) Merge Uint8Array (which is somewhat special due to base64) with the
   other typed arrays to reduce the amount of duplication.

Bug: 487347678
Change-Id: I795b16468ec9b52108dd41fee3ff54d74604df18
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9050880
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
With this change we support defining methods on classes and objects
with non-identifier names, like number and string literals.

Internally, all method names remain strings, reusing any type
information. At lifting, we approximate simple identifiers and
use them unquoted for method definition and for usage in dot
notation. For definitions, we also support quoted strings and
unquoted index values. At call sites, we ensure bracket notation
where needed, supporting index access without quotes.

This covers method names for plain objects and classes.
This does not cover properties, getters and setters yet.

We also add 2 custom method names to the environment that don't
follow the previous identifier naming.

Instructions that define such methods currently are:
ObjectLiteralMethod
ClassInstanceMethod
ClassStaticMethod

Instructions that use such methods are:
CallMethod
CallMethodWithSpread
CallSuperMethod
BindMethod

We ignore definitions and calls of private methods. They also reuse
the same typer logic, but naming rules are more strict here,
non-identifiers are not supported and should never be produced. We
need to separate now identifiers for private and other method names
in the JS environment.

This also extends the compiler to enable importing the new method
types.

Bug: 446634535
Change-Id: I2b8fbb8306e4b6bd901b61952c6da91d4210ae3f
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9047716
Reviewed-by: Dominik Klemba <tacet@google.com>
Reviewed-by: Matthias Liedtke <mliedtke@google.com>
Commit-Queue: Michael Achenbach <machenbach@google.com>
Bug: 487347678
Change-Id: I37f8126dbd08e989f229246f68675540cfc8c9f4
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9052178
Commit-Queue: Danylo Mocherniuk <mdanylo@google.com>
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Bug: 487347678
Change-Id: I312d4574513d40fc0ecb43218ee62dcd8eada091
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9052179
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Commit-Queue: Danylo Mocherniuk <mdanylo@google.com>
The added properties are deprecated, but in the end it matters what we
ship, not if it's deprecated.

Bug: 487347678
Change-Id: I3e027d8a1ece8a6bdf31929fd3952d2589cc0bfa
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9052180
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Commit-Queue: Danylo Mocherniuk <mdanylo@google.com>
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Bug: 487347678
Change-Id: I11dd214d888556ded07b3d41afe387ae5c4c79cc
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9052181
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Commit-Queue: Danylo Mocherniuk <mdanylo@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Bug: 487347678
Change-Id: I08a1e7346eb50d85832e4d4df798ba5b52348382
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9052182
Commit-Queue: Danylo Mocherniuk <mdanylo@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Change-Id: I13e3653837dbc4502252cbe2ac25e8b4dbb7c44f
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9058297
Commit-Queue: Doga Yüksel <dyuksel@google.com>
Reviewed-by: Doga Yüksel <dyuksel@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Bug: 487347678
Change-Id: I5fdc080270ee713b71c46faf867a800180c1ec22
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9058836
Commit-Queue: Danylo Mocherniuk <mdanylo@google.com>
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Bug: 487347678
Change-Id: I649849a5e3d9511e82e5e47a5ffc61433ca8822e
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9058837
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Commit-Queue: Danylo Mocherniuk <mdanylo@google.com>
- Proxy.revocabale
- Promise.withResolvers
- Number.parseFloat
- Number.parseInt
- Object.groupBy
- Object.hasOwn

Bug: 487347678
Change-Id: I67c3c1c0b0d517dc61cc8a26c69031b81cf9eccc
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9058838
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Commit-Queue: Danylo Mocherniuk <mdanylo@google.com>
Change-Id: I539c771195a5c9a5242c9650815496f8c255cdba
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9064096
Commit-Queue: Doga Yüksel <dyuksel@google.com>
Auto-Submit: Danylo Mocherniuk <mdanylo@google.com>
Reviewed-by: Doga Yüksel <dyuksel@google.com>
and add a custom generator for Intl.DisplayNames.prototype.of() as it
contains a tight coupling between the constructor arguments and the code
provided to the "of" function as an argument.

Bug: 487347678
Change-Id: Ia0ffd3f51599b501a6855b07931249abcf777984
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9063878
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: Manish Goregaokar <manishearth@google.com>
Bug: 487347678
Change-Id: I92fa5d5dccfcd3b5f5590ecea134265bb10d1190
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9064297
Reviewed-by: Manish Goregaokar <manishearth@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
- <Error>.name for all builtin error types
- <Error>.prototype.mesage and <Error>.prototype.name for all builtin
  error types
- ArrayBuffer.prototype.sliceToImmutable
- Date.prototype.toLocaleDateString
- Date.prototype.toLocaleTimeString

Bug: 487347678
Change-Id: I766290ca1e2ced9556448bf31dbbd4d8f6656576
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9064298
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Bug: 487347678
Change-Id: Ib8ecc8268ef60847919abe2dc6f081665930fde3
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9064299
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
V8-side change: https://crrev.com/c/7623762

Bug: 487620644
Change-Id: Iee848582cf8ed19085daea8c7715bf8c3f54f3d9
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9064480
Reviewed-by: Michael Achenbach <machenbach@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Change-Id: I95e6e68e0ce4d2051f3c267667aedef63207b6c2
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9064377
Commit-Queue: Michael Achenbach <machenbach@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: Michael Achenbach <machenbach@google.com>
Liedtke and others added 26 commits March 5, 2026 03:16
There are some test-only / d8-only functions that we don't need to or
don't want to fuzz.

Bug: 487347678
Change-Id: Idea475a3afdf4dcba2787e497fca45580299d265
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9051197
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
There is a large amount of properties on prototype objects that can only
be called on a proper instance, e.g. trying to access
> DisposableStack.prototype.disposed
will throw an error as DisposableStack.prototype is not the expected
receiver type (unlike new DisposableStack().disposed).
While the property exists on the prototype, it should not be registered
as the fuzzer can't really do anything useful with something that always
throws.

Bug: 487347678
Change-Id: Ie8b2e5d30caa819f512d6791afb1a22d11761c7f
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9058839
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
and skip their prototypes in FuzzilliDetectMissingBuiltins.

Bug: 487347678
Change-Id: Ib74c990924c2b194f486c14c8578148240b9a1f5
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9064302
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: Michael Achenbach <machenbach@google.com>
Commit-Queue: Michael Achenbach <machenbach@google.com>
This test case is obsolete. For detecting missing builtins, there is now
a script that can recursively scan the available global context of a
JavaScript shell.

Bug: 487347678
Change-Id: If785dc73fca43d693e29d1c22e345381568072bd
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9064301
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Bug: 487347678
Change-Id: I2157fdb4904c8cd5886c8cf9c3f230cab85fdd76
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9078877
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Commit-Queue: Michael Achenbach <machenbach@google.com>
Reviewed-by: Michael Achenbach <machenbach@google.com>
Bug: 487347678
Change-Id: I00083540222506cfb09d7b1dfe5d040b7818a58b
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9081256
Commit-Queue: Danylo Mocherniuk <mdanylo@google.com>
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Bug: 445356784
Change-Id: I488149208dcda6e632ff1fc36d7c959978c3d470
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9078876
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: Manos Koukoutos <manoskouk@google.com>
These are fixed in d8 via https://crrev.com/c/7642309.

Bug: 487347678
Change-Id: I772ae90c0cee6a4c126f11d84934c132bc69c463
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9081257
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Bug: 445356784
Change-Id: I583e24a56e0e97b589a9bd796ee7e4e23cd63d0d
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9081258
Reviewed-by: Danylo Mocherniuk <mdanylo@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
This flag is enabled by default and has been removed from v8 in:
https://crrev.com/c/7642813

Change-Id: I442cd7dfcb0b7d457a06fb73d808285b336738fc
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9081797
Commit-Queue: Michael Achenbach <machenbach@google.com>
Reviewed-by: Michael Achenbach <machenbach@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Also add DataView.prototype.setBigUint64 and its optional littleEndian
parameter.

Bug: 445356784
Change-Id: If49c62df8beb2c7202ad12bad58d220ca3f1a3ad
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9081796
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Commit-Queue: Michael Achenbach <machenbach@google.com>
Reviewed-by: Michael Achenbach <machenbach@google.com>
- Promise.all, Promise.race, Promise.allSettled expect a single
  (iterable) argument.
- Date.now, Date.parse, Date.UTC don't return a Date, they return a
  number (the timestamp). The same applies to all the mutator / setter
  methods on Date.prototype.
- String.prototype.localeCompare returns an integer, not a string.
- String.prototype.match returns an array of matches, not a single
  string.
- FinalizationRegistry.prototype.register doesn't return anything.
- FinalizationRegistry.prototype.unregister returns a boolean (whether
  at least one cell was unregistered).
- Reflect.getPrototypeOf, Reflect.isExtensible, and Reflect.ownKeys
  throw a TypeError if passed a primitive value, so type them as
  requiring an object.
- DataView: The multi-byte getter and setter methods were missing the
  optional littleEndian boolean parameter.
- Math.max and Math.min return a number (which might be NaN).
- Object.assign, .defineProperty, .defineProperties and .freeze all
  return the object.
- Array.fill, .reverse and .sort return the passed (modified) array.
- The same is true for the typed arrays (Int8Array and friends).

Change-Id: I1c96b03f3303aad8868a13102b6675126bcc3997
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9087136
Reviewed-by: Michael Achenbach <machenbach@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Commit-Queue: Michael Achenbach <machenbach@google.com>
Test cases that use OSR currently only do this through --jit-fuzzing
triggering OSR in loops, often leading to brittle repros like the
referenced bug.

This creates a typical pattern in a code generator making use of
the %OptimizeOsr() runtime function.

Bug: 490353576
Change-Id: Id09459d8f7ba26a1b0eaec7e438de555b22fc7b5
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9087056
Reviewed-by: Matthias Liedtke <mliedtke@google.com>
Commit-Queue: Michael Achenbach <machenbach@google.com>
Moves the randomness of the sandbox corruption engine from the JavaScript
runtime to the Swift program generator.

Functional changes:
- Splits the monolithic `corrupt(obj, seed)` JS payload into modular
  entry points: `corruptDataWithBitflip`, `corruptDataWithIncrement`,
  `corruptDataWithReplace`, `corruptWithWorker`, and `corruptFunction`.
- Replaces JS recursion with deterministic `pathArray` tuples generated
  by Fuzzilli, explicitly passing required entropy seeds (e.g.,
  `[[Step.POINTER, offsetSeed], [Step.NEIGHBOR, hashQuery]]`).
- `corruptFunction` evaluates the entire traversal path first and only
  hijacks the function if the final target is a JSFunction.
- `corruptWithWorker` only sets up a background flipping race condition.
- Operations, sizes, bit positions, sub-field offsets, and BigInt increment
  values are now calculated natively by Fuzzilli and passed to JS as explicit
  arguments.
- Deletes the JS `Mutator` and `RNG` classes entirely, rendering the JS
  payload completely state-free.
- Adds startup tests to explicitly verify the parser and read-only safety logic
  for all new corruption entry points.

Bug: 490512258, 490522975
Change-Id: Ia4459efa2526ecd46aa6db441657905c057e1e37
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9053496
Reviewed-by: Michael Achenbach <machenbach@google.com>
Auto-Submit: Dominik Klemba <tacet@google.com>
Commit-Queue: Dominik Klemba <tacet@google.com>
Changes the failure rate for LiveTests.testWasmCodeGenerationAndCompilationAndExecution from 25% to 35%.

This threshold should be reduced again once ref.cast is properly handled.

Change-Id: I92938e5c58ce6171627cc003a13d5344c9cafe70
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9087656
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Auto-Submit: Dominik Klemba <tacet@google.com>
Commit-Queue: Dominik Klemba <tacet@google.com>
Reviewed-by: Matthias Liedtke <mliedtke@google.com>
Change-Id: I28783d963f1ac4678f2e2cdd170f9a8c5182e299
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9091116
Commit-Queue: Marja Hölttä <marja@chromium.org>
Reviewed-by: Michael Achenbach <machenbach@google.com>
and support iterables in OptionsBags.
Iterator.zip was added to V8 with https://crrev.com/c/7605659.

Bug: 465357675
Change-Id: Ia5e5c49831f8ad10c166bb32a264ee90a1aadead
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9090936
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: Olivier Flückiger <olivf@google.com>
Commit-Queue: Nikos Papaspyrou <nikolaos@google.com>
Reviewed-by: Nikos Papaspyrou <nikolaos@google.com>
…codes`

Include `--private_field_bytecodes` with a 0.5 probability.

Include `--proto_assign_seq_lazy_func_opt` with a 0.5 probability in
fuzzili. This flag does imply the flag it replaces. Seq count is fixed
to 1 to stress the pattern.

Bug: 449885256
Bug: 474269456
Change-Id: I4e9928c2c3b23ebc129bfae67d06dc286a8dfba7
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9095116
Reviewed-by: Michael Achenbach <machenbach@google.com>
Reviewed-by: Matthias Liedtke <mliedtke@google.com>
Commit-Queue: Raphaël Hérouart <rherouart@google.com>
Change-Id: I9f2aedf60a7d3d8eec7011243e6ddac5af94aa74
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9099036
Commit-Queue: Marja Hölttä <marja@chromium.org>
Reviewed-by: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: Darius Mercadier <dmercadier@google.com>
Same as commit 226938a but now for
the tail call variant (in preparation for using wasm-gc signatures for
wasm functions.)

Bug: 445356784
Change-Id: I5b2501b45a4a3f7e15c8814008d2d6d5bc9a9974
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9108116
Reviewed-by: Manos Koukoutos <manoskouk@google.com>
Commit-Queue: Manos Koukoutos <manoskouk@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Currently, when Fuzzilli fails to execute a script via the REPRL
protocol (e.g., if the target fails to launch and send the HELO message,
or crashes unexpectedly), the resulting error message is opaque (e.g.,
"Did not receive HELO message from child: Bad file descriptor").

Fuzzilli already captures the target's stdout and stderr in
memory-mapped files by default, this change extracts those buffers and
appends them to the Fuzzilli warning and error logs whenever
`reprl_execute` fails. This surfaces the actual crash dump, missing
dependencies, or startup errors directly in the logs, making debugging
broken targets locally or on bots significantly easier.

Bug: 492209808
Change-Id: If94fc9eadc97645ab240f648b7e6cf42378d091e
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9095283
Auto-Submit: Giovanni Ortuño Urquidi <ortuno@google.com>
Reviewed-by: Matthias Liedtke <mliedtke@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
V8 has lots of optimizations around smi ranges (e.g. untagging smis).

Change-Id: I1393d1c30a61ef43d45f3ede4a74e6fe0b6c0e2d
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9111056
Reviewed-by: Darius Mercadier <dmercadier@google.com>
Commit-Queue: Darius Mercadier <dmercadier@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Bug: 445356784
Change-Id: I0eb33e4e3f800919b5c92bf6ce48ded45d372ac5
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9108176
Auto-Submit: Matthias Liedtke <mliedtke@google.com>
Reviewed-by: Manos Koukoutos <manoskouk@google.com>
Commit-Queue: Matthias Liedtke <mliedtke@google.com>
Bug: 491410818
Change-Id: I400fbd530f32c3a8ee2c16cd71c73d24adf43357
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9110957
Commit-Queue: Darius Mercadier <dmercadier@google.com>
Reviewed-by: Matthias Liedtke <mliedtke@google.com>
This works around false positives in connection with code referring
to `f.arguments` in differential fuzzing. We now suppress any access
to the `arguments` property and instead reject such samples.

This has only an effect in differential fuzzing and is a no-op
otherwise.

We don't really care if the receiver actually is a function,
and instead over-approximate this slightly. This might cover
weird other ways of transferring the arguments to another object
with `o.__proto__ = f`.

Bug: 490382714
Change-Id: Ia7e78a6708f4d0db4c1ba671cfd279db8f57b70e
Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9102176
Commit-Queue: Michael Achenbach <machenbach@google.com>
Reviewed-by: Matthias Liedtke <mliedtke@google.com>
Profiles moved from FuzzilliCli/Profiles to Fuzzilli/Profiles.
BunProfile.swift moved and import adjusted.

.github/workflows/swift.yml reverted (OAuth lacks workflow scope;
upstream changes were trivial -v flags and apt update).
@alii alii force-pushed the disable-ffi-and-sync-upstream branch from 358c3b5 to a61ae38 Compare March 20, 2026 23:13
@alii alii merged commit 755c40a into main Mar 20, 2026
3 checks passed
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Mar 20, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: ac641550-0bc4-44c7-9ed5-c724f5181de8

📥 Commits

Reviewing files that changed from the base of the PR and between 358c3b5 and a61ae38.

📒 Files selected for processing (4)
  • Sources/Fuzzilli/Compiler/Compiler.swift
  • Sources/Fuzzilli/Compiler/Parser/parser.js
  • Sources/Fuzzilli/Profiles/BunProfile.swift
  • Sources/Fuzzilli/Profiles/Profile.swift

Disabled knowledge base sources:

  • Linear integration is disabled

You can enable these sources in your CodeRabbit configuration.


Walkthrough

Adds WebAssembly GC reference-cast support, updates protobuf schemas for Wasm calls, broadens JavaScript environment and profiling API visibility, introduces a post-processor rejection path, improves lifter/compiler/generator support for non-identifier method keys and Intl.DisplayNames, adds tooling to detect missing builtins, and includes many tests and utilities updates.

Changes

Cohort / File(s) Summary
WebAssembly Reference Casting Operations
Sources/Fuzzilli/FuzzIL/WasmOperations.swift, Sources/Fuzzilli/FuzzIL/Opcodes.swift, Sources/Fuzzilli/CodeGen/WasmCodeGenerators.swift, Sources/Fuzzilli/CodeGen/CodeGeneratorWeights.swift
Added WasmRefCast Wasm operation and opcode case; added two code generators (WasmRefCastGenerator, WasmRefCastAbstractGenerator) and weights; updated array/struct element type generation to include abstract ref kinds.
Wasm Protobuf Schema Refactoring
Sources/Fuzzilli/Protobuf/operations.proto, Sources/Fuzzilli/Protobuf/operations.pb.swift, Sources/Fuzzilli/Protobuf/program.proto, Sources/Fuzzilli/Protobuf/program.pb.swift
Changed WasmJsCall/WasmReturnCallDirect serialization to use parameterCount/outputCount ints instead of repeated type arrays; added WasmRefCast message and integrated it into Instruction oneof.
Wasm Typing, Lifting, and Instruction Handling
Sources/Fuzzilli/FuzzIL/JSTyper.swift, Sources/Fuzzilli/FuzzIL/Instruction.swift, Sources/Fuzzilli/Lifting/FuzzILLifter.swift, Sources/Fuzzilli/Lifting/WasmLifter.swift
Adjusted typing/deserialization to new count-based call fields; added .wasmRefCast typing and lifting cases; updated wasm-js-call/ref-test/ref-cast encoding and import/signature lookup positions.
Program Builder Wasm and Intl Support
Sources/Fuzzilli/Base/ProgramBuilder.swift
Added randomCustomPrivateMethodName(), wasmRefCast(...), Intl.DisplayNames helpers and fuzzIntlDisplayNamesOf(), expanded wasm struct/field generation, and changed createOptionsBag to accept predefined values.
Code Generators and Intl
Sources/Fuzzilli/CodeGen/CodeGenerators.swift
Imported Foundation; extended BuiltinIntl selection to include Intl.DisplayNames constructors/fuzzers; fixed generators to call randomCustomPrivateMethodName for private methods.
Compiler and Parser Method Key Support
Sources/Fuzzilli/Compiler/Compiler.swift, Sources/Fuzzilli/Compiler/Parser/parser.js
Supported numeric/string literal method keys in compiler emission (.index case) and parser (Identifier, NumericLiteral, StringLiteral keys) instead of asserting only Identifier.
JavaScript Lifter Member Access & Quoting
Sources/Fuzzilli/Lifting/JavaScriptLifter.swift
Made environment non-optional; added quoteMethodDefinitionIfNeeded() and liftMemberAccess(); updated method definitions/calls/bind/super emissions to quote or bracket-index names when needed.
Logging and Error Types
Sources/Fuzzilli/Base/Logging.swift, Sources/Fuzzilli/Util/Error.swift
Added Logger.defaultLogLevelWithoutFuzzer to gate stdout logging without an active fuzzer; introduced InternalError.postProcessRejection(String).
Post-Processor Mechanism & Engine
Sources/Fuzzilli/Engines/FuzzingPostProcessor.swift, Sources/Fuzzilli/Engines/FuzzEngine.swift
Changed FuzzingPostProcessor.process to throws; updated FuzzEngine.execute to call post-processor with try/catch and to return failed(1) on InternalError.postProcessRejection.
Profiles: API Visibility & Cleanup
Sources/Fuzzilli/Profiles/Profile.swift, Sources/Fuzzilli/Profiles/...
Made Profile and its members public and exported profiles; removed unused import Fuzzilli statements from many profile files.
V8 Profile Enhancements
Sources/Fuzzilli/Profiles/V8CommonProfile.swift, Sources/Fuzzilli/Profiles/V8Profile.swift, Sources/Fuzzilli/Profiles/V8HoleFuzzingProfile.swift
Added Worker IL types/object groups, new generators (ForceOsrGenerator, HeapNumberGenerator) and program template (TurbofanTierUpNonInlinedCallFuzzer); updated V8 flag randomization and exported v8Profile; added ForceOsrGenerator to some profiles.
Dumpling & Sandbox Post-Processors
Sources/Fuzzilli/Profiles/V8DumplingProfile.swift, Sources/Fuzzilli/Profiles/V8SandboxProfile.swift
Added DumplingFuzzingPostProcessor that rejects programs referencing "arguments"; refactored SandboxFuzzingPostProcessor to throws and to use traversal-based corruption helpers and new exported corruption functions.
JavaScript Environment Expansion
Sources/Fuzzilli/Environment/JavaScriptEnvironment.swift
Major expansion of builtins/object-groups/enums and IL typing: added DisposableStack/AsyncDisposableStack/Atomics/Intl.DisplayNames/DurationFormat, re-enabled global URI functions, added custom private method names, identifier validation helpers, many prototype/constructor registrations, corrected many method return types and iterator/iterable modeling.
Executor & Output Handling
Sources/Fuzzilli/Util/JavaScriptExecutor.swift
Added thread-safe OutputBuffer and readability handler to handle large stdout; made JavaScriptExecutor.Result properties and Outcome enum public.
Execution Failure Logging
Sources/Fuzzilli/Execution/REPRL.swift
Improved failure logging to capture and append child process stderr/stdout when retries are exhausted.
Fuzzer/Internal Fixes
Sources/Fuzzilli/Fuzzer.swift, Sources/Fuzzilli/Minimization/InstructionSimplifier.swift, Sources/Fuzzilli/Mutators/OperationMutator.swift
Fixed misspelled internal variable iterationOfLastInteratingSampleiterationOfLastInterestingSample; corrected destructuring rest-element index comparison; added .wasmRefCast to unhandled-op enumeration in mutator.
Protobuf Generated Changes
Sources/Fuzzilli/Protobuf/operations.pb.swift, Sources/Fuzzilli/Protobuf/program.pb.swift
Updated generated Swift protobuf types for WasmJsCall/WasmReturnCallDirect to use counts; added Fuzzilli_Protobuf_WasmRefCast and integrated wasmRefCast into instruction oneof and runtime handlers.
FuzzIL Instruction Serialization
Sources/Fuzzilli/FuzzIL/Instruction.swift, Sources/Fuzzilli/FuzzIL/JSTyper.swift
Updated protobuf conversion for wasmJsCall/wasmReturnCallDirect to use counts; added serialization/deserialization support for wasmRefCast and typing integration.
Lifter & Wasm Lifter Adjustments
Sources/Fuzzilli/Lifting/FuzzILLifter.swift, Sources/Fuzzilli/Lifting/WasmLifter.swift
Adapted wasm js-call and return-call lifting to count-based forms; added encoding helper for reference-type immediates and added .wasmRefCast lowering with unified immediate encoding.
New Executable Tool
Sources/FuzzilliDetectMissingBuiltins/main.swift, Package.swift
Added new executable FuzzilliDetectMissingBuiltins and target in Package manifest; new tool traverses engine globalThis to detect builtins missing from the environment model and reports missing/potentially broken entries.
Tests — Compiler / Lifter / Wasm / Minimizer / Executor
Tests/FuzzilliTests/...
Numerous test updates: added lifter tests for weird member names, wasm ref.cast tests and splice adjustments, destructuring simplification test, Dumpling post-processor tests, JavaScriptExecutor large-output test, adjusted live/wasm test runner args and thresholds, removed legacy environment builtin enumeration test, and small expected-type updates in JSTyper tests.
Profiles — minor edits
Sources/Fuzzilli/Profiles/BunProfile.swift
Added Bun.FFI = undefined; to Bun profile code prefix.
🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Sync upstream/main (60 commits)' accurately summarizes the PR's main objective of syncing with upstream.
Description check ✅ Passed The description comprehensively details the PR's changes, including profile relocation, new tooling, builtin registrations, and upstream highlights.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants