Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package nodejs24 for openSUSE:Factory 
checked in at 2026-10-14 18:34:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/nodejs24 (Old)
 and      /work/SRC/openSUSE:Factory/.nodejs24.new.3698736 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "nodejs24"

Wed Oct 14 18:34:18 2026 rev:14 rq:1384624 version:24.21.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/nodejs24/nodejs24.changes        2026-08-03 
17:15:22.258704061 +0200
+++ /work/SRC/openSUSE:Factory/.nodejs24.new.3698736/nodejs24.changes   
2026-10-14 18:34:43.828883691 +0200
@@ -1,0 +2,67 @@
+Mon Oct 12 08:16:37 UTC 2026 - Adam Majer <[email protected]>
+
+- Update to 24.21.0:
+ - crypto: update root certificates to NSS 3.126
+ - crypto: support loading private keys through STORE loaders
+ - deps: update Undici to 7.29.1
+ - lib,src: improve histogram implementation
+ - net: improve performance of net.BlockList
+ - perf_hooks: add statistical hypothesis testing to histogram
+ - util: add non-throwing MIMEType.parse
+for details see https://nodejs.org/en/blog/release/v24.21.0
+
+- fix_ci_tests.patch: refreshed
+- no_avx2_on_i586.patch: remove AVX2 from i586
+
+-------------------------------------------------------------------
+Fri Sep  4 13:55:24 UTC 2026 - Adam Majer <[email protected]>
+
+- Update to 24.20.0:
+  - async_hooks: add using scopes to AsyncLocalStorage
+  - buffer: add end parameter
+  - doc: add MikeMcC399 as collaborator
+  - lib,permission: add permission.drop
+  - loader: implement package maps
+  - src,permission: add --permission-audit
+  - stream: add node:stream/iter implementation
+  - test_runner: add context.log() and test:log event
+  - test_runner: report entryFile in TestStream events
+  - wasm: enable JSPI
+for details see https://github.com/nodejs/node/releases#release-v24.20.0
+
+- ngtcp2_bsc1262274.patch: dropped, upstreamed
+
+-------------------------------------------------------------------
+Tue Aug 25 10:39:43 UTC 2026 - Adam Majer <[email protected]>
+
+- npm-line-truncation.patch: do not truncate long lines in help output 
(bsc#1276224)
+
+-------------------------------------------------------------------
+Mon Aug  3 14:12:24 UTC 2026 - Adam Majer <[email protected]>
+
+- Update to 24.19.0:
+  - buffer: implement blob.textStream()
+  - deps: update OpenSSL build config to support compression
+  - doc: update blockList stability status to release candidate
+  - doc: mark stream.compose stable
+  - esm: add --experimental-import-text flag
+  - fs: support caller-supplied readFile() buffers
+  - http: add httpValidation option to configure header value validation
+  - net: support TCP_KEEPINTVL and TCP_KEEPCNT in setKeepAlive
+  - perf_hooks: sample delay per event loop iteration
+  - src: allow empty --experimental-config-file
+  - stream: expose ReadableStreamTee
+  - tls: report negotiated TLS groups
+  - tls: add certificateCompression option
+
+- pacote-bsc1266318.patch: upstreamed, dropped
+- versioned.patch: refreshed
+
+For detailed changes, see 
https://github.com/nodejs/node/releases#release-v24.19.0
+
+-------------------------------------------------------------------
+Mon Aug  3 13:04:54 UTC 2026 - Adam Majer <[email protected]>
+
+- CVE-2026-54272: ip-address.patch: misclassification of IPv4-mapped/NAT64 
IPv6 addresses allows for bypass of SSRF and trust-boundary checks (bsc#1272882)
+
+-------------------------------------------------------------------

Old:
----
  ngtcp2_bsc1262274.patch
  node-v24.18.1.tar.xz
  pacote-bsc1266318.patch

New:
----
  ip-address.patch
  maintainer_scripts.obscpio
  no_avx2_on_i586.patch
  node-v24.21.0.tar.xz
  npm-line-truncation.patch

----------(Old B)----------
  Old:
- ngtcp2_bsc1262274.patch: dropped, upstreamed
  Old:
- pacote-bsc1266318.patch: upstreamed, dropped
- versioned.patch: refreshed
----------(Old E)----------

----------(New B)----------
  New:
- CVE-2026-54272: ip-address.patch: misclassification of IPv4-mapped/NAT64 IPv6 
addresses allows for bypass of SSRF and trust-boundary checks (bsc#1272882)
  New:- fix_ci_tests.patch: refreshed
- no_avx2_on_i586.patch: remove AVX2 from i586
  New:
- npm-line-truncation.patch: do not truncate long lines in help output 
(bsc#1276224)
----------(New E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ nodejs24.spec ++++++
--- /var/tmp/diff_new_pack.videOI/_old  2026-10-14 18:34:46.827010646 +0200
+++ /var/tmp/diff_new_pack.videOI/_new  2026-10-14 18:34:46.829010730 +0200
@@ -25,7 +25,7 @@
 %endif
 
 Name:           nodejs24
-Version:        24.18.1
+Version:        24.21.0
 Release:        0
 
 # Double DWZ memory limits
@@ -128,6 +128,9 @@
 Source2:        https://nodejs.org/dist/v%{version}/SHASUMS256.txt.sig
 Source3:        nodejs.keyring
 
+#!CreateArchive
+Source4:        maintainer_scripts.tar.gz
+
 # Only required to run unit tests in NodeJS 10+ 
 Source10:       update_npm_tarball.sh 
 Source11:       node_modules.tar.xz
@@ -135,12 +138,11 @@
 Source21:       README.md
 
 ## Patches not distribution specific
+Patch1:         npm-line-truncation.patch
 Patch3:         fix_ci_tests.patch
 Patch4:         v8_nameclash.patch
 Patch5:         icu_781.patch
-
-Patch10:        ngtcp2_bsc1262274.patch
-Patch11:        pacote-bsc1266318.patch
+Patch6:         no_avx2_on_i586.patch
 
 ## Patches specific to SUSE and openSUSE
 # PATCH-FIX-OPENSUSE -- set correct path for dtrace if it is built
@@ -155,6 +157,7 @@
 Patch104:       npm_search_paths.patch
 
 Patch120:       flaky_test_rerun.patch
+Patch121:       ip-address.patch
 
 # Use versioned binaries and paths
 Patch200:       versioned.patch
@@ -231,7 +234,7 @@
 %else
 # bundled openssl
 %if %node_version_number <= 12 && 0%{?suse_version} == 1315 && 
0%{?sle_version} < 120400
-Provides:       bundled(openssl) = 3.5.7
+Provides:       bundled(openssl) = 3.5.8
 %else
 BuildRequires:  bundled_openssl_should_not_be_required
 %endif
@@ -242,7 +245,7 @@
 %if ! 0%{with intree_cares}
 BuildRequires:  pkgconfig(libcares) >= 1.17.0
 %else
-Provides:       bundled(libcares2) = 1.34.6
+Provides:       bundled(libcares2) = 1.34.8
 %endif
 
 %if %node_version_number >= 22
@@ -261,7 +264,7 @@
 %if ! 0%{with intree_nghttp2}
 BuildRequires:  libnghttp2-devel >= 1.41.0
 %else
-Provides:       bundled(nghttp2) = 1.69.0
+Provides:       bundled(nghttp2) = 1.70.0
 %endif
 
 %if 0%{with valgrind_tests}
@@ -320,18 +323,19 @@
 
 # bundled url-ada parser, not ada
 Provides:       bundled(LIEF) = 0.17.0
-Provides:       bundled(ada) = 3.4.4
+Provides:       bundled(ada) = 4.0.0
 Provides:       bundled(libuv) = 1.52.1
 Provides:       bundled(llhttp) = 9.4.3
 Provides:       bundled(merve) = 1.2.2
-Provides:       bundled(ngtcp2) = 1.15.1
-Provides:       bundled(node-acorn) = 8.16.0
+Provides:       bundled(nghttp3) = 1.18.0
+Provides:       bundled(ngtcp2) = 1.25.0
+Provides:       bundled(node-acorn) = 8.18.0
 Provides:       bundled(node-acorn-walk) = 8.3.5
-Provides:       bundled(node-amaro) = 1.1.9
-Provides:       bundled(node-corepack) = 0.35.0
-Provides:       bundled(node-minimatch) = 10.2.5
-Provides:       bundled(node-undici) = 7.29.0
-Provides:       bundled(simdjson) = 4.6.4
+Provides:       bundled(node-amaro) = 1.1.11
+Provides:       bundled(node-corepack) = 0.36.0
+Provides:       bundled(node-minimatch) = 10.2.6
+Provides:       bundled(node-undici) = 7.29.1
+Provides:       bundled(simdjson) = 4.6.7
 Provides:       bundled(uvwasi) = 0.0.23
 Provides:       bundled(v8) = 13.6.233.17
 ## END NON-NPM PROVIDES ##
@@ -380,7 +384,7 @@
 Provides:       bundled(node-balanced-match) = 4.0.4
 Provides:       bundled(node-bin-links) = 6.0.2
 Provides:       bundled(node-binary-extensions) = 3.1.0
-Provides:       bundled(node-brace-expansion) = 5.0.6
+Provides:       bundled(node-brace-expansion) = 5.0.7
 Provides:       bundled(node-cacache) = 20.0.4
 Provides:       bundled(node-chalk) = 5.6.2
 Provides:       bundled(node-chownr) = 3.0.0
@@ -415,11 +419,11 @@
 Provides:       bundled(node-just-diff) = 6.0.2
 Provides:       bundled(node-just-diff-apply) = 5.5.0
 Provides:       bundled(node-libnpmaccess) = 10.0.3
-Provides:       bundled(node-libnpmdiff) = 8.1.9
-Provides:       bundled(node-libnpmexec) = 10.2.9
-Provides:       bundled(node-libnpmfund) = 7.0.23
+Provides:       bundled(node-libnpmdiff) = 8.1.12
+Provides:       bundled(node-libnpmexec) = 10.3.2
+Provides:       bundled(node-libnpmfund) = 7.0.26
 Provides:       bundled(node-libnpmorg) = 8.0.1
-Provides:       bundled(node-libnpmpack) = 9.1.9
+Provides:       bundled(node-libnpmpack) = 9.1.12
 Provides:       bundled(node-libnpmpublish) = 11.2.0
 Provides:       bundled(node-libnpmsearch) = 9.0.1
 Provides:       bundled(node-libnpmteam) = 8.0.2
@@ -438,7 +442,7 @@
 Provides:       bundled(node-ms) = 2.1.3
 Provides:       bundled(node-mute-stream) = 3.0.0
 Provides:       bundled(node-negotiator) = 1.0.0
-Provides:       bundled(node-node-gyp) = 12.3.0
+Provides:       bundled(node-node-gyp) = 12.4.0
 Provides:       bundled(node-nopt) = 9.0.0
 Provides:       bundled(node-npm-audit-report) = 7.0.0
 Provides:       bundled(node-npm-bundled) = 5.0.0
@@ -447,15 +451,15 @@
 Provides:       bundled(node-npm-package-arg) = 13.0.2
 Provides:       bundled(node-npm-packlist) = 10.0.4
 Provides:       bundled(node-npm-pick-manifest) = 11.0.3
-Provides:       bundled(node-npm-profile) = 12.0.1
+Provides:       bundled(node-npm-profile) = 12.0.2
 Provides:       bundled(node-npm-registry-fetch) = 19.1.1
 Provides:       bundled(node-npm-user-validate) = 4.0.0
 Provides:       bundled(node-p-map) = 7.0.4
-Provides:       bundled(node-pacote) = 21.5.0
+Provides:       bundled(node-pacote) = 21.5.1
 Provides:       bundled(node-parse-conflict-json) = 5.0.1
 Provides:       bundled(node-path-scurry) = 2.0.2
 Provides:       bundled(node-picomatch) = 4.0.4
-Provides:       bundled(node-postcss-selector-parser) = 7.1.1
+Provides:       bundled(node-postcss-selector-parser) = 7.1.4
 Provides:       bundled(node-proc-log) = 6.1.0
 Provides:       bundled(node-proggy) = 4.0.0
 Provides:       bundled(node-promise-all-reject-late) = 1.0.1
@@ -465,7 +469,7 @@
 Provides:       bundled(node-read) = 5.0.1
 Provides:       bundled(node-read-cmd-shim) = 6.0.0
 Provides:       bundled(node-safer-buffer) = 2.1.2
-Provides:       bundled(node-semver) = 7.8.1
+Provides:       bundled(node-semver) = 7.8.5
 Provides:       bundled(node-signal-exit) = 4.1.0
 Provides:       bundled(node-sigstore) = 4.1.1
 Provides:       bundled(node-smart-buffer) = 4.2.0
@@ -476,13 +480,13 @@
 Provides:       bundled(node-spdx-license-ids) = 3.0.23
 Provides:       bundled(node-ssri) = 13.0.1
 Provides:       bundled(node-supports-color) = 10.2.2
-Provides:       bundled(node-tar) = 7.5.15
+Provides:       bundled(node-tar) = 7.5.19
 Provides:       bundled(node-text-table) = 0.2.0
 Provides:       bundled(node-tiny-relative-date) = 2.0.2
-Provides:       bundled(node-tinyglobby) = 0.2.16
+Provides:       bundled(node-tinyglobby) = 0.2.17
 Provides:       bundled(node-treeverse) = 3.0.0
 Provides:       bundled(node-tuf-js) = 4.1.0
-Provides:       bundled(node-undici) = 6.26.0
+Provides:       bundled(node-undici) = 6.27.0
 Provides:       bundled(node-util-deprecate) = 1.0.2
 Provides:       bundled(node-validate-npm-package-name) = 7.0.2
 Provides:       bundled(node-walk-up-path) = 4.0.0

++++++ SHASUMS256.txt ++++++
--- /var/tmp/diff_new_pack.videOI/_old  2026-10-14 18:34:46.882012975 +0200
+++ /var/tmp/diff_new_pack.videOI/_new  2026-10-14 18:34:46.887013187 +0200
@@ -1,33 +1,35 @@
-3c76240c07b9f03574a5cf8ed8ba19e8db89271943817b1a4b94de43c97a9e66  
node-v24.18.1-aix-ppc64.tar.gz
-c3897213475a089b526c8ffb5a84b0151d03eb2206d3e38aac44b2c053719b81  
node-v24.18.1-arm64.msi
-eb02f7fab96d3d67de40c5ec8566096fcb4c2026728787683ae5a97eb612b941  
node-v24.18.1-darwin-arm64.tar.gz
-1d60b703fe5d7e7072489be8187f430f1a095a658c31e5e1e281331a5873fac3  
node-v24.18.1-darwin-arm64.tar.xz
-6fb20fceacbb157c2f95825b80df4a454a0f6d81cdcd7bb81eeae9147e0e76ec  
node-v24.18.1-darwin-x64.tar.gz
-f892c7895720f40d3750bde24f3554242d36f23602b5167b5b73ec4d13938aef  
node-v24.18.1-darwin-x64.tar.xz
-bee7344a7fc6e3252c4822ca916a50cd6ddda9bb39374d6140a8046d9238fded  
node-v24.18.1-headers.tar.gz
-38d44792ec2bee82aca52dbe166979a146f5e75e09ee35e0c0b017b8e2db7c48  
node-v24.18.1-headers.tar.xz
-df224555a083b918e46260cc969838501b9f9a87140c1195e5b9597b56d5dae2  
node-v24.18.1-linux-arm64.tar.gz
-7201e3a09dc825bac57867c81913e2b8f0ef87d04cb9082af4cda82f6ff3d88c  
node-v24.18.1-linux-arm64.tar.xz
-4a8c6209ba3a5aea84c40201d896624ed706b9799a6dc54cbd965433a369a3d0  
node-v24.18.1-linux-ppc64le.tar.gz
-c47812c13862be7f6e71194c434c4d78a99096e72efb9c31a2627437e056d669  
node-v24.18.1-linux-ppc64le.tar.xz
-62ad850efefa9ab42a3e901d8e0de86d71bf9c8a0c389dabed248f1ec9590c5a  
node-v24.18.1-linux-s390x.tar.gz
-acf57bd726f35afc2ba8475194e5a8bd532c00e1a3b2436295b2fbdde199d0e9  
node-v24.18.1-linux-s390x.tar.xz
-9f5eb6ac21845a66c493c91a253b1da32fd684e89e9b7202d4936982336be4ca  
node-v24.18.1-linux-x64.tar.gz
-d6c664df3f3f61458e8c277585571328522d705166723a7c7823a9253a4d15a0  
node-v24.18.1-linux-x64.tar.xz
-c2e424f198dab39b5c68e8b06e0cdba9761dca9b5b432941fce6399d6460dabb  
node-v24.18.1.pkg
-b62cd76de0a0a28dd9ff88580c92344bdeb008f21c1d7479c5d8659cd96ef4e2  
node-v24.18.1.tar.gz
-86d40d594bbdfcf69009a62fdf43cb19ae72b6cb5822d2bdd8349c5a1b2fa628  
node-v24.18.1.tar.xz
-8aed98bca9260716236be292807dcb2638827750ba2fbcfc684601a9a6b8ab48  
node-v24.18.1-win-arm64.7z
-ffbc7d3e1baf6804f7431ff94f19b9a885a650568c93ea4ccb1bb0038f6af825  
node-v24.18.1-win-arm64.zip
-365ecf84eeefb87a5a4c94f1e54919696cf5581285db4e589e84d46c0e167406  
node-v24.18.1-win-x64.7z
-ec56b84a7551893ab2324ebdfdc4ab974a63b4781162600b68a1293cc3e53765  
node-v24.18.1-win-x64.zip
-af4a0651a26f04ac240f00fec872f305547ca2aa56301c41dfd63a29eb2ab836  
node-v24.18.1-x64.msi
-845fc4ce00780241667f92e8f7a3a679321a655dddb3b610f2d85693b17ddf28  
win-arm64/node.exe
-7da03c5111815b69bbe63ffd2e51b28cd69eec9f545b7ccb8756efffdbb88dc2  
win-arm64/node.lib
-86a5fa89be9c19be42864edfbc2721931fa3c5b318c0f5cd7c1b5c0f49c1f259  
win-arm64/node_pdb.7z
-0e085f6058961484fb7e93a35ccd0b1ff02efed7bfe1387203097614dc9864a2  
win-arm64/node_pdb.zip
-ac51903c4c111815d52280b1fdcc8da067cbb37e2fe1a765097b85c3292c8582  
win-x64/node.exe
-589684168a73547ca47cd22d76a4e465ef561abe89fb1b2b23fe35bbe857d505  
win-x64/node.lib
-50155c3c9afe1c3ce9a57a8763ed421acc72845c2d30f79d93afe73cb65473ef  
win-x64/node_pdb.7z
-a9970c87747af4ef15524240dc28ebcf64080c7a68e39d2a406b743e438b6a20  
win-x64/node_pdb.zip
+aec7b2464afb99f078c19cb06d201d543bd3b311cba071282bce1b17c97e58bb  
node-v24.21.0-aix-ppc64.tar.gz
+22ca85110f26015696a3fa9216bc372ae65203d170622eaf7d211e2dd5bb49e3  
node-v24.21.0-arm64.msi
+bed7eea5325e1108f32ce5228ddd6a5f0f08a499ee42aa7442aea583702f6057  
node-v24.21.0-darwin-arm64.tar.gz
+6239d4cf92d864487ec8cd3615038f7b67e7f58b77b21cd2f09ea9fbd68065fe  
node-v24.21.0-darwin-arm64.tar.xz
+1462cb3b3046b815cf8ea436d3da450ec1a9f11dac7e5a46b0ada5305d7e8097  
node-v24.21.0-darwin-x64.tar.gz
+0ae5a24c24bb7d015cd816c5036b3f90f2945aa872fcf54e58da054753b3a299  
node-v24.21.0-darwin-x64.tar.xz
+57c6bee2e30bbbee5bd51d6cc343eb992e174b56a2a1d0eab7a7510771c20ea2  
node-v24.21.0-headers.tar.gz
+7497abc2fac1d332fae580046b6b39d0de283dfaf267207a32b59753739c1517  
node-v24.21.0-headers.tar.xz
+724282c3b43aec998aa9527380465b45d229e021b58035f5f4f63095eabfe5d5  
node-v24.21.0-linux-arm64.tar.gz
+6ad1325edbdb5649c379b75a237147a666c95d4f9ae8d340fef2d1575d289ad2  
node-v24.21.0-linux-arm64.tar.xz
+51c5d53066ee92920b61783b03b06ecb99f3661160f7b15ca77e8474115a67bc  
node-v24.21.0-linux-ppc64le.tar.gz
+1936fd64623a2f98d1fb31b456686d10c30e92639899cfefdefa8835d22adccd  
node-v24.21.0-linux-ppc64le.tar.xz
+5f2fa37422e0c75de35c1686fe51d78324f2c2a8fe2cc239a41d9c000a29d938  
node-v24.21.0-linux-s390x.tar.gz
+2ef7e2ecbf7a6c2f3d08d106f6b2f279419c6dac89fe91b8cad193af7890082c  
node-v24.21.0-linux-s390x.tar.xz
+3d63405fc65a0d2d2976c1f0bc2fd27bb0bd07212469e705aac3f03ae5ab4c9c  
node-v24.21.0-linux-x64-musl.tar.gz
+34ab095af8efe9018f21489d3dc19871fb5edd4f130a71469b69c05fd4e32a5e  
node-v24.21.0-linux-x64-musl.tar.xz
+6e1db87ef58b8819e5d5402eff1536491b18edd8eb7bee5ef7897876e88dc5ff  
node-v24.21.0-linux-x64.tar.gz
+fd8e59d5a511510f6a298afb548f18c7d2b1be404d8b4a27d94fbe49f56cb2d6  
node-v24.21.0-linux-x64.tar.xz
+848cc8d138b712b5ae0f38de08fde62feb404226a63dde07d0ea5ccddbbd9dd7  
node-v24.21.0-win-arm64.7z
+8779b1bde1d39f8d420e3b57aa657b39891af434d3de44a919044cec06785921  
node-v24.21.0-win-arm64.zip
+4e5f86609712acf841f3a5e2d9d4854b4c149f6ead024fc38381b6d7b272c636  
node-v24.21.0-win-x64.7z
+158f7685b44de51f6c0df1d153526cbcd3e1bc739a8dfc607721cef75de9e541  
node-v24.21.0-win-x64.zip
+bb0eaee134f9357f22aea915ee793343e627aefc1e66488164bac6915bce2cac  
node-v24.21.0-x64.msi
+9831a74b04c270a429bd5a240e37712c4fe229b02b032e18ff2e0702c17c20fd  
node-v24.21.0.pkg
+622424efb5dc0c26c93fbb619ff10737ee289c605b837c88778e186925d82777  
node-v24.21.0.tar.gz
+a6f54defb6fd7c84f41dba13d61e78e9b4e0961712cf61f29715c05f5ced94fc  
node-v24.21.0.tar.xz
+dff59da18b6ffe1bf1ca99e1d2af4906080c481740619f5b5098c0fca28bd9b7  
win-arm64/node.exe
+2c0c3215d59c09d7c136da4949696dae121a299e9bdfc64cd9130a58610af63d  
win-arm64/node.lib
+32ce76dd79deddcf6e08f612da714fc3a28fa39c0e4fe12283e019a90eb76483  
win-arm64/node_pdb.7z
+d565f0a7a8eda1662886475471e454dbe2c2a53c9d1a8562fc986bd11c24fd72  
win-arm64/node_pdb.zip
+ba4e6d110e8c1592a1ecd390f6b05f3da124b13871a5be62b341a07a853c6c32  
win-x64/node.exe
+a0a84aa03917b578d286010b7521837e9ff1136ffb2e4a406c14316c33fd06f7  
win-x64/node.lib
+0df783d02aee58bbe9dcfc157ccc5cc37987d24c4f35889587b39500b12030a9  
win-x64/node_pdb.7z
+122f2af58bfb25816f12e49179217c3ff5bf96c1e083f3ccb0969a5b4794ff85  
win-x64/node_pdb.zip
 

++++++ SHASUMS256.txt.sig ++++++
Binary files /var/tmp/diff_new_pack.videOI/_old and 
/var/tmp/diff_new_pack.videOI/_new differ

++++++ _scmsync.obsinfo ++++++
--- /var/tmp/diff_new_pack.videOI/_old  2026-10-14 18:34:46.938015346 +0200
+++ /var/tmp/diff_new_pack.videOI/_new  2026-10-14 18:34:46.941015473 +0200
@@ -1,6 +1,6 @@
-mtime: 1785512891
-commit: 13cc50d4f1d4748452df7efe3582b90d05292968f5395b25cbbd47c94a879d74
+mtime: 1791803316
+commit: e754c029e3174151bcbfaff7d4ff7b6c3eec5e546f2aa734c3fd011d92a572d5
 url: https://src.opensuse.org/nodejs/nodejs24
-revision: 13cc50d4f1d4748452df7efe3582b90d05292968f5395b25cbbd47c94a879d74
+revision: e754c029e3174151bcbfaff7d4ff7b6c3eec5e546f2aa734c3fd011d92a572d5
 projectscmsync: https://src.opensuse.org/nodejs/_ObsPrj.git
 

++++++ build.specials.obscpio ++++++

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-10-12 13:08:36.000000000 +0200
@@ -0,0 +1,4 @@
+*.obscpio
+*.osc
+_build.*
+.pbuild
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/update_npm_tarball.sh new/update_npm_tarball.sh
--- old/update_npm_tarball.sh   1970-01-01 01:00:00.000000000 +0100
+++ new/update_npm_tarball.sh   2026-10-12 13:08:36.000000000 +0200
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+#
+# Fetch npm module tarball that is required to run unit tests
+# which are not provided by upstream tarball
+#
+set -e
+
+tar Jxf node-v*.tar.xz
+cd node-v*/tools/doc
+npm ci
+cd ../..
+exec tar Jcf ../node_modules.tar.xz tools/doc/node_modules

++++++ fix_ci_tests.patch ++++++
--- /var/tmp/diff_new_pack.videOI/_old  2026-10-14 18:34:47.086021613 +0200
+++ /var/tmp/diff_new_pack.videOI/_new  2026-10-14 18:34:47.089021740 +0200
@@ -2,8 +2,10 @@
 Date: Dec 20 09:18:49 UTC 2017
 Summary: Fix CI unit tests framework for OBS building
 
---- a/test/parallel/test-module-loading-globalpaths.js
-+++ b/test/parallel/test-module-loading-globalpaths.js
+Index: node-v24.21.0/test/parallel/test-module-loading-globalpaths.js
+===================================================================
+--- node-v24.21.0.orig/test/parallel/test-module-loading-globalpaths.js
++++ node-v24.21.0/test/parallel/test-module-loading-globalpaths.js
 @@ -11,6 +11,9 @@ const { addLibraryPath } = require('../c
  
  addLibraryPath(process.env);
@@ -14,8 +16,10 @@
  if (process.argv[2] === 'child') {
    console.log(require(pkgName).string);
  } else {
---- a/test/parallel/test-tls-passphrase.js
-+++ b/test/parallel/test-tls-passphrase.js
+Index: node-v24.21.0/test/parallel/test-tls-passphrase.js
+===================================================================
+--- node-v24.21.0.orig/test/parallel/test-tls-passphrase.js
++++ node-v24.21.0/test/parallel/test-tls-passphrase.js
 @@ -223,7 +223,7 @@ server.listen(0, common.mustCall(functio
    }, onSecureConnect());
  })).unref();
@@ -25,8 +29,10 @@
  
  // Missing passphrase
  assert.throws(function() {
---- a/test/parallel/test-repl-envvars.js
-+++ b/test/parallel/test-repl-envvars.js
+Index: node-v24.21.0/test/parallel/test-repl-envvars.js
+===================================================================
+--- node-v24.21.0.orig/test/parallel/test-repl-envvars.js
++++ node-v24.21.0/test/parallel/test-repl-envvars.js
 @@ -3,6 +3,8 @@
  // Flags: --expose-internals
  
@@ -36,8 +42,10 @@
  const stream = require('stream');
  const { describe, test } = require('node:test');
  const REPL = require('internal/repl');
---- a/Makefile
-+++ b/Makefile
+Index: node-v24.21.0/Makefile
+===================================================================
+--- node-v24.21.0.orig/Makefile
++++ node-v24.21.0/Makefile
 @@ -406,7 +406,6 @@ ADDONS_HEADERS_PREREQS := tools/install.
        $(wildcard deps/uv/include/*/*.h) \
        $(wildcard deps/v8/include/*.h) \
@@ -64,8 +72,10 @@
                echo "Skipping tools/doc/node_modules (no crypto and/or no 
ICU)"; \
        else \
                cd tools/doc && $(call available-node,$(run-npm-ci)) \
---- a/tools/test.py
-+++ b/tools/test.py
+Index: node-v24.21.0/tools/test.py
+===================================================================
+--- node-v24.21.0.orig/tools/test.py
++++ node-v24.21.0/tools/test.py
 @@ -1399,7 +1399,7 @@ def BuildOptions():
    result.add_argument("-s", "--suite", help="A test suite",
        default=[], action="append")
@@ -75,20 +85,24 @@
    result.add_argument("--arch", help='The architecture to run tests for',
        default='none')
    result.add_argument("--snapshot", help="Run the tests with snapshot turned 
on",
---- a/test/parallel/test-crypto-dh.js
-+++ b/test/parallel/test-crypto-dh.js
-@@ -93,7 +93,7 @@ const {
+Index: node-v24.21.0/test/parallel/test-crypto-dh.js
+===================================================================
+--- node-v24.21.0.orig/test/parallel/test-crypto-dh.js
++++ node-v24.21.0/test/parallel/test-crypto-dh.js
+@@ -91,7 +91,7 @@ const {
+   {
+     assert.throws(() => {
        dh3.computeSecret('');
-     }, { message: process.features.openssl_is_boringssl ?
-       'Supplied key is invalid' :
--      'Supplied key is too small' });
-+      /Supplied key is too small|invalid public key/ });
+-    }, { message: 'Supplied key is too small' });
++    }, { message: /Supplied key is too small|invalid public key/ });
    }
  }
  
---- a/test/parallel/test-dns.js
-+++ b/test/parallel/test-dns.js
-@@ -401,7 +401,7 @@ assert.throws(() => {
+Index: node-v24.21.0/test/parallel/test-dns.js
+===================================================================
+--- node-v24.21.0.orig/test/parallel/test-dns.js
++++ node-v24.21.0/test/parallel/test-dns.js
+@@ -439,7 +439,7 @@ assert.throws(() => {
  
    const server = dgram.createSocket('udp4');
  
@@ -97,8 +111,10 @@
      const parsed = dnstools.parseDNSPacket(msg);
      const domain = parsed.questions[0].domain;
      assert.strictEqual(domain, 'example.org');
---- a/test/wpt/test-webcrypto.js
-+++ b/test/wpt/test-webcrypto.js
+Index: node-v24.21.0/test/wpt/test-webcrypto.js
+===================================================================
+--- node-v24.21.0.orig/test/wpt/test-webcrypto.js
++++ node-v24.21.0/test/wpt/test-webcrypto.js
 @@ -1,7 +1,8 @@
  'use strict';
  
@@ -109,8 +125,10 @@
    common.skip('missing crypto');
  
  const { WPTRunner } = require('../common/wpt');
---- a/test/parallel/test-sqlite.js
-+++ b/test/parallel/test-sqlite.js
+Index: node-v24.21.0/test/parallel/test-sqlite.js
+===================================================================
+--- node-v24.21.0.orig/test/parallel/test-sqlite.js
++++ node-v24.21.0/test/parallel/test-sqlite.js
 @@ -243,6 +243,7 @@ suite('SQL APIs enabled at build time',
    });
  
@@ -135,8 +153,10 @@
      const db = new DatabaseSync(':memory:');
      db.exec(`
        CREATE VIRTUAL TABLE t1 USING geopoly(a,b,c);
---- a/test/parallel/test-internal-util-construct-sab.js
-+++ b/test/parallel/test-internal-util-construct-sab.js
+Index: node-v24.21.0/test/parallel/test-internal-util-construct-sab.js
+===================================================================
+--- node-v24.21.0.orig/test/parallel/test-internal-util-construct-sab.js
++++ node-v24.21.0/test/parallel/test-internal-util-construct-sab.js
 @@ -1,7 +1,6 @@
  // Flags: --enable-sharedarraybuffer-per-context --expose-internals
  'use strict';
@@ -145,9 +165,11 @@
  const assert = require('assert');
  const { kMaxLength } = require('buffer');
  const { isSharedArrayBuffer } = require('util/types');
---- a/test/common/index.js
-+++ b/test/common/index.js
-@@ -925,6 +925,7 @@ function sleepSync(ms) {
+Index: node-v24.21.0/test/common/index.js
+===================================================================
+--- node-v24.21.0.orig/test/common/index.js
++++ node-v24.21.0/test/common/index.js
+@@ -956,6 +956,7 @@ function resolveBuiltBinary(binary) {
  
  const common = {
    allowGlobals,
@@ -155,8 +177,10 @@
    buildType,
    canCreateSymLink,
    childShouldThrowAndAbort,
---- a/test/common/index.mjs
-+++ b/test/common/index.mjs
+Index: node-v24.21.0/test/common/index.mjs
+===================================================================
+--- node-v24.21.0.orig/test/common/index.mjs
++++ node-v24.21.0/test/common/index.mjs
 @@ -5,6 +5,7 @@ const common = require('./index.js');
  
  const {

++++++ ip-address.patch ++++++
Index: node-v24.18.1/deps/npm/node_modules/ip-address/dist/common.js
===================================================================
--- node-v24.18.1.orig/deps/npm/node_modules/ip-address/dist/common.js
+++ node-v24.18.1/deps/npm/node_modules/ip-address/dist/common.js
@@ -1,20 +1,43 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.isInSubnet = isInSubnet;
+exports.isHostInSubnet = isHostInSubnet;
 exports.isCorrect = isCorrect;
 exports.prefixLengthFromMask = prefixLengthFromMask;
 exports.numberToPaddedHex = numberToPaddedHex;
 exports.stringToPaddedHex = stringToPaddedHex;
 exports.testBit = testBit;
 const address_error_1 = require("./address-error");
+/**
+ * Returns whether this address's *network* is contained within `address`,
+ * i.e. whether every address this one can represent also falls inside
+ * `address`. A network wider than `address` is not contained in it, so
+ * `10.0.0.0/8` is not in `10.0.0.0/16`.
+ *
+ * To ask whether the address itself falls inside a range, ignoring any CIDR
+ * suffix it was written with, use {@link isHostInSubnet} instead. That is the
+ * question the special-use classifiers ask.
+ */
 function isInSubnet(address) {
     if (this.subnetMask < address.subnetMask) {
         return false;
     }
-    if (this.mask(address.subnetMask) === address.mask()) {
-        return true;
-    }
-    return false;
+    return isHostInSubnet.call(this, address);
+}
+/**
+ * Returns whether this address's host bits fall inside `address`, ignoring
+ * this address's own subnet mask.
+ *
+ * This is the primitive the special-use classifiers (`isLoopback`,
+ * `isPrivate`, `isLinkLocal`, `getType`, …) are built on: they answer a
+ * question about the address, so the answer must not change with the CIDR
+ * suffix the caller happened to write. Use this rather than
+ * {@link isInSubnet} when classifying a single address — notably when the
+ * address came from untrusted input and the result backs a trust-boundary
+ * decision such as an SSRF allow/deny filter.
+ */
+function isHostInSubnet(address) {
+    return this.mask(address.subnetMask) === address.mask();
 }
 function isCorrect(defaultBits) {
     return function () {
Index: node-v24.18.1/deps/npm/node_modules/ip-address/dist/ipv4.js
===================================================================
--- node-v24.18.1.orig/deps/npm/node_modules/ip-address/dist/ipv4.js
+++ node-v24.18.1/deps/npm/node_modules/ip-address/dist/ipv4.js
@@ -35,6 +35,7 @@ const isCorrect4 = common.isCorrect(cons
  */
 class Address4 {
     constructor(address) {
+        this.addressMinusSuffix = '';
         this.groups = constants.GROUPS;
         this.parsedAddress = [];
         this.parsedSubnet = '';
@@ -51,6 +52,13 @@ class Address4 {
          * @returns {boolean}
          */
         this.isInSubnet = common.isInSubnet;
+        /**
+         * Returns true if this address's host bits fall inside the given 
subnet,
+         * ignoring this address's own subnet mask. See
+         * {@link common.isHostInSubnet}.
+         * @returns {boolean}
+         */
+        this.isHostInSubnet = common.isHostInSubnet;
         this.address = address;
         const subnet = constants.RE_SUBNET_STRING.exec(address);
         if (subnet) {
@@ -403,49 +411,49 @@ class Address4 {
      * @returns {boolean}
      */
     isMulticast() {
-        return this.isInSubnet(MULTICAST_V4);
+        return this.isHostInSubnet(MULTICAST_V4);
     }
     /**
      * Returns true if the address is in one of the [RFC 
1918](https://datatracker.ietf.org/doc/html/rfc1918) private address ranges 
(`10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`).
      * @returns {boolean}
      */
     isPrivate() {
-        return PRIVATE_V4.some((subnet) => this.isInSubnet(subnet));
+        return PRIVATE_V4.some((subnet) => this.isHostInSubnet(subnet));
     }
     /**
      * Returns true if the address is in the loopback range `127.0.0.0/8` 
([RFC 1122](https://datatracker.ietf.org/doc/html/rfc1122)).
      * @returns {boolean}
      */
     isLoopback() {
-        return this.isInSubnet(LOOPBACK_V4);
+        return this.isHostInSubnet(LOOPBACK_V4);
     }
     /**
      * Returns true if the address is in the link-local range `169.254.0.0/16` 
([RFC 3927](https://datatracker.ietf.org/doc/html/rfc3927)).
      * @returns {boolean}
      */
     isLinkLocal() {
-        return this.isInSubnet(LINK_LOCAL_V4);
+        return this.isHostInSubnet(LINK_LOCAL_V4);
     }
     /**
      * Returns true if the address is the unspecified address `0.0.0.0`.
      * @returns {boolean}
      */
     isUnspecified() {
-        return this.isInSubnet(UNSPECIFIED_V4);
+        return this.isHostInSubnet(UNSPECIFIED_V4);
     }
     /**
      * Returns true if the address is the limited broadcast address 
`255.255.255.255` ([RFC 919](https://datatracker.ietf.org/doc/html/rfc919)).
      * @returns {boolean}
      */
     isBroadcast() {
-        return this.isInSubnet(BROADCAST_V4);
+        return this.isHostInSubnet(BROADCAST_V4);
     }
     /**
      * Returns true if the address is in the carrier-grade NAT range 
`100.64.0.0/10` ([RFC 6598](https://datatracker.ietf.org/doc/html/rfc6598)).
      * @returns {boolean}
      */
     isCGNAT() {
-        return this.isInSubnet(CGNAT_V4);
+        return this.isHostInSubnet(CGNAT_V4);
     }
     /**
      * Returns a zero-padded base-2 string representation of the address
@@ -463,7 +471,7 @@ class Address4 {
      */
     groupForV6() {
         const segments = this.parsedAddress;
-        return this.address.replace(constants.RE_ADDRESS, `<span 
class="hover-group group-v4 group-6">${segments
+        return this.correctForm().replace(constants.RE_ADDRESS, `<span 
class="hover-group group-v4 group-6">${segments
             .slice(0, 2)
             .join('.')}</span>.<span class="hover-group group-v4 
group-7">${segments
             .slice(2, 4)
Index: node-v24.18.1/deps/npm/node_modules/ip-address/dist/ipv6.js
===================================================================
--- node-v24.18.1.orig/deps/npm/node_modules/ip-address/dist/ipv6.js
+++ node-v24.18.1/deps/npm/node_modules/ip-address/dist/ipv6.js
@@ -98,6 +98,13 @@ class Address6 {
          */
         this.isInSubnet = common.isInSubnet;
         /**
+         * Returns true if this address's host bits fall inside the given 
subnet,
+         * ignoring this address's own subnet mask. See
+         * {@link common.isHostInSubnet}.
+         * @returns {boolean}
+         */
+        this.isHostInSubnet = common.isHostInSubnet;
+        /**
          * Returns true if the address is correct, false otherwise
          * @returns {boolean}
          */
@@ -184,9 +191,11 @@ class Address6 {
         let host;
         let port = null;
         let result;
+        // Remove the protocol prefix, if any
+        const stripped = url.replace(/^[a-z][a-z0-9+.-]*:\/\//i, '');
         // If we have brackets parse them and find a port
-        if (url.indexOf('[') !== -1 && url.indexOf(']:') !== -1) {
-            result = constants6.RE_URL_WITH_PORT.exec(url);
+        if (stripped.indexOf('[') !== -1 && stripped.indexOf(']:') !== -1) {
+            result = constants6.RE_URL_WITH_PORT.exec(stripped);
             if (result === null) {
                 return {
                     error: 'failed to parse address with port',
@@ -196,13 +205,9 @@ class Address6 {
             }
             host = result[1];
             port = result[2];
-            // If there's a URL extract the address
         }
-        else if (url.indexOf('/') !== -1) {
-            // Remove the protocol prefix
-            url = url.replace(/^[a-z0-9]+:\/\//, '');
-            // Parse the address
-            result = constants6.RE_URL.exec(url);
+        else {
+            result = constants6.RE_URL.exec(stripped);
             if (result === null) {
                 return {
                     error: 'failed to parse address from URL',
@@ -210,11 +215,7 @@ class Address6 {
                     port: null,
                 };
             }
-            host = result[1];
-            // Otherwise just assign the URL to the host and let the library 
parse it
-        }
-        else {
-            host = url;
+            host = result[1] ?? result[2];
         }
         // If there's a port convert it to an integer
         if (port) {
@@ -493,7 +494,7 @@ class Address6 {
     getType() {
         for (let i = 0; i < TYPE_SUBNETS.length; i++) {
             const entry = TYPE_SUBNETS[i];
-            if (this.isInSubnet(entry[0])) {
+            if (this.isHostInSubnet(entry[0])) {
                 return entry[1];
             }
         }
@@ -638,7 +639,8 @@ class Address6 {
         const address4 = lastGroup.match(constants4.RE_ADDRESS);
         if (address4) {
             this.parsedAddress4 = address4[0];
-            this.address4 = new ipv4_1.Address4(this.parsedAddress4);
+            const v4Suffix = this.subnetMask >= 96 ? `/${this.subnetMask - 
96}` : '';
+            this.address4 = new 
ipv4_1.Address4(`${this.parsedAddress4}${v4Suffix}`);
             for (let i = 0; i < this.address4.groups; i++) {
                 if (/^0[0-9]+/.test(this.address4.parsedAddress[i])) {
                     // The prefix groups haven't been through the 
bad-character check
@@ -734,7 +736,11 @@ class Address6 {
         return BigInt(`0x${this.parsedAddress.map(paddedHex).join('')}`);
     }
     /**
-     * Return the last two groups of this address as an IPv4 address string
+     * Return the last two groups of this address as an IPv4 address string.
+     * If this address carries a CIDR prefix that covers the trailing 32 bits
+     * (i.e. `subnetMask >= 96`), the resulting `Address4` inherits the
+     * corresponding v4 prefix (`subnetMask - 96`); otherwise it defaults to
+     * `/32`.
      * @returns {Address4}
      * @example
      * var address = new Address6('2001:4860:4001::1825:bf11');
@@ -742,7 +748,16 @@ class Address6 {
      */
     to4() {
         const binary = this.binaryZeroPad().split('');
-        return ipv4_1.Address4.fromHex(BigInt(`0b${binary.slice(96, 
128).join('')}`).toString(16).padStart(8, '0'));
+        const hex = BigInt(`0b${binary.slice(96, 
128).join('')}`).toString(16).padStart(8, '0');
+        if (this.subnetMask >= 96) {
+            const v4Mask = this.subnetMask - 96;
+            const groups = [];
+            for (let i = 0; i < 8; i += 2) {
+                groups.push(parseInt(hex.slice(i, i + 2), 16));
+            }
+            return new ipv4_1.Address4(`${groups.join('.')}/${v4Mask}`);
+        }
+        return ipv4_1.Address4.fromHex(hex);
     }
     /**
      * Return the v4-in-v6 form of the address
@@ -756,7 +771,7 @@ class Address6 {
         if (!/:$/.test(correct)) {
             infix = ':';
         }
-        return correct + infix + address4.address;
+        return correct + infix + address4.correctForm();
     }
     /**
      * Decodes the Teredo tunneling fields embedded in this address. Returns 
the
@@ -902,7 +917,7 @@ class Address6 {
         if (pl !== 32 && pl !== 40 && pl !== 48 && pl !== 56 && pl !== 64 && 
pl !== 96) {
             throw new address_error_1.AddressError('NAT64 prefix length must 
be 32, 40, 48, 56, 64, or 96');
         }
-        if (!this.isInSubnet(prefix6)) {
+        if (!this.isHostInSubnet(prefix6)) {
             return null;
         }
         const bits = this.binaryZeroPad();
@@ -982,7 +997,11 @@ class Address6 {
      * @returns {boolean}
      */
     isLinkLocal() {
-        // Zeroes are required, i.e. we can't check isInSubnet with 'fe80::/10'
+        const embedded = this.embeddedIPv4();
+        if (embedded) {
+            return embedded.isLinkLocal();
+        }
+        // Zeroes are required, i.e. we can't check isHostInSubnet with 
'fe80::/10'
         if (this.getBitsBase2(0, 64) ===
             
'1111111010000000000000000000000000000000000000000000000000000000') {
             return true;
@@ -994,6 +1013,10 @@ class Address6 {
      * @returns {boolean}
      */
     isMulticast() {
+        const embedded = this.embeddedIPv4();
+        if (embedded) {
+            return embedded.isMulticast();
+        }
         const type = this.getType();
         return type === 'Multicast' || type.startsWith('Multicast ');
     }
@@ -1016,27 +1039,54 @@ class Address6 {
      * @returns {boolean}
      */
     isMapped4() {
-        return this.isInSubnet(IPV4_MAPPED_SUBNET);
+        return this.isHostInSubnet(IPV4_MAPPED_SUBNET);
+    }
+    /**
+     * If this address embeds a routable IPv4 address — i.e. it is IPv4-mapped
+     * (`::ffff:0:0/96`) or sits in the NAT64 well-known prefix 
(`64:ff9b::/96`,
+     * [RFC 6052](https://datatracker.ietf.org/doc/html/rfc6052)) — return that
+     * embedded address as an {@link Address4}; otherwise return null.
+     *
+     * The special-property checks (`isLoopback`, `isLinkLocal`, `isMulticast`,
+     * `isUnspecified`, `isPrivate`, `isCGNAT`, `isBroadcast`) call this first 
and
+     * delegate to the embedded {@link Address4} when present, so a literal 
such as
+     * `::ffff:127.0.0.1` is classified by what it actually reaches (loopback)
+     * rather than by its IPv6 wrapper (which `getType()` reports as 
IPv4-mapped).
+     * This matters wherever the checks back a trust-boundary decision (e.g. an
+     * SSRF allow/deny filter): without normalization, `::ffff:10.0.0.1`,
+     * `::ffff:169.254.169.254`, `64:ff9b::7f00:1`, etc. would all read as
+     * non-internal.
+     * @returns {Address4 | null}
+     */
+    embeddedIPv4() {
+        if (this.isMapped4() || this.isHostInSubnet(NAT64_WELL_KNOWN_SUBNET)) {
+            return this.to4();
+        }
+        return null;
     }
     /**
      * Returns true if the address is a Teredo address, false otherwise
      * @returns {boolean}
      */
     isTeredo() {
-        return this.isInSubnet(TEREDO_SUBNET);
+        return this.isHostInSubnet(TEREDO_SUBNET);
     }
     /**
      * Returns true if the address is a 6to4 address, false otherwise
      * @returns {boolean}
      */
     is6to4() {
-        return this.isInSubnet(SIX_TO_FOUR_SUBNET);
+        return this.isHostInSubnet(SIX_TO_FOUR_SUBNET);
     }
     /**
      * Returns true if the address is a loopback address, false otherwise
      * @returns {boolean}
      */
     isLoopback() {
+        const embedded = this.embeddedIPv4();
+        if (embedded) {
+            return embedded.isLoopback();
+        }
         return this.getType() === 'Loopback';
     }
     /**
@@ -1044,13 +1094,64 @@ class Address6 {
      * @returns {boolean}
      */
     isULA() {
-        return this.isInSubnet(ULA_SUBNET);
+        return this.isHostInSubnet(ULA_SUBNET);
+    }
+    /**
+     * Returns true if the address is private, i.e. a Unique Local Address in
+     * `fc00::/7` ([RFC 4193](https://datatracker.ietf.org/doc/html/rfc4193)) 
or an
+     * IPv4-mapped / NAT64 address whose embedded IPv4 address is in one of the
+     * [RFC 1918](https://datatracker.ietf.org/doc/html/rfc1918) private ranges
+     * (e.g. `::ffff:10.0.0.1`). This is the IPv6 counterpart to
+     * {@link Address4.isPrivate}; use it instead of {@link isULA} when you 
need to
+     * catch mapped RFC 1918 addresses as well as native ULAs.
+     * @returns {boolean}
+     */
+    isPrivate() {
+        const embedded = this.embeddedIPv4();
+        if (embedded) {
+            return embedded.isPrivate();
+        }
+        return this.isULA();
+    }
+    /**
+     * Returns true if the address is an IPv4-mapped / NAT64 address whose 
embedded
+     * IPv4 address is in the carrier-grade NAT range `100.64.0.0/10`
+     * ([RFC 6598](https://datatracker.ietf.org/doc/html/rfc6598)), false
+     * otherwise. There is no native IPv6 CGNAT range, so this only ever 
returns
+     * true for an embedded IPv4 address (e.g. `::ffff:100.64.0.1`).
+     * @returns {boolean}
+     */
+    isCGNAT() {
+        const embedded = this.embeddedIPv4();
+        if (embedded) {
+            return embedded.isCGNAT();
+        }
+        return false;
+    }
+    /**
+     * Returns true if the address is an IPv4-mapped / NAT64 address whose 
embedded
+     * IPv4 address is the limited broadcast address `255.255.255.255`
+     * ([RFC 919](https://datatracker.ietf.org/doc/html/rfc919)), false 
otherwise.
+     * There is no IPv6 broadcast, so this only ever returns true for an 
embedded
+     * IPv4 address (e.g. `::ffff:255.255.255.255`).
+     * @returns {boolean}
+     */
+    isBroadcast() {
+        const embedded = this.embeddedIPv4();
+        if (embedded) {
+            return embedded.isBroadcast();
+        }
+        return false;
     }
     /**
      * Returns true if the address is the unspecified address `::`.
      * @returns {boolean}
      */
     isUnspecified() {
+        const embedded = this.embeddedIPv4();
+        if (embedded) {
+            return embedded.isUnspecified();
+        }
         return this.getType() === 'Unspecified';
     }
     /**
@@ -1058,7 +1159,7 @@ class Address6 {
      * @returns {boolean}
      */
     isDocumentation() {
-        return this.isInSubnet(DOCUMENTATION_SUBNET);
+        return this.isHostInSubnet(DOCUMENTATION_SUBNET);
     }
     // #endregion
     // #region HTML
@@ -1214,4 +1315,5 @@ const SIX_TO_FOUR_SUBNET = new Address6(
 const ULA_SUBNET = new Address6('fc00::/7');
 const DOCUMENTATION_SUBNET = new Address6('2001:db8::/32');
 const IPV4_MAPPED_SUBNET = new Address6('::ffff:0:0/96');
+const NAT64_WELL_KNOWN_SUBNET = new Address6('64:ff9b::/96');
 //# sourceMappingURL=ipv6.js.map
\ No newline at end of file
Index: node-v24.18.1/deps/npm/node_modules/ip-address/dist/v6/constants.js
===================================================================
--- node-v24.18.1.orig/deps/npm/node_modules/ip-address/dist/v6/constants.js
+++ node-v24.18.1/deps/npm/node_modules/ip-address/dist/v6/constants.js
@@ -44,6 +44,7 @@ exports.TYPES = {
     'ff05::1:3/128': 'Multicast (All DHCP servers in this site)',
     '::/128': 'Unspecified',
     '::1/128': 'Loopback',
+    '::ffff:0:0/96': 'IPv4-mapped',
     'ff00::/8': 'Multicast',
     'fe80::/10': 'Link-local unicast',
     'fc00::/7': 'Unique local',
@@ -76,6 +77,6 @@ exports.RE_SUBNET_STRING = /\/\d{1,3}(?=
  * @static
  */
 exports.RE_ZONE_STRING = /%.*$/;
-exports.RE_URL = /^\[{0,1}([0-9a-f:]+)\]{0,1}/;
-exports.RE_URL_WITH_PORT = /\[([0-9a-f:]+)\]:([0-9]{1,5})/;
+exports.RE_URL = /^(?:\[([0-9a-f:.]+)\]|([0-9a-f:.]+))(?:[/?#].*)?$/i;
+exports.RE_URL_WITH_PORT = /^\[([0-9a-f:.]+)\]:([0-9]{1,5})(?:[/?#].*)?$/i;
 //# sourceMappingURL=constants.js.map
\ No newline at end of file
Index: node-v24.18.1/deps/npm/node_modules/ip-address/package.json
===================================================================
--- node-v24.18.1.orig/deps/npm/node_modules/ip-address/package.json
+++ node-v24.18.1/deps/npm/node_modules/ip-address/package.json
@@ -16,7 +16,7 @@
     "bigint",
     "browser"
   ],
-  "version": "10.2.0",
+  "version": "10.2.2",
   "author": "Beau Gunderson <[email protected]> 
(https://beaugunderson.com/)",
   "license": "MIT",
   "main": "dist/ip-address.js",

++++++ no_avx2_on_i586.patch ++++++
===================================================================
Index: node-v26.7.0/deps/histogram/src/hdr_histogram.c
===================================================================
--- node-v26.7.0.orig/deps/histogram/src/hdr_histogram.c
+++ node-v26.7.0/deps/histogram/src/hdr_histogram.c
@@ -36,7 +36,7 @@
 
 /* Runtime-dispatched AVX2 path: keep the rest of this TU at the project's
    baseline ISA so the shipped binary does not silently require AVX2. */
-#if (defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || 
defined(_M_IX86)) \
+#if (defined(__x86_64__) || defined(_M_X64)) \
     && (defined(__GNUC__) || defined(__clang__)) && !defined(__INTEL_COMPILER) 
&& !defined(_MSC_VER)
 #  define HDR_HAS_AVX2_DISPATCH 1
 #  include <immintrin.h>

++++++ node-v24.18.1.tar.xz -> node-v24.21.0.tar.xz ++++++
/work/SRC/openSUSE:Factory/nodejs24/node-v24.18.1.tar.xz 
/work/SRC/openSUSE:Factory/.nodejs24.new.3698736/node-v24.21.0.tar.xz differ: 
char 26, line 1


++++++ npm-line-truncation.patch ++++++
Index: node-v26.6.0/deps/npm/lib/base-cmd.js
===================================================================
--- node-v26.6.0.orig/deps/npm/lib/base-cmd.js
+++ node-v26.6.0/deps/npm/lib/base-cmd.js
@@ -104,7 +104,7 @@ class BaseCommand {
         fullUsage.push('')
         for (const def of cmdDefs) {
           if (def.description) {
-            const desc = def.description.trim().split('\n')[0]
+            const desc = 
def.description.split('\n\n')[0].trim().replace(/\s+/g, ' ')
             const shortcuts = def.short ? `-${def.short}` : ''
             const aliases = (def.alias || []).map(v => `--${v}`).join('|')
             const mainFlag = `--${def.key}`

++++++ versioned.patch ++++++
--- /var/tmp/diff_new_pack.videOI/_old  2026-10-14 18:34:47.201026483 +0200
+++ /var/tmp/diff_new_pack.videOI/_new  2026-10-14 18:34:47.205026653 +0200
@@ -8,10 +8,10 @@
 
 This is also important for generation of binary
 modules for multiple versions of NodeJS
-Index: node-v24.14.1/Makefile
+Index: node-v24.19.0/Makefile
 ===================================================================
---- node-v24.14.1.orig/Makefile
-+++ node-v24.14.1/Makefile
+--- node-v24.19.0.orig/Makefile
++++ node-v24.19.0/Makefile
 @@ -77,7 +77,7 @@ BUILDTYPE_LOWER := $(shell echo $(BUILDT
  EXEEXT := $(shell $(PYTHON) -c \
                "import sys; print('.exe' if sys.platform == 'win32' else '')")
@@ -21,10 +21,10 @@
  NODE_G_EXE = node_g$(EXEEXT)
  NPM ?= ./deps/npm/bin/npm-cli.js
  
-Index: node-v24.14.1/tools/install.py
+Index: node-v24.19.0/tools/install.py
 ===================================================================
---- node-v24.14.1.orig/tools/install.py
-+++ node-v24.14.1/tools/install.py
+--- node-v24.19.0.orig/tools/install.py
++++ node-v24.19.0/tools/install.py
 @@ -93,7 +93,7 @@ def uninstall(options, paths, dest):
      try_remove(options, path, dest)
  
@@ -113,10 +113,10 @@
  
    if sys.platform == 'zos':
      zoslibinc = os.environ.get('ZOSLIB_INCLUDES')
-Index: node-v24.14.1/doc/node.1
+Index: node-v24.19.0/doc/node.1
 ===================================================================
---- node-v24.14.1.orig/doc/node.1
-+++ node-v24.14.1/doc/node.1
+--- node-v24.19.0.orig/doc/node.1
++++ node-v24.19.0/doc/node.1
 @@ -28,24 +28,24 @@
  .Dt NODE 1
  .
@@ -138,7 +138,7 @@
 -.Nm node
 +.Nm node24
  .Cm inspect
- .Op Fl e Ar string | Ar script.js | Fl | Ar <host>:<port>
+ .Op Ar <program-entry-point> | Fl e Ar string | Ar <host>:<port>
  .Ar ...
  .
 -.Nm node
@@ -146,10 +146,10 @@
  .Op Fl -v8-options
  .
  .\"======================================================================
-Index: node-v24.14.1/src/node_main.cc
+Index: node-v24.19.0/src/node_main.cc
 ===================================================================
---- node-v24.14.1.orig/src/node_main.cc
-+++ node-v24.14.1/src/node_main.cc
+--- node-v24.19.0.orig/src/node_main.cc
++++ node-v24.19.0/src/node_main.cc
 @@ -94,6 +94,7 @@ int wmain(int argc, wchar_t* wargv[]) {
  // UNIX
  
@@ -158,10 +158,10 @@
    return node::Start(argc, argv);
  }
  #endif
-Index: node-v24.14.1/tools/test.py
+Index: node-v24.19.0/tools/test.py
 ===================================================================
---- node-v24.14.1.orig/tools/test.py
-+++ node-v24.14.1/tools/test.py
+--- node-v24.19.0.orig/tools/test.py
++++ node-v24.19.0/tools/test.py
 @@ -985,7 +985,7 @@ class Context(object):
      if self.vm is not None:
        return self.vm
@@ -171,27 +171,29 @@
      else:
        name = 'out/%s.%s/node' % (arch, mode)
  
-Index: node-v24.14.1/node.gyp
+Index: node-v24.19.0/node.gyp
 ===================================================================
---- node-v24.14.1.orig/node.gyp
-+++ node-v24.14.1/node.gyp
-@@ -6,10 +6,10 @@
-     'v8_enable_31bit_smis_on_64bit_arch%': 0,
+--- node-v24.19.0.orig/node.gyp
++++ node-v24.19.0/node.gyp
+@@ -7,12 +7,12 @@
      'force_dynamic_crt%': 0,
      'node_builtin_modules_path%': '',
+     # `node` executable target name.
 -    'node_core_target_name%': 'node',
 +    'node_core_target_name%': 'node24',
-     'node_enable_v8_vtunejit%': 'false',
-     'node_intermediate_lib_type%': 'static_library',
+     # `libnode` target type, `static_library` if `node_shared` is false and 
`shared_library` if `node_shared` is true.
+     'node_lib_type%': 'static_library',
+     # `libnode` target name, can be a `static_library` or `shared_library` 
based on `node_shared`.
+     # NOTE: Gyp will prefix this with `lib` if this name does not start with 
`lib`.
 -    'node_lib_target_name%': 'libnode',
 +    'node_lib_target_name%': 'libnode24',
      'node_module_version%': '',
      'node_no_browser_globals%': 'false',
      'node_shared_brotli%': 'false',
-Index: node-v24.14.1/test/parallel/test-snapshot-warning.js
+Index: node-v24.19.0/test/parallel/test-snapshot-warning.js
 ===================================================================
---- node-v24.14.1.orig/test/parallel/test-snapshot-warning.js
-+++ node-v24.14.1/test/parallel/test-snapshot-warning.js
+--- node-v24.19.0.orig/test/parallel/test-snapshot-warning.js
++++ node-v24.19.0/test/parallel/test-snapshot-warning.js
 @@ -60,7 +60,7 @@ tmpdir.refresh();
      stderr(output) {
        let match = output.match(/Warning: test warning/g);

Reply via email to