[Pkg-javascript-devel] Bug#1030284: nodejs: [arm64] RangeError: Maximum call stack size exceeded

Thorsten Glaser tg at debian.org
Sat May 13 14:01:16 BST 2023


James Addison dixit:

>... to add something like this:

Ouch, by going via a string?! I wouldn’t have thought of that…

>  if (!(flags & ProcessInitializationFlags::kNoAdjustResourceLimits)) {
>    struct rlimit lim;
>    if (getrlimit(RLIMIT_STACK, &lim) == 0) {
>      char stackSize[32];

32 is magic and may also be wrong here.

>      int buflen = snprintf(stackSize, sizeof(stackSize),
>"--stack-size=%d", lim.rlim_cur);

%d isn’t right for lim.rlim_cur, which is of type rlim_t.
--stack-size seems to take in KiB, and we’d want a reserve.

>      if (buflen < sizeof(stackSize)) {
>        V8::SetFlagsFromString(stackSize, buflen);
>      }
>    }
>  }


So, taking your next post into account, probably something more
like this:

#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 (lim.rlim_cur == RLIM_INFINITY)
		fprintf(stderr, "W: stack size adjustment: RLIMIT_STACK is unlimited\n");
	else if ((lim.rlim_cur /= 1024) <= V8_STACK_RESERVE)
		fprintf(stderr, "W: stack size adjustment: RLIMIT_STACK is too small\n");
	else if ((lim.rlim_cur -= V8_STACK_RESERVE) >= /* 2³¹ */ 2147483647)
		fprintf(stderr, "W: stack size adjustment: RLIMIT_STACK is too large\n");
	else
		V8::SetFlagsFromString(stackSize, snprintf(stackSize, sizeof(stackSize),
		    "--stack-size=%d", (int)lim.rlim_cur));
}

Untested, still not back to full health, take with grains of salt.

bye,
//mirabilos
-- 
In traditional syntax ' is ignored, but in c99 everything between two ' is
handled as character constant.  Therefore you cannot use ' in a preproces-
sing file in c99 mode.	-- Ragge
No faith left in ISO C99, undefined behaviour, etc.



More information about the Pkg-javascript-devel mailing list