This is an automated email from the ASF dual-hosted git repository.

voidmatcha pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zeppelin.git


The following commit(s) were added to refs/heads/master by this push:
     new 65c12bf1b9 [HOTFIX] Update remaining Node.js toolchains to 22.23.4
65c12bf1b9 is described below

commit 65c12bf1b977dc4e1afdb6fa0934b8376f6abd00
Author: ChanHo Lee <[email protected]>
AuthorDate: Sat Oct 24 23:41:39 2026 +0900

    [HOTFIX] Update remaining Node.js toolchains to 22.23.4
    
    ### What is this PR for?
    
    Follow up on #5587 by updating the remaining Node.js toolchains to patched 
releases. The [October 2026 Node.js security 
release](https://nodejs.org/en/blog/vulnerability/october-2026-security-releases#nodejs-brotli-decoder-out-of-bounds-write-permits-remote-code-execution-cve-2026-111497---high)
 addresses the Brotli decoder vulnerability CVE-2026-111497.
    
    - Upgrade Classic UI builds from Node.js 16.20.2 to 22.23.4, aligning 
Maven, nvm, and package engine metadata.
    - Upgrade Helium bundle generation from Node.js 16.16.0 to 22.23.4.
    - Restrict the Angular/React frontend engine range to patched release 
lines: `^22.23.4 || ^24.22.1 || >=26.12.1`.
    
    The existing Classic npm 8.19.4 and Helium npm 8.11.0/Yarn 1.22.0 versions 
are retained. Application code and dependency resolutions are unchanged apart 
from the Node.js version selection and engine metadata.
    
    Classic uses Node.js during development and builds; Helium also invokes 
Node.js on the server to install packages and generate bundles. This updates 
those toolchains without claiming a confirmed remotely exploitable Zeppelin 
attack path.
    
    ### What type of PR is it?
    
    Bug Fix
    
    ### Todos
    
    - [x] Validate Classic UI builds and tests on Node.js 22.23.4
    - [x] Validate Helium installation, bundle generation, rendering, and cache 
reuse
    - [x] Validate integration with the #5587 frontend toolchain
    - [ ] Confirm GitHub Actions results
    
    ### What is the Jira issue?
    
    N/A
    
    ### How should this be tested?
    
    Frontend:
    - Clean installation with Node.js 22.23.4 and npm 11.21.1.
    - React tests: 262 passed.
    - React typecheck and React/Angular production builds passed.
    - Existing braces security patch applied successfully.
    
    Classic UI:
    - Production build and 194 browser unit tests passed.
    - Browser checks covered notebook editing, execution, table/chart 
rendering, search/replace, and interpreter permission settings.
    - The development server connected to the backend successfully.
    
    Helium:
    - Five Helium tests passed, and the server reactor build passed with JDK 11.
    - Installed and enabled the horizontalbar example, generated its bundle 
with Node.js 22.23.4, and verified the SVG chart and values in a notebook.
    - On Linux x86-64, verified automatic replacement of an existing Node.js 
16.16.0 installation, bundle loading, forced rebuild, and reuse after server 
restart.
    - The Markdown Spell example installed, bundled, and rendered, but result 
persistence encountered an existing Java ClassCastException. Equivalent bundles 
built with Node.js 16.20.2 and 22.23.4 were byte-identical.
    
    The browser checks also identified an existing Monaco icon font loading 
error, reproduced with a Node.js 22.21.1 comparison build. These existing 
issues are outside this change.
    
    The retained Node.js changes are identical to the previously validated 
versions. After integration with #5587, installation, React tests, typecheck, 
and frontend builds were repeated. The source tree was unchanged by rebasing 
onto the merged #5587 commit. The full E2E suite, Storybook build, and final 
WAR/container packaging were not rerun.
    
    ### Screenshots (if appropriate)
    
    N/A
    
    ### Questions:
    
    * Does the license files need to update? No.
    * Is there breaking changes for older versions? Builds require a patched 
Node.js release. Maven downloads Node.js 22.23.4 for Classic UI builds, and 
Helium installs that version for bundle generation.
    * Does this needs documentation? Yes; the Classic UI Local Development 
instructions now point to the Node.js version pinned in `.nvmrc`.
    
    
    Closes #5588 from tbonelee/fix/brotli-security-after-5587.
    
    Signed-off-by: YONGJAE LEE <[email protected]>
---
 .../src/main/java/org/apache/zeppelin/helium/HeliumBundleFactory.java   | 2 +-
 zeppelin-web-angular/package-lock.json                                  | 2 +-
 zeppelin-web-angular/package.json                                       | 2 +-
 zeppelin-web/.nvmrc                                                     | 2 +-
 zeppelin-web/README.md                                                  | 2 +-
 zeppelin-web/package-lock.json                                          | 2 +-
 zeppelin-web/package.json                                               | 2 +-
 zeppelin-web/pom.xml                                                    | 2 +-
 8 files changed, 8 insertions(+), 8 deletions(-)

diff --git 
a/zeppelin-server/src/main/java/org/apache/zeppelin/helium/HeliumBundleFactory.java
 
b/zeppelin-server/src/main/java/org/apache/zeppelin/helium/HeliumBundleFactory.java
index f6e9389633..7af9bbee78 100644
--- 
a/zeppelin-server/src/main/java/org/apache/zeppelin/helium/HeliumBundleFactory.java
+++ 
b/zeppelin-server/src/main/java/org/apache/zeppelin/helium/HeliumBundleFactory.java
@@ -70,7 +70,7 @@ import org.slf4j.LoggerFactory;
  */
 public class HeliumBundleFactory {
   private static final Logger LOGGER = 
LoggerFactory.getLogger(HeliumBundleFactory.class);
-  private static final String NODE_VERSION = "v16.16.0";
+  private static final String NODE_VERSION = "v22.23.4";
   private static final String NPM_VERSION = "8.11.0";
   private static final String YARN_VERSION = "v1.22.0";
   private static final String NPM_PACKAGE_NAME = "npm";
diff --git a/zeppelin-web-angular/package-lock.json 
b/zeppelin-web-angular/package-lock.json
index d59bed52ee..25c0a77f69 100644
--- a/zeppelin-web-angular/package-lock.json
+++ b/zeppelin-web-angular/package-lock.json
@@ -91,7 +91,7 @@
         "ws": "8.22.0"
       },
       "engines": {
-        "node": ">=22.12.0"
+        "node": "^22.23.4 || ^24.22.1 || >=26.12.1"
       }
     },
     "node_modules/@algolia/abtesting": {
diff --git a/zeppelin-web-angular/package.json 
b/zeppelin-web-angular/package.json
index 67838599f2..9f899297f9 100644
--- a/zeppelin-web-angular/package.json
+++ b/zeppelin-web-angular/package.json
@@ -53,7 +53,7 @@
     "e2e:cleanup": "npx tsx e2e/cleanup-util.ts"
   },
   "engines": {
-    "node": ">=22.12.0"
+    "node": "^22.23.4 || ^24.22.1 || >=26.12.1"
   },
   "private": true,
   "dependencies": {
diff --git a/zeppelin-web/.nvmrc b/zeppelin-web/.nvmrc
index 0af7914966..1a5acc8c37 100644
--- a/zeppelin-web/.nvmrc
+++ b/zeppelin-web/.nvmrc
@@ -8,4 +8,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-16.20.2
+22.23.4
diff --git a/zeppelin-web/README.md b/zeppelin-web/README.md
index 4023f14d87..ac16f370b8 100644
--- a/zeppelin-web/README.md
+++ b/zeppelin-web/README.md
@@ -6,7 +6,7 @@ This is Zeppelin's frontend project.
 
 ### Local Development
 
-It is recommended to install [Node.js](https://nodejs.org) v16 or use 
[creationix/nvm](https://github.com/creationix/nvm).
+Use the [Node.js](https://nodejs.org) version pinned in [.nvmrc](./.nvmrc) for 
local development. You can manage this version with 
[nvm](https://github.com/nvm-sh/nvm).
 
 All build commands are described in [package.json](./package.json)
 
diff --git a/zeppelin-web/package-lock.json b/zeppelin-web/package-lock.json
index 78454256ea..704ab376d0 100644
--- a/zeppelin-web/package-lock.json
+++ b/zeppelin-web/package-lock.json
@@ -125,7 +125,7 @@
         "webpack-dev-server": "^4.15.2"
       },
       "engines": {
-        "node": "~16.20.2",
+        "node": "~22.23.4",
         "npm": "~8.19.4"
       }
     },
diff --git a/zeppelin-web/package.json b/zeppelin-web/package.json
index 484fe4a431..17c5bdb9c3 100644
--- a/zeppelin-web/package.json
+++ b/zeppelin-web/package.json
@@ -3,7 +3,7 @@
   "license": "Apache-2.0",
   "version": "0.0.0",
   "engines": {
-    "node": "~16.20.2",
+    "node": "~22.23.4",
     "npm": "~8.19.4"
   },
   "scripts": {
diff --git a/zeppelin-web/pom.xml b/zeppelin-web/pom.xml
index b929568046..bc05a41f8b 100644
--- a/zeppelin-web/pom.xml
+++ b/zeppelin-web/pom.xml
@@ -38,7 +38,7 @@
     <!--plugin versions-->
     
<plugin.frontend.nodeDownloadRoot>https://nodejs.org/dist/</plugin.frontend.nodeDownloadRoot>
     
<plugin.frontend.npmDownloadRoot>https://registry.npmjs.org/npm/-/</plugin.frontend.npmDownloadRoot>
-    <node.version>v16.20.2</node.version>
+    <node.version>v22.23.4</node.version>
     <npm.version>8.19.4</npm.version>
     <!-- the scope of the Hadoop dependencies is the same as for the other 
Zeppelin components -->
     <hadoop.deps.scope>test</hadoop.deps.scope>

Reply via email to