feat_optionally_prevent_calling_v8_enablewebassemblytraphandler.patch 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
  2. From: Shelley Vohr <[email protected]>
  3. Date: Thu, 16 Nov 2023 16:48:10 +0100
  4. Subject: feat: optionally prevent calling V8::EnableWebAssemblyTrapHandler
  5. V8::EnableWebAssemblyTrapHandler can be called only once or it will
  6. hard crash. We need to prevent Node.js calling it in the event it has
  7. already been called.
  8. This should be upstreamed.
  9. diff --git a/src/node.cc b/src/node.cc
  10. index 3e4f1b5d730865fae61f8bfbc58c14c6a59fb33a..7478ef81eb9b275eb5f45b528582e5bbd30e60ec 100644
  11. --- a/src/node.cc
  12. +++ b/src/node.cc
  13. @@ -650,6 +650,7 @@ static void PlatformInit(ProcessInitializationFlags::Flags flags) {
  14. #endif
  15. }
  16. #endif // defined(_WIN32)
  17. + if (!(flags & ProcessInitializationFlags::kNoEnableWasmTrapHandler))
  18. V8::EnableWebAssemblyTrapHandler(false);
  19. #endif // NODE_USE_V8_WASM_TRAP_HANDLER
  20. }
  21. diff --git a/src/node.h b/src/node.h
  22. index e55256996f2c85b0ae3854cbd1b83ca88a3e22cb..76e2459eceed127e69c686f26fd5bd369b81f1af 100644
  23. --- a/src/node.h
  24. +++ b/src/node.h
  25. @@ -275,6 +275,10 @@ enum Flags : uint32_t {
  26. kNoInitializeCppgc = 1 << 13,
  27. // Initialize the process for predictable snapshot generation.
  28. kGeneratePredictableSnapshot = 1 << 14,
  29. + // Do not initialize the Web Assembly trap handler. This is used by
  30. + // embedders to account for the case where it may already have been
  31. + // initialized - calling it more than once will hard crash.
  32. + kNoEnableWasmTrapHandler = 1 << 15,
  33. // Emulate the behavior of InitializeNodeWithArgs() when passing
  34. // a flags argument to the InitializeOncePerProcess() replacement