From 2c0a4fab11f8aa866056a857a42b55a1882391b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Reis?= Date: Thu, 30 Apr 2020 20:19:52 +0100 Subject: [PATCH] win: allow skipping the supported platform check Fixes: https://github.com/nodejs/node/issues/33034 PR-URL: https://github.com/nodejs/node/pull/33176 Reviewed-By: Bartosz Sosnowski Reviewed-By: James M Snell Reviewed-By: Michael Dawson Reviewed-By: Anatoli Papirovski Reviewed-By: Gireesh Punathil Reviewed-By: Ruben Bridgewater --- doc/api/cli.md | 9 +++++++++ doc/node.1 | 7 +++++++ src/node_main.cc | 18 +++++++++++++++--- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/doc/api/cli.md b/doc/api/cli.md index 0642a852293c73..6f64a39861477a 100644 --- a/doc/api/cli.md +++ b/doc/api/cli.md @@ -1366,6 +1366,15 @@ added: Path to a Node.js module which will be loaded in place of the built-in REPL. Overriding this value to an empty string (`''`) will use the built-in REPL. +### `NODE_SKIP_PLATFORM_CHECK=value` + + +If `value` equals `'1'`, the check for a supported platform is skipped during +Node.js startup. Node.js might not execute correctly. Any issues encountered +on unsupported platforms will not be fixed. + ### `NODE_TLS_REJECT_UNAUTHORIZED=value` If `value` equals `'0'`, certificate validation is disabled for TLS connections. diff --git a/doc/node.1 b/doc/node.1 index 278061424c07c6..3af77ca2355030 100644 --- a/doc/node.1 +++ b/doc/node.1 @@ -565,6 +565,13 @@ The default path is which is overridden by this variable. Setting the value to an empty string ("" or " ") will disable persistent REPL history. . +.It Ev NODE_SKIP_PLATFORM_CHECK +When set to +.Ar 1 , +the check for a supported platform is skipped during Node.js startup. +Node.js might not execute correctly. +Any issues encountered on unsupported platforms will not be fixed. +. .It Ev NODE_TLS_REJECT_UNAUTHORIZED When set to .Ar 0 , diff --git a/src/node_main.cc b/src/node_main.cc index 00f3f2a4836818..9f4ea22d12c6e8 100644 --- a/src/node_main.cc +++ b/src/node_main.cc @@ -27,13 +27,25 @@ #include #include +#define SKIP_CHECK_VAR "NODE_SKIP_PLATFORM_CHECK" +#define SKIP_CHECK_SIZE 1 +#define SKIP_CHECK_VALUE "1" + int wmain(int argc, wchar_t* wargv[]) { // Windows Server 2012 (not R2) is supported until 10/10/2023, so we allow it // to run in the experimental support tier. + char buf[SKIP_CHECK_SIZE + 1]; if (!IsWindows8Point1OrGreater() && - !(IsWindowsServer() && IsWindows8OrGreater())) { - fprintf(stderr, "This application is only supported on Windows 8.1, " - "Windows Server 2012 R2, or higher."); + !(IsWindowsServer() && IsWindows8OrGreater()) && + (GetEnvironmentVariableA(SKIP_CHECK_VAR, buf, sizeof(buf)) != + SKIP_CHECK_SIZE || + strncmp(buf, SKIP_CHECK_VALUE, SKIP_CHECK_SIZE + 1) != 0)) { + fprintf(stderr, "Node.js is only supported on Windows 8.1, Windows " + "Server 2012 R2, or higher.\n" + "Setting the " SKIP_CHECK_VAR " environment variable " + "to 1 skips this\ncheck, but Node.js might not execute " + "correctly. Any issues encountered on\nunsupported " + "platforms will not be fixed."); exit(ERROR_EXE_MACHINE_TYPE_MISMATCH); }