From 48aa79e6c20fe26d46982fd32e22b4cfac98a882 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Schr=C3=B6ter?= Date: Tue, 11 Mar 2025 11:44:33 +0100 Subject: [PATCH] Sync from SUSE:ALP:Source:Standard:1.0 nodejs20 revision 9e4449ebaaaf8aa1cad70ddaa08bf7e9 --- CVE-2024-21538.patch | 46 ++++++++++++ SHASUMS256.txt | 82 ++++++++++----------- SHASUMS256.txt.sig | Bin 438 -> 438 bytes fix_ci_tests.patch | 79 ++++++++++++--------- linker_lto_jobs.patch | 12 ++-- node-v20.15.1.tar.xz | 3 - node-v20.18.2.tar.xz | 3 + nodejs.keyring | Bin 61373 -> 17430 bytes nodejs20.changes | 35 +++++++++ nodejs20.spec | 161 +++++++++++++++++++++++------------------- 10 files changed, 265 insertions(+), 156 deletions(-) create mode 100644 CVE-2024-21538.patch delete mode 100644 node-v20.15.1.tar.xz create mode 100644 node-v20.18.2.tar.xz diff --git a/CVE-2024-21538.patch b/CVE-2024-21538.patch new file mode 100644 index 0000000..979818a --- /dev/null +++ b/CVE-2024-21538.patch @@ -0,0 +1,46 @@ +Applied following patches, + +From 5ff3a07d9add449021d806e45c4168203aa833ff Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andr=C3=A9=20Cruz?= +Date: Wed, 6 Nov 2024 22:02:49 +0000 +Subject: [PATCH] fix: disable regexp backtracking (#160) + +--- + lib/util/escape.js | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + + +From 640d391fde65388548601d95abedccc12943374f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andr=C3=A9=20Cruz?= +Date: Thu, 7 Nov 2024 12:50:38 +0000 +Subject: [PATCH] fix: fix escaping bug introduced by backtracking + +--- + lib/util/escape.js | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + + +Index: node-v18.20.5/deps/npm/node_modules/cross-spawn/lib/util/escape.js +=================================================================== +--- node-v18.20.5.orig/deps/npm/node_modules/cross-spawn/lib/util/escape.js ++++ node-v18.20.5/deps/npm/node_modules/cross-spawn/lib/util/escape.js +@@ -15,15 +15,17 @@ function escapeArgument(arg, doubleEscap + arg = `${arg}`; + + // Algorithm below is based on https://qntm.org/cmd ++ // It's slightly altered to disable JS backtracking to avoid hanging on specially crafted input ++ // Please see https://github.com/moxystudio/node-cross-spawn/pull/160 for more information + + // Sequence of backslashes followed by a double quote: + // double up all the backslashes and escape the double quote +- arg = arg.replace(/(\\*)"/g, '$1$1\\"'); ++ arg = arg.replace(/(?=(\\+?)?)\1"/g, '$1$1\\"'); + + // Sequence of backslashes followed by the end of the string + // (which will become a double quote later): + // double up all the backslashes +- arg = arg.replace(/(\\*)$/, '$1$1'); ++ arg = arg.replace(/(?=(\\+?)?)\1$/, '$1$1'); + + // All other backslashes occur literally + diff --git a/SHASUMS256.txt b/SHASUMS256.txt index 59fcf8b..081f5ae 100644 --- a/SHASUMS256.txt +++ b/SHASUMS256.txt @@ -1,41 +1,41 @@ -dd24c8b6fdaf46361e130c894fd7282266f944b54196636e6df583fdec1e836f node-v20.15.1-aix-ppc64.tar.gz -9cbfc9d496427893505f8cb81aa4c1554fe449881cb4a6c5410e494c5fc36674 node-v20.15.1-arm64.msi -4743bc042f90ba5d9edf09403207290a9cdd2f6061bdccf7caaa0bbfd49f343e node-v20.15.1-darwin-arm64.tar.gz -106ad5288f1da94bf25cf9fba4a070b442e3213e25ce8af3ad35bf6e266213f6 node-v20.15.1-darwin-arm64.tar.xz -f5379772ffae1404cfd1fcc8cf0c6c5971306b8fb2090d348019047306de39dc node-v20.15.1-darwin-x64.tar.gz -34ad01b42025f72d486f9775a2f170913ad6b9fe2d4ceb67746a08de0e475b88 node-v20.15.1-darwin-x64.tar.xz -8c2305c6df5d14525e0711f0da38295600987df4c2710c738c01400862a176b4 node-v20.15.1-headers.tar.gz -d6e4f101f8734f96be558ad4b84a35a81f33decc050a7d2d8e5b39573b79bdf8 node-v20.15.1-headers.tar.xz -8554c91ccd32782351035d3a9b168ad01c6922480800a21870fc5d6d86c2bb70 node-v20.15.1-linux-arm64.tar.gz -10d47a46ef208b3e4b226e4d595a82659123b22397ed77b7975d989114ec317e node-v20.15.1-linux-arm64.tar.xz -2c16717da7d2d7b00f6af146cdf436a0297cbcee52c85b754e4c9ed7cee34b51 node-v20.15.1-linux-armv7l.tar.gz -7bc120efdd8018f6915471b963d9b80adf4ed406d6dc9edb4ae944b85f505c4c node-v20.15.1-linux-armv7l.tar.xz -b91df4971b428f9cb2fbe427c919ad382c4cd206a85e5c918c60c15f1e3d2e32 node-v20.15.1-linux-ppc64le.tar.gz -b33e684802251397ad62ad3f8a1836267ee8b7723f87f669470018ad0035287b node-v20.15.1-linux-ppc64le.tar.xz -393f511b5623c8a872e58203914a54bc7e086b8ca870d34833766d4f9c4e2448 node-v20.15.1-linux-s390x.tar.gz -e2c36cdccc8a7c1000a349dd6fea8b0ce39884eae7b3dd1950d0105120f20848 node-v20.15.1-linux-s390x.tar.xz -a9db028c0a1c63e3aa0d97de24b0966bc507d8239b3aedc4e752eea6b0580665 node-v20.15.1-linux-x64.tar.gz -26700f8d3e78112ad4a2618a9c8e2816e38a49ecf0213ece80e54c38cb02563f node-v20.15.1-linux-x64.tar.xz -4f437463e708c4c7faaa436bed46c3ea814ec3796cfe1e02515ab21d2038b4b1 node-v20.15.1-win-arm64.7z -6cc4f9ca826f5b3e0c555d156bc6adcc371bd96c2874ee748d0f97e2938d3c2b node-v20.15.1-win-arm64.zip -5dbaf27053a0566395f81ebe9e4660141de1bc7b0fe80583447bb36804643f75 node-v20.15.1-win-x64.7z -ba6c3711e2c3d0638c5f7cea3c234553808a73c52a5962a6cdb47b5210b70b04 node-v20.15.1-win-x64.zip -2281b04df475efa64ef483529fc9cad1715d42d5766e68541b64970297247692 node-v20.15.1-win-x86.7z -9a08021e4bcc4694bc72d00ce1ce0686e6de6a9a855678239625f96b09c70b07 node-v20.15.1-win-x86.zip -b139ba1b82807918af40fbed49a5b529f67ba198e87bcabdac907b734ff83ab5 node-v20.15.1-x64.msi -6079df4ab0d457180b4b730fab76d0b60b14342d797cc10a4f2d7c8b61fba584 node-v20.15.1-x86.msi -93b9549a65d459cc2e035c0d583101f827607f43376b5f23a3a2a900f5467321 node-v20.15.1.pkg -da228a0c27922f02001d9a781793696432096ab2da658eb77d7fc21693f4c5cb node-v20.15.1.tar.gz -fdd53a5729d936691a2a1151046fb4897721cb8b0fca2af957823a9b40fe0c34 node-v20.15.1.tar.xz -8e3f84e8ec7e41f98a048eb0c1365cfe54426a556ead98c4803df45d29e0335d win-arm64/node.exe -a4f01329c1c211082ac3ed387ff6651530040bbf7250ec419ce8f95b10d7804a win-arm64/node.lib -493292505fd7a156b1e7b46c7f05001a0684fba6f734f83abfcf7fed88625453 win-arm64/node_pdb.7z -88d4af538deadf8fa2638df84a76bd7dd26f0aeac8dc584f213da736f322377c win-arm64/node_pdb.zip -229fb64aeb10d3cc18eaaa2f5a4c3f1c81792dd3647c5c4350e142db528d0f89 win-x64/node.exe -87056190b7cd06f40058f8e059efd328cdcc7600b825afa102c0aa5039865af5 win-x64/node.lib -bb2198b381bb5d7bc08e2cdda3db911996e310b944b05cb8c7c271a5a7ab0901 win-x64/node_pdb.7z -316ee3fbbe976981e8ee0b81204aece9d3c2337c83f1644d90bb552c3068ca44 win-x64/node_pdb.zip -6e7f3cbb46569a58babe99de2df8a69e98ad613674d4fed71b1dca866e1a72e8 win-x86/node.exe -fa02ae7feca7eb6c4a0f1b929126df400719f5d18a2ec4b7d12c52fbe0b13814 win-x86/node.lib -e8f6da56c9bc73add71a41c4d5ed92fc6cf9e7c5067d7a0d3f7b9fd6391f07c4 win-x86/node_pdb.7z -1b4e9dbc5a8b0a5121d32351f9654c1ab451e88680982d487a4a6c40d50bd730 win-x86/node_pdb.zip +efcddeb91b189b02706d1a75a67b4a111253ec8f64cc30cc3dc4649744abd52b node-v20.18.2-aix-ppc64.tar.gz +40c5a72564b8667342bec84aab50d2af1503af2b274f1a7a09d2d929461988b6 node-v20.18.2-arm64.msi +fa76d5b5340f14070ebaa88ef8faa28c1e9271502725e830cb52f0cf5b6493de node-v20.18.2-darwin-arm64.tar.gz +32dc17147054df9cdf96d03103f4661b4cb0bb9b4ca4b70e34fe632f1bab189c node-v20.18.2-darwin-arm64.tar.xz +00a16bb0a82a2ad5d00d66b466ae1afa678482283747c27e9bce96668f334744 node-v20.18.2-darwin-x64.tar.gz +184c9b8e246a3fd139caf2456510dc99ec548ad2e5203fbc5fc56ba48104e8eb node-v20.18.2-darwin-x64.tar.xz +d74c718976adc308991fb8784f0b3f82845436bf8f04d2c982ab5cab5115289f node-v20.18.2-headers.tar.gz +05819d72dcc0aa788baab1066e18ede5f1ab6730a1925cd6b15c131b55fd4272 node-v20.18.2-headers.tar.xz +319789e8a055ff80793a05e633c8c5c9226050144a09da3747225b4ec56a2a99 node-v20.18.2-linux-arm64.tar.gz +5c1437aa16e7e6a2e0687a42c4d3f0a8f8a2039cda8880cb3be8cd983aeefb44 node-v20.18.2-linux-arm64.tar.xz +65397a4a63960bda94718099698d2961623e9ef400f60f4c3a71add2268bccfb node-v20.18.2-linux-armv7l.tar.gz +63d4df56fb2e34a5077345f78941094204d2223ce03b8ebc9c1500e6e2aae68d node-v20.18.2-linux-armv7l.tar.xz +9b2f0fd3b02d8b59bde3e2a251e4df501e755c99cfc4886b0bdf85fa4d0bc538 node-v20.18.2-linux-ppc64le.tar.gz +828a2635261ca225cd4a8a4b1a914003cdc7b30656c2e9092ac7aab02ac361db node-v20.18.2-linux-ppc64le.tar.xz +7e52e03823feaa2483a7cbcf85767790776f87a2c7112d87600c3d9d3b1ae6e9 node-v20.18.2-linux-s390x.tar.gz +bcf3680e111f1d24e403db3d5600315266ae1f8d9d1f69f39c61dbf8d8c9036e node-v20.18.2-linux-s390x.tar.xz +eb5b031bdd728871c3b9a82655dbfa533bc262c0b6da1d09a86842430cef07d4 node-v20.18.2-linux-x64.tar.gz +4e50f727ae09bdafecf2322c72faf7cd82bf3b8851a16b8bb63974e0d8d6eceb node-v20.18.2-linux-x64.tar.xz +87d10db681bca2a39fcadcc908d5e5b2c7effa16370c4ca555373b85e25275b1 node-v20.18.2.pkg +cf3ef49fafbfee3cdcd936a0d6031341b73bfa6b26a484ea0a4936c26d24b829 node-v20.18.2.tar.gz +69bf81b70f3a95ae0763459f02860c282d7e3a47567c8afaf126cc778176a882 node-v20.18.2.tar.xz +d28d21e000ebed8b6131201b727d1998d4dbc4dbdb6e5ad07679552e4c75fa4d node-v20.18.2-win-arm64.7z +b89d196a2d9dc3dac87c268aac9a983fa2fd1881c14884bc848312783ccf7d2f node-v20.18.2-win-arm64.zip +06e72c0f78cc1bf1819eb0a0a37001d2917f19ad46a149c2f923c901f599ba52 node-v20.18.2-win-x64.7z +ed790b94570518a7dce67b62485e16bc4bffecee4ec3b6df35ed220ae91117a5 node-v20.18.2-win-x64.zip +fa561ebff3f52667228f9fcd9e67ce22a86e5c28c8e3782e01a95c90b6ed114d node-v20.18.2-win-x86.7z +25f00a77843accc098561a35ce3ed923357f0127b8e5db594cb62188e3290b88 node-v20.18.2-win-x86.zip +f3ad2d799e1645281d22d71b447f3899e569da87fea78bef9571b0c2b53288d6 node-v20.18.2-x64.msi +783c4041ceb69226184a1b26177b5d9dc85e502d0f124c64d2b2c6f8ab12e5d5 node-v20.18.2-x86.msi +83e7ad1b8c4d4d9c5e06849c3e8f3a5948a5eb6aa34c5bd973ba700e0386f42c win-arm64/node.exe +58795bcd44e8023ff443dedabf7f9af928732a51befc5324082aafe56e0f5eb0 win-arm64/node.lib +83fdda5fb5869c18f5d5d3dc4d0479f6bdad16f0888c95b8008f03654593afdd win-arm64/node_pdb.7z +4049c1e7c2fc82c4d43c9d8567e7d20f20c0d360c281fcb924ce9cd4b9ce8dc3 win-arm64/node_pdb.zip +8487a277e92282904dfe0f860dbd5d229543e97a858a223fbe9c9b8670bbe170 win-x64/node.exe +5a16801c62c34c8056744ac339950c970b2b76f39b2d02afef4112ff51b74f1a win-x64/node.lib +6ff19d51a762405717f7dff33811ba6371334de95946efbccf6f8dd786ec93e8 win-x64/node_pdb.7z +07ef9641b5a339de2f43f698dc3b1aeb321e851645b199cbeb0f378674263bf1 win-x64/node_pdb.zip +ab4b6beaaa170cfed83a2c9c71d8d5032ac514a5ebd7a5aa0553731267964f5e win-x86/node.exe +fcc6ab34ebd4ad3a44de12376c3822c2ebc41febaa1ed4c4221ddc239f79f61c win-x86/node.lib +ab74677f28b517eee9f745930541d02a870ae2d3f29a5ac91fe630813a1cd987 win-x86/node_pdb.7z +6080ab7b513194510c8938c276b7fd4379eb0ed69cfa09dbb21da8a4eeddd75f win-x86/node_pdb.zip diff --git a/SHASUMS256.txt.sig b/SHASUMS256.txt.sig index cbe4e01ec6f2dd2c80aea86442f406203e51e6b5..71b5b5e50456043dffec9313e580134c9b75b0b9 100644 GIT binary patch delta 414 zcmV;P0b%~O1GWQ@B7bL((N_Qp2@s3wwBOHFUi9h$3;sRz(DXzE4S3t&NEl3NJP@~KcjGIF3w2F&CH^$*^8ZUUw_Vh^l|A*6LH7TvC2&W z{MmDdGN4+ybw|Kk-=7{v@*wg*c{|Fg;#if(eUlLNiMZU&5QR}%TK(FD)ERD9vBD%T z>mTzUvL+N}5CCGe-!^*ze@u2)Xl2~5uhpg+a9!c9jiURrim;zSpZaPdLrOth91^On z^?aB%>!ra38+3$)e9meaTmSf;L0{qb(+2~j)m-4|4?0$V)|8xm+J&i*Jy)Mh6G Iv|q2QdAsb-3;+NC delta 414 zcmV;P0b%~O1GWQ@B7bI#D@gzf2@s3wwBOHFUi5hC3;Yg9#rW&y~uNo*f0gQLPK(~rpS_Q@Pt-08Qrrj2TI<@vpQb`!GBu%_4|pYd+F81L zX1h`WYGlJ14mU$~CK>qPDyWP8t6C@Z;zQ1e9B=#Bjzp-7XMFBcX|41DvaZq5J0QeT zA)gVZkh5Spr+>>w+XND(PhJ9B=a6l4L|JlEo$+~p;10`&eY!}{r(u%>nJI^@c7Gf8OMn-HZ I4KdoWMYnLt%m4rY diff --git a/fix_ci_tests.patch b/fix_ci_tests.patch index 166fbec..73e4992 100644 --- a/fix_ci_tests.patch +++ b/fix_ci_tests.patch @@ -2,10 +2,10 @@ Author: Adam Majer Date: Dec 20 09:18:49 UTC 2017 Summary: Fix CI unit tests framework for OBS building -Index: node-v20.15.1/test/parallel/test-module-loading-globalpaths.js +Index: node-v20.18.1/test/parallel/test-module-loading-globalpaths.js =================================================================== ---- node-v20.15.1.orig/test/parallel/test-module-loading-globalpaths.js -+++ node-v20.15.1/test/parallel/test-module-loading-globalpaths.js +--- node-v20.18.1.orig/test/parallel/test-module-loading-globalpaths.js ++++ node-v20.18.1/test/parallel/test-module-loading-globalpaths.js @@ -11,6 +11,9 @@ const { addLibraryPath } = require('../c addLibraryPath(process.env); @@ -16,10 +16,10 @@ Index: node-v20.15.1/test/parallel/test-module-loading-globalpaths.js if (process.argv[2] === 'child') { console.log(require(pkgName).string); } else { -Index: node-v20.15.1/test/parallel/test-tls-passphrase.js +Index: node-v20.18.1/test/parallel/test-tls-passphrase.js =================================================================== ---- node-v20.15.1.orig/test/parallel/test-tls-passphrase.js -+++ node-v20.15.1/test/parallel/test-tls-passphrase.js +--- node-v20.18.1.orig/test/parallel/test-tls-passphrase.js ++++ node-v20.18.1/test/parallel/test-tls-passphrase.js @@ -223,7 +223,7 @@ server.listen(0, common.mustCall(functio }, onSecureConnect()); })).unref(); @@ -29,10 +29,10 @@ Index: node-v20.15.1/test/parallel/test-tls-passphrase.js // Missing passphrase assert.throws(function() { -Index: node-v20.15.1/test/parallel/test-repl-envvars.js +Index: node-v20.18.1/test/parallel/test-repl-envvars.js =================================================================== ---- node-v20.15.1.orig/test/parallel/test-repl-envvars.js -+++ node-v20.15.1/test/parallel/test-repl-envvars.js +--- node-v20.18.1.orig/test/parallel/test-repl-envvars.js ++++ node-v20.18.1/test/parallel/test-repl-envvars.js @@ -2,7 +2,9 @@ // Flags: --expose-internals @@ -44,11 +44,11 @@ Index: node-v20.15.1/test/parallel/test-repl-envvars.js const stream = require('stream'); const { describe, test } = require('node:test'); const REPL = require('internal/repl'); -Index: node-v20.15.1/Makefile +Index: node-v20.18.1/Makefile =================================================================== ---- node-v20.15.1.orig/Makefile -+++ node-v20.15.1/Makefile -@@ -392,7 +392,6 @@ ADDONS_HEADERS_PREREQS := tools/install. +--- node-v20.18.1.orig/Makefile ++++ node-v20.18.1/Makefile +@@ -396,7 +396,6 @@ ADDONS_HEADERS_PREREQS := tools/install. $(wildcard deps/uv/include/*/*.h) \ $(wildcard deps/v8/include/*.h) \ $(wildcard deps/v8/include/*/*.h) \ @@ -56,7 +56,7 @@ Index: node-v20.15.1/Makefile src/node.h src/node_api.h src/js_native_api.h src/js_native_api_types.h \ src/node_api_types.h src/node_buffer.h src/node_object_wrap.h \ src/node_version.h -@@ -563,7 +562,8 @@ test-ci-js: | clear-stalled +@@ -568,7 +567,8 @@ test-ci-js: | clear-stalled .PHONY: test-ci # Related CI jobs: most CI tests, excluding node-test-commit-arm-fanned test-ci: LOGLEVEL := info @@ -66,7 +66,7 @@ Index: node-v20.15.1/Makefile out/Release/cctest --gtest_output=xml:out/junit/cctest.xml $(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \ --mode=$(BUILDTYPE_LOWER) --flaky-tests=$(FLAKY_TESTS) \ -@@ -745,7 +745,8 @@ apidocs_json = $(addprefix out/,$(apidoc +@@ -750,7 +750,8 @@ apidocs_json = $(addprefix out/,$(apidoc apiassets = $(subst api_assets,api/assets,$(addprefix out/,$(wildcard doc/api_assets/*))) tools/doc/node_modules: tools/doc/package.json @@ -76,10 +76,10 @@ Index: node-v20.15.1/Makefile echo "Skipping tools/doc/node_modules (no crypto)"; \ else \ cd tools/doc && $(call available-node,$(run-npm-ci)) \ -Index: node-v20.15.1/tools/test.py +Index: node-v20.18.1/tools/test.py =================================================================== ---- node-v20.15.1.orig/tools/test.py -+++ node-v20.15.1/tools/test.py +--- node-v20.18.1.orig/tools/test.py ++++ node-v20.18.1/tools/test.py @@ -1386,7 +1386,7 @@ def BuildOptions(): result.add_option("-s", "--suite", help="A test suite", default=[], action="append") @@ -89,12 +89,12 @@ Index: node-v20.15.1/tools/test.py result.add_option("--arch", help='The architecture to run tests for', default='none') result.add_option("--snapshot", help="Run the tests with snapshot turned on", -Index: node-v20.15.1/test/parallel/test-crypto-dh.js +Index: node-v20.18.1/test/parallel/test-crypto-dh.js =================================================================== ---- node-v20.15.1.orig/test/parallel/test-crypto-dh.js -+++ node-v20.15.1/test/parallel/test-crypto-dh.js -@@ -90,9 +90,7 @@ const crypto = require('crypto'); - const hasOpenSSL3WithNewErrorMessage = (v >= 0x300000c0 && v <= 0x30100000) || (v >= 0x30100040 && v <= 0x30200000); +--- node-v20.18.1.orig/test/parallel/test-crypto-dh.js ++++ node-v20.18.1/test/parallel/test-crypto-dh.js +@@ -91,9 +91,7 @@ const crypto = require('crypto'); + (common.hasOpenSSL(3, 1, 4)); assert.throws(() => { dh3.computeSecret(''); - }, { message: common.hasOpenSSL3 && !hasOpenSSL3WithNewErrorMessage ? @@ -104,11 +104,11 @@ Index: node-v20.15.1/test/parallel/test-crypto-dh.js } } -Index: node-v20.15.1/test/parallel/test-node-output-errors.mjs +Index: node-v20.18.1/test/parallel/test-node-output-errors.mjs =================================================================== ---- node-v20.15.1.orig/test/parallel/test-node-output-errors.mjs -+++ node-v20.15.1/test/parallel/test-node-output-errors.mjs -@@ -28,6 +28,7 @@ describe('errors output', { concurrency: +--- node-v20.18.1.orig/test/parallel/test-node-output-errors.mjs ++++ node-v20.18.1/test/parallel/test-node-output-errors.mjs +@@ -26,6 +26,7 @@ describe('errors output', { concurrency: .replaceAll(/\/(\w)/g, '*$1') .replaceAll('*test*', '*') .replaceAll('*fixtures*errors*', '*') @@ -116,10 +116,10 @@ Index: node-v20.15.1/test/parallel/test-node-output-errors.mjs .replaceAll('file:**', 'file:*/'); } -Index: node-v20.15.1/test/parallel/test-crypto-fips.js +Index: node-v20.18.1/test/parallel/test-crypto-fips.js =================================================================== ---- node-v20.15.1.orig/test/parallel/test-crypto-fips.js -+++ node-v20.15.1/test/parallel/test-crypto-fips.js +--- node-v20.18.1.orig/test/parallel/test-crypto-fips.js ++++ node-v20.18.1/test/parallel/test-crypto-fips.js @@ -3,6 +3,8 @@ const common = require('../common'); if (!common.hasCrypto) @@ -129,10 +129,10 @@ Index: node-v20.15.1/test/parallel/test-crypto-fips.js const assert = require('assert'); const spawnSync = require('child_process').spawnSync; -Index: node-v20.15.1/test/parallel/test-node-output-v8-warning.mjs +Index: node-v20.18.1/test/parallel/test-node-output-v8-warning.mjs =================================================================== ---- node-v20.15.1.orig/test/parallel/test-node-output-v8-warning.mjs -+++ node-v20.15.1/test/parallel/test-node-output-v8-warning.mjs +--- node-v20.18.1.orig/test/parallel/test-node-output-v8-warning.mjs ++++ node-v20.18.1/test/parallel/test-node-output-v8-warning.mjs @@ -15,7 +15,7 @@ describe('v8 output', { concurrency: tru .replaceAll('*test*', '*') .replaceAll(/.*?\*fixtures\*v8\*/g, '(node:*) V8: *') // Replace entire path before fixtures/v8 @@ -142,3 +142,16 @@ Index: node-v20.15.1/test/parallel/test-node-output-v8-warning.mjs } const common = snapshot .transform(snapshot.replaceWindowsLineEndings, snapshot.replaceWindowsPaths, replaceNodeVersion); +Index: node-v22.12.0/test/parallel/test-dns.js +=================================================================== +--- node-v22.12.0.orig/test/parallel/test-dns.js ++++ node-v22.12.0/test/parallel/test-dns.js +@@ -403,7 +403,7 @@ assert.throws(() => { + + const server = dgram.createSocket('udp4'); + +- server.on('message', common.mustCall((msg, { address, port }) => { ++ server.on('message', common.mustCallAtLeast((msg, { address, port }) => { + const parsed = dnstools.parseDNSPacket(msg); + const domain = parsed.questions[0].domain; + assert.strictEqual(domain, 'example.org'); diff --git a/linker_lto_jobs.patch b/linker_lto_jobs.patch index 1d856f9..62519ca 100644 --- a/linker_lto_jobs.patch +++ b/linker_lto_jobs.patch @@ -3,11 +3,11 @@ is run serially over these binaries instead of in parallel. OBS workers run out of memory as each executable seems to require upward of 5G RAM -Index: node-v19.7.0/node.gyp +Index: node-v20.18.1/node.gyp =================================================================== ---- node-v19.7.0.orig/node.gyp -+++ node-v19.7.0/node.gyp -@@ -951,6 +951,7 @@ +--- node-v20.18.1.orig/node.gyp ++++ node-v20.18.1/node.gyp +@@ -1155,6 +1155,7 @@ 'deps/uvwasi/uvwasi.gyp:uvwasi', 'deps/simdutf/simdutf.gyp:simdutf', 'deps/ada/ada.gyp:ada', @@ -15,9 +15,9 @@ Index: node-v19.7.0/node.gyp ], 'includes': [ -@@ -1047,6 +1048,7 @@ +@@ -1229,6 +1230,7 @@ + '<(node_lib_target_name)', 'deps/histogram/histogram.gyp:histogram', - 'deps/uvwasi/uvwasi.gyp:uvwasi', 'deps/ada/ada.gyp:ada', + 'cctest' ], diff --git a/node-v20.15.1.tar.xz b/node-v20.15.1.tar.xz deleted file mode 100644 index f5dd34d..0000000 --- a/node-v20.15.1.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fdd53a5729d936691a2a1151046fb4897721cb8b0fca2af957823a9b40fe0c34 -size 41880412 diff --git a/node-v20.18.2.tar.xz b/node-v20.18.2.tar.xz new file mode 100644 index 0000000..71461f2 --- /dev/null +++ b/node-v20.18.2.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69bf81b70f3a95ae0763459f02860c282d7e3a47567c8afaf126cc778176a882 +size 41933624 diff --git a/nodejs.keyring b/nodejs.keyring index aa22d759f4a9b2e1eaed11180337d9a4d50f322a..19a640439793a6a0c0e2abc22305962bb88bdfbd 100644 GIT binary patch delta 4652 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 UD46~jo%%Ct9HI(@{QJ-SKN9C0MgRZ+ diff --git a/nodejs20.changes b/nodejs20.changes index 9e387dd..eb68597 100644 --- a/nodejs20.changes +++ b/nodejs20.changes @@ -1,3 +1,38 @@ +------------------------------------------------------------------- +Wed Jan 22 11:23:00 UTC 2025 - Adam Majer + +- Update to 20.18.2: + * src,loader,permission: throw on InternalWorker use when + permission model is enabled (bsc#1236251, CVE-2025-23083) + * src: fix HTTP2 mem leak on premature close and ERR_PROTO + (bsc#1236250, CVE-2025-23085) + * deps: Use of Insufficiently Random Values in undici fetch() + (bsc#1236258, CVE-2025-22150) + +------------------------------------------------------------------- +Wed Dec 4 16:32:55 UTC 2024 - Adam Majer + +- Update to 20.18.1 + * Experimental Network Inspection Support in Node.js + * Exposes X509_V_FLAG_PARTIAL_CHAIN to tls.createSecureContext + * New option for vm.createContext() to create a context with a + freezable globalThis + * buffer: optimize createFromString +- Changes in 20.17.0: + * module: support require()ing synchronous ESM graphs + * path: add matchesGlob method + * stream: expose DuplexPair API +- Changes in 20.16.0: + * process: add process.getBuiltinModule(id) + * inspector: fix disable async hooks on Debugger.setAsyncCallStackDepth + * buffer: add .bytes() method to Blob + +- CVE-2024-21538.patch: fixes regular expression denial of service + (bsc#1233856, CVE-2024-21538) +- linker_lto_jobs.patch: refreshed +- fix_ci_tests.patch: fix dns test vs. older c-ares +- nodejs.keyring: sync keys with upstream + ------------------------------------------------------------------- Fri Jul 12 13:21:02 UTC 2024 - Adam Majer diff --git a/nodejs20.spec b/nodejs20.spec index 24d885e..f09e53a 100644 --- a/nodejs20.spec +++ b/nodejs20.spec @@ -31,7 +31,7 @@ %endif Name: nodejs20 -Version: 20.15.1 +Version: 20.18.2 Release: 0 # Double DWZ memory limits @@ -152,6 +152,7 @@ Patch7: manual_configure.patch Patch13: openssl_binary_detection.patch +Patch82: CVE-2024-21538.patch ## Patches specific to SUSE and openSUSE Patch100: linker_lto_jobs.patch @@ -199,10 +200,10 @@ BuildRequires: config(netcfg) %if 0%{?suse_version} == 1110 # GCC 5 is only available in the SUSE:SLE-11:SP4:Update repository (SDK). %if %node_version_number >= 8 -BuildRequires: gcc5-c++ +BuildRequires: gcc5-c++ %define forced_gcc_version 5 %else -BuildRequires: gcc48-c++ +BuildRequires: gcc48-c++ %define forced_gcc_version 4.8 %endif %endif @@ -212,15 +213,15 @@ BuildRequires: gcc48-c++ # for SLE-12:Update targets %if 0%{?suse_version} == 1315 %if %node_version_number >= 17 -BuildRequires: gcc12-c++ +BuildRequires: gcc12-c++ %define forced_gcc_version 12 %else %if %node_version_number >= 14 -BuildRequires: gcc9-c++ +BuildRequires: gcc9-c++ %define forced_gcc_version 9 %else %if %node_version_number >= 8 -BuildRequires: gcc7-c++ +BuildRequires: gcc7-c++ %define forced_gcc_version 7 %endif %endif @@ -229,7 +230,7 @@ BuildRequires: gcc7-c++ %if 0%{?suse_version} == 1500 %if %node_version_number >= 17 -BuildRequires: gcc12-c++ +BuildRequires: gcc12-c++ %define forced_gcc_version 12 %endif %endif @@ -244,11 +245,19 @@ BuildRequires: gcc-c++ # Python dependencies %if %node_version_number >= 14 -%if 0%{?suse_version} && 0%{?suse_version} < 1500 +%if 0%{?suse_version} +%if 0%{?suse_version} < 1500 BuildRequires: python36 %define forced_python_version 3.6m -%else +%endif +%if %{?suse_version} == 1500 +BuildRequires: python311 +%define forced_python_version 3.11 +%endif +%if %{?suse_version} > 1500 BuildRequires: python3 +BuildRequires: python3-setuptools +%endif %endif %else @@ -297,7 +306,7 @@ BuildRequires: openssl >= %{openssl_req_ver} %else # bundled openssl %if %node_version_number <= 12 && 0%{?suse_version} == 1315 && 0%{?sle_version} < 120400 -Provides: bundled(openssl) = 3.0.13 +Provides: bundled(openssl) = 3.0.15 %else BuildRequires: bundled_openssl_should_not_be_required %endif @@ -308,7 +317,11 @@ BuildRequires: bundled_openssl_should_not_be_required %if ! 0%{with intree_cares} BuildRequires: pkgconfig(libcares) >= 1.17.0 %else -Provides: bundled(libcares2) = 1.28.1 +Provides: bundled(libcares2) = 1.33.1 +%endif + +%if %node_version_number >= 22 && 0%{?suse_version} > 1500 +BuildRequires: sqlite3-devel %endif %if ! 0%{with intree_icu} @@ -382,17 +395,17 @@ BuildRequires: pkgconfig(libbrotlidec) Provides: bundled(llhttp) = 8.1.2 Provides: bundled(ngtcp2) = 1.1.0 Provides: bundled(base64) = 0.5.2 -Provides: bundled(simdutf) = 5.2.8 +Provides: bundled(simdutf) = 5.5.0 # bundled url-ada parser, not ada -Provides: bundled(ada) = 2.7.8 +Provides: bundled(ada) = 2.9.0 -Provides: bundled(node-acorn) = 8.11.3 -Provides: bundled(node-acorn-walk) = 8.3.2 -Provides: bundled(node-cjs-module-lexer) = 1.2.2 -Provides: bundled(node-corepack) = 0.28.1 -Provides: bundled(node-minimatch) = 9.0.4 -Provides: bundled(node-undici) = 6.13.0 +Provides: bundled(node-acorn) = 8.12.1 +Provides: bundled(node-acorn-walk) = 8.3.4 +Provides: bundled(node-cjs-module-lexer) = 1.4.1 +Provides: bundled(node-corepack) = 0.29.4 +Provides: bundled(node-minimatch) = 10.0.1 +Provides: bundled(node-undici) = 6.21.1 %description Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js @@ -421,7 +434,7 @@ Requires: nodejs-common Requires: nodejs20 = %{version} Provides: nodejs-npm = %{version} Obsoletes: nodejs-npm < 4.0.0 -Provides: npm(npm) = 10.7.0 +Provides: npm(npm) = 10.8.2 Provides: npm = %{version} %if 0%{?suse_version} >= 1500 %if %{node_version_number} >= 10 @@ -439,24 +452,23 @@ Provides: bundled(node-ansi-styles) = 6.2.1 Provides: bundled(node-aproba) = 2.0.0 Provides: bundled(node-archy) = 1.0.0 Provides: bundled(node-balanced-match) = 1.0.2 -Provides: bundled(node-bin-links) = 4.0.3 +Provides: bundled(node-bin-links) = 4.0.4 Provides: bundled(node-binary-extensions) = 2.3.0 Provides: bundled(node-brace-expansion) = 2.0.1 -Provides: bundled(node-builtins) = 5.1.0 -Provides: bundled(node-cacache) = 18.0.2 +Provides: bundled(node-cacache) = 18.0.3 Provides: bundled(node-chalk) = 5.3.0 Provides: bundled(node-chownr) = 2.0.0 Provides: bundled(node-ci-info) = 4.0.0 -Provides: bundled(node-cidr-regex) = 4.0.5 +Provides: bundled(node-cidr-regex) = 4.1.1 Provides: bundled(node-clean-stack) = 2.2.0 Provides: bundled(node-cli-columns) = 4.0.0 -Provides: bundled(node-cmd-shim) = 6.0.2 +Provides: bundled(node-cmd-shim) = 6.0.3 Provides: bundled(node-color-convert) = 2.0.1 Provides: bundled(node-color-name) = 1.1.4 Provides: bundled(node-common-ancestor-path) = 1.0.1 Provides: bundled(node-cross-spawn) = 7.0.3 Provides: bundled(node-cssesc) = 3.0.0 -Provides: bundled(node-debug) = 4.3.4 +Provides: bundled(node-debug) = 4.3.5 Provides: bundled(node-diff) = 5.2.0 Provides: bundled(node-eastasianwidth) = 0.2.0 Provides: bundled(node-emoji-regex) = 8.0.0 @@ -466,60 +478,55 @@ Provides: bundled(node-env-paths) = 2.2.1 Provides: bundled(node-err-code) = 2.0.3 Provides: bundled(node-exponential-backoff) = 3.1.1 Provides: bundled(node-fastest-levenshtein) = 1.0.16 -Provides: bundled(node-foreground-child) = 3.1.1 +Provides: bundled(node-foreground-child) = 3.2.1 Provides: bundled(node-fs-minipass) = 2.1.0 Provides: bundled(node-fs-minipass) = 3.0.3 -Provides: bundled(node-function-bind) = 1.1.2 -Provides: bundled(node-glob) = 10.3.12 +Provides: bundled(node-glob) = 10.4.2 Provides: bundled(node-graceful-fs) = 4.2.11 -Provides: bundled(node-hasown) = 2.0.2 -Provides: bundled(node-hosted-git-info) = 7.0.1 +Provides: bundled(node-hosted-git-info) = 7.0.2 Provides: bundled(node-http-cache-semantics) = 4.1.1 Provides: bundled(node-http-proxy-agent) = 7.0.2 -Provides: bundled(node-https-proxy-agent) = 7.0.4 +Provides: bundled(node-https-proxy-agent) = 7.0.5 Provides: bundled(node-iconv-lite) = 0.6.3 -Provides: bundled(node-ignore-walk) = 6.0.4 +Provides: bundled(node-ignore-walk) = 6.0.5 Provides: bundled(node-imurmurhash) = 0.1.4 Provides: bundled(node-indent-string) = 4.0.0 -Provides: bundled(node-ini) = 4.1.2 -Provides: bundled(node-init-package-json) = 6.0.2 +Provides: bundled(node-ini) = 4.1.3 +Provides: bundled(node-init-package-json) = 6.0.3 Provides: bundled(node-ip-address) = 9.0.5 Provides: bundled(node-ip-regex) = 5.0.0 -Provides: bundled(node-is-cidr) = 5.0.5 -Provides: bundled(node-is-core-module) = 2.13.1 +Provides: bundled(node-is-cidr) = 5.1.0 Provides: bundled(node-is-fullwidth-code-point) = 3.0.0 Provides: bundled(node-is-lambda) = 1.0.1 Provides: bundled(node-isexe) = 2.0.0 Provides: bundled(node-isexe) = 3.1.1 -Provides: bundled(node-jackspeak) = 2.3.6 +Provides: bundled(node-jackspeak) = 3.4.0 Provides: bundled(node-jsbn) = 1.1.0 -Provides: bundled(node-json-parse-even-better-errors) = 3.0.1 +Provides: bundled(node-json-parse-even-better-errors) = 3.0.2 Provides: bundled(node-json-stringify-nice) = 1.1.4 Provides: bundled(node-jsonparse) = 1.3.1 Provides: bundled(node-just-diff) = 6.0.2 Provides: bundled(node-just-diff-apply) = 5.5.0 -Provides: bundled(node-libnpmaccess) = 8.0.5 -Provides: bundled(node-libnpmdiff) = 6.1.1 -Provides: bundled(node-libnpmexec) = 8.1.0 -Provides: bundled(node-libnpmfund) = 5.0.9 -Provides: bundled(node-libnpmhook) = 10.0.4 -Provides: bundled(node-libnpmorg) = 6.0.5 -Provides: bundled(node-libnpmpack) = 7.0.1 -Provides: bundled(node-libnpmpublish) = 9.0.7 -Provides: bundled(node-libnpmsearch) = 7.0.4 -Provides: bundled(node-libnpmteam) = 6.0.4 -Provides: bundled(node-libnpmversion) = 6.0.1 +Provides: bundled(node-libnpmaccess) = 8.0.6 +Provides: bundled(node-libnpmdiff) = 6.1.4 +Provides: bundled(node-libnpmexec) = 8.1.3 +Provides: bundled(node-libnpmfund) = 5.0.12 +Provides: bundled(node-libnpmhook) = 10.0.5 +Provides: bundled(node-libnpmorg) = 6.0.6 +Provides: bundled(node-libnpmpack) = 7.0.4 +Provides: bundled(node-libnpmpublish) = 9.0.9 +Provides: bundled(node-libnpmsearch) = 7.0.6 +Provides: bundled(node-libnpmteam) = 6.0.5 +Provides: bundled(node-libnpmversion) = 6.0.3 Provides: bundled(node-lru-cache) = 10.2.2 -Provides: bundled(node-lru-cache) = 6.0.0 Provides: bundled(node-make-fetch-happen) = 13.0.1 -Provides: bundled(node-minimatch) = 9.0.4 +Provides: bundled(node-minimatch) = 9.0.5 Provides: bundled(node-minipass) = 3.3.6 Provides: bundled(node-minipass) = 5.0.0 -Provides: bundled(node-minipass) = 7.0.4 +Provides: bundled(node-minipass) = 7.1.2 Provides: bundled(node-minipass-collect) = 2.0.1 -Provides: bundled(node-minipass-fetch) = 3.0.4 +Provides: bundled(node-minipass-fetch) = 3.0.5 Provides: bundled(node-minipass-flush) = 1.0.5 -Provides: bundled(node-minipass-json-stream) = 1.0.1 Provides: bundled(node-minipass-pipeline) = 1.2.4 Provides: bundled(node-minipass-sized) = 1.0.3 Provides: bundled(node-minizlib) = 2.1.2 @@ -529,24 +536,25 @@ Provides: bundled(node-ms) = 2.1.3 Provides: bundled(node-mute-stream) = 1.0.0 Provides: bundled(node-negotiator) = 0.6.3 Provides: bundled(node-node-gyp) = 10.1.0 -Provides: bundled(node-nopt) = 7.2.0 -Provides: bundled(node-normalize-package-data) = 6.0.0 +Provides: bundled(node-nopt) = 7.2.1 +Provides: bundled(node-normalize-package-data) = 6.0.2 Provides: bundled(node-npm-audit-report) = 5.0.0 -Provides: bundled(node-npm-bundled) = 3.0.0 +Provides: bundled(node-npm-bundled) = 3.0.1 Provides: bundled(node-npm-install-checks) = 6.3.0 Provides: bundled(node-npm-normalize-package-bin) = 3.0.1 Provides: bundled(node-npm-package-arg) = 11.0.2 Provides: bundled(node-npm-packlist) = 8.0.2 -Provides: bundled(node-npm-pick-manifest) = 9.0.0 -Provides: bundled(node-npm-profile) = 9.0.2 -Provides: bundled(node-npm-registry-fetch) = 17.0.0 -Provides: bundled(node-npm-user-validate) = 2.0.0 +Provides: bundled(node-npm-pick-manifest) = 9.1.0 +Provides: bundled(node-npm-profile) = 10.0.0 +Provides: bundled(node-npm-registry-fetch) = 17.1.0 +Provides: bundled(node-npm-user-validate) = 2.0.1 Provides: bundled(node-p-map) = 4.0.0 -Provides: bundled(node-pacote) = 18.0.3 +Provides: bundled(node-package-json-from-dist) = 1.0.0 +Provides: bundled(node-pacote) = 18.0.6 Provides: bundled(node-parse-conflict-json) = 3.0.1 Provides: bundled(node-path-key) = 3.1.1 -Provides: bundled(node-path-scurry) = 1.10.2 -Provides: bundled(node-postcss-selector-parser) = 6.0.16 +Provides: bundled(node-path-scurry) = 1.11.1 +Provides: bundled(node-postcss-selector-parser) = 6.1.0 Provides: bundled(node-proc-log) = 3.0.0 Provides: bundled(node-proc-log) = 4.2.0 Provides: bundled(node-proggy) = 2.0.0 @@ -554,28 +562,28 @@ Provides: bundled(node-promise-all-reject-late) = 1.0.1 Provides: bundled(node-promise-call-limit) = 3.0.1 Provides: bundled(node-promise-inflight) = 1.0.1 Provides: bundled(node-promise-retry) = 2.0.1 -Provides: bundled(node-promzard) = 1.0.1 +Provides: bundled(node-promzard) = 1.0.2 Provides: bundled(node-qrcode-terminal) = 0.12.0 Provides: bundled(node-read) = 3.0.1 Provides: bundled(node-read-cmd-shim) = 4.0.0 Provides: bundled(node-read-package-json-fast) = 3.0.2 Provides: bundled(node-retry) = 0.12.0 Provides: bundled(node-safer-buffer) = 2.1.2 -Provides: bundled(node-semver) = 7.6.0 +Provides: bundled(node-semver) = 7.6.2 Provides: bundled(node-shebang-command) = 2.0.0 Provides: bundled(node-shebang-regex) = 3.0.0 Provides: bundled(node-signal-exit) = 4.1.0 -Provides: bundled(node-sigstore) = 2.3.0 +Provides: bundled(node-sigstore) = 2.3.1 Provides: bundled(node-smart-buffer) = 4.2.0 Provides: bundled(node-socks) = 2.8.3 -Provides: bundled(node-socks-proxy-agent) = 8.0.3 +Provides: bundled(node-socks-proxy-agent) = 8.0.4 Provides: bundled(node-spdx-correct) = 3.2.0 Provides: bundled(node-spdx-exceptions) = 2.5.0 Provides: bundled(node-spdx-expression-parse) = 3.0.1 Provides: bundled(node-spdx-expression-parse) = 4.0.0 -Provides: bundled(node-spdx-license-ids) = 3.0.17 +Provides: bundled(node-spdx-license-ids) = 3.0.18 Provides: bundled(node-sprintf-js) = 1.1.3 -Provides: bundled(node-ssri) = 10.0.5 +Provides: bundled(node-ssri) = 10.0.6 Provides: bundled(node-string-width) = 4.2.3 Provides: bundled(node-string-width) = 5.1.2 Provides: bundled(node-strip-ansi) = 6.0.1 @@ -585,12 +593,12 @@ Provides: bundled(node-tar) = 6.2.1 Provides: bundled(node-text-table) = 0.2.0 Provides: bundled(node-tiny-relative-date) = 1.3.0 Provides: bundled(node-treeverse) = 3.0.0 -Provides: bundled(node-tuf-js) = 2.2.0 +Provides: bundled(node-tuf-js) = 2.2.1 Provides: bundled(node-unique-filename) = 3.0.0 Provides: bundled(node-unique-slug) = 4.0.0 Provides: bundled(node-util-deprecate) = 1.0.2 Provides: bundled(node-validate-npm-package-license) = 3.0.4 -Provides: bundled(node-validate-npm-package-name) = 5.0.0 +Provides: bundled(node-validate-npm-package-name) = 5.0.1 Provides: bundled(node-walk-up-path) = 3.0.1 Provides: bundled(node-which) = 2.0.2 Provides: bundled(node-which) = 4.0.0 @@ -673,6 +681,7 @@ popd %if 0%{with valgrind_tests} %endif %patch -P 13 -p1 +%patch -P 82 -p1 %patch -P 100 -p1 %patch -P 101 -p1 %if 0%{?suse_version} >= 1500 || 0%{?suse_version} == 0 @@ -789,6 +798,9 @@ EOF %if %{node_version_number} < 19 --without-dtrace \ %endif +%if %{node_version_number} >= 22 && 0%{?suse_version} > 1500 + --shared-sqlite \ +%endif %if %{node_version_number} >= 16 && (0%{?suse_version} > 1550 || 0%{?sle_version} >= 150400) --openssl-default-cipher-list=PROFILE=SYSTEM \ %endif @@ -929,6 +941,7 @@ rm test/parallel/test-strace-openat-openssl.js %if 0%{?forced_python_version:1} sed -i -e "s,'python3','python%{forced_python_version}'," test/parallel/test-child-process-set-blocking.js test -e tools/pseudo-tty.py && sed -i -e "s,^#!/usr/bin/env python3$,#!/usr/bin/python%{forced_python_version}," tools/pseudo-tty.py ||: +export PYTHON="/usr/bin/python%{forced_python_version}" %endif ln addon-rpm.gypi deps/npm/node_modules/node-gyp/addon-rpm.gypi @@ -943,6 +956,8 @@ rm test/parallel/test-dns-cancel-reverse-lookup.js \ test/parallel/test-dns-resolveany.js # multicast test fail since no socket? rm test/parallel/test-dgram-membership.js +# ::1 not defined in OBS on TW - https://github.com/openSUSE/obs-build/issues/848 +rm test/report/test-report-exclude-network.js %if %{node_version_number} >= 18 # OBS broken /etc/hosts -- https://github.com/openSUSE/open-build-service/issues/13104