[Pkg-javascript-devel] Bug#1030284: nodejs: [arm64] RangeError: Maximum call stack size exceeded
James Addison
jay at jp-hosting.net
Sat May 13 15:05:40 BST 2023
Followup-For: Bug #1030284
X-Debbugs-Cc: tg at mirbsd.de
Thanks, Thorsten. I'm currently rebuilding (on x86) from the attached patch,
adapted from yours.
* prefers a one-time repeat division over the clever-but-fragile div-assign
* removes the upperbound check because integer greater-than checks can be
problematic
* places comparison constants on the lhs for safety
I'll post test results when they are available.
Cheers,
James
-------------- next part --------------
Description: Request an rlimit-determined stack size from V8
Author: James Addison <jay at jp-hosting.net>
Bug-Debian: https://bugs.debian.org/1030284
--- /dev/null
+++ nodejs-18.13.0+dfsg1/foo.c
@@ -0,0 +1,7 @@
+#include <stdio.h>
+
+int main() {
+ if (4 > (int)(8 / 3)) {
+ printf("Hello world!");
+ }
+}
--- nodejs-18.13.0+dfsg1.orig/src/node.cc
+++ nodejs-18.13.0+dfsg1/src/node.cc
@@ -785,6 +785,22 @@ int InitializeNodeWithArgs(std::vector<s
V8::SetFlagsFromString(NODE_V8_OPTIONS, sizeof(NODE_V8_OPTIONS) - 1);
#endif
+#define V8_STACK_RESERVE 128
+if (!(flags & ProcessInitializationFlags::kNoAdjustResourceLimits)) {
+ struct rlimit lim;
+ char stackSize[sizeof("--stack-size=") + /* 2?? */ 10];
+
+ if (getrlimit(RLIMIT_STACK, &lim))
+ fprintf(stderr, "W: stack size adjustment: cannot get RLIMIT_STACK\n");
+ else if (RLIM_INFINITY == lim.rlim_cur)
+ fprintf(stderr, "W: stack size adjustment: RLIMIT_STACK is unlimited\n");
+ else if (V8_STACK_RESERVE > (int)(lim.rlim_cur / 1024))
+ fprintf(stderr, "W: stack size adjustment: RLIMIT_STACK is too small\n");
+ else
+ V8::SetFlagsFromString(stackSize, snprintf(stackSize, sizeof(stackSize),
+ "--stack-size=%d", (int)(lim.rlim_cur / 1024)));
+}
+
HandleEnvOptions(per_process::cli_options->per_isolate->per_env);
#if !defined(NODE_WITHOUT_NODE_OPTIONS)
More information about the Pkg-javascript-devel
mailing list