staging-next-26.05 iteration 3 - 2026-07-20 (#543944)

This commit is contained in:
Vladimír Čunát
2026-07-27 06:15:41 +00:00
committed by GitHub
18 changed files with 447 additions and 70 deletions

View File

@@ -20,7 +20,7 @@ let
lib.concatStringsSep "\n\n" extraCertificateStrings
);
version = "3.125";
version = "3.126";
meta = {
homepage = "https://firefox-source-docs.mozilla.org/security/nss/runbooks/rootstore.html#root-store-consumers";
description = "Bundle of X.509 certificates of public Certificate Authorities (CA)";
@@ -52,7 +52,7 @@ stdenv.mkDerivation {
"https://hg-edge.mozilla.org/projects/nss/raw-file/${tag}/${file}"
"https://raw.githubusercontent.com/nss-dev/nss/refs/tags/${tag}/${file}"
];
hash = "sha256-5XkSgI2u97Kw+k3yzPF+R66vJsg5o4+Fx2AD66/YZr0=";
hash = "sha256-gbfyV2MzouNg5nP5Etewt6dl2DbHMQA+NIpGysXTcZg=";
};
unpackPhase = ''

View File

@@ -152,11 +152,12 @@ stdenv.mkDerivation (finalAttrs: {
);
LD_LIBRARY_PATH = lib.optionalString stdenv.hostPlatform.isDarwin "DY" + "LD_LIBRARY_PATH";
in
# FIXME: do something about the excessive logging on x86_64-linux (> 250 MiB).
''
runHook preInstallCheck
(($(ulimit -n) < 1024)) && ulimit -n 1024
HOME="$(mktemp -d)" ${LD_LIBRARY_PATH}="$lib/lib" ./test/unittest ${toString excludes}
HOME="$(mktemp -d)" ${LD_LIBRARY_PATH}="$lib/lib" ./test/unittest ${toString excludes}${lib.optionalString stdenv.hostPlatform.isx86_64 " >/dev/null"}
runHook postInstallCheck
'';

View File

@@ -116,6 +116,24 @@ stdenv.mkDerivation (finalAttrs: {
url = "https://github.com/OSGeo/gdal/commit/7b8b8de28bbd200b0fd3b09147fdc68b5bf5ce20.patch";
hash = "sha256-BxWMpiUwM3h7Vo9vxJ4H4A8aQfE3jcSRfRYwaLw/60w=";
})
# Fix stack buffer overflow in netCDF driver
# https://github.com/OSGeo/gdal/issues/14594
(fetchpatch {
name = "0005-netcdf-avoid-reading-attributes-without-checking-length.patch";
url = "https://github.com/OSGeo/gdal/commit/50eea7456d83c9586f112ef96b43249372839dea.patch";
hash = "sha256-m1FsBC37h2uuaEeYezPZJFsDR6Ix/FDIZnuZZiSAYcw=";
})
# Fix tests with libtiff 4.7.2
# FAILED gcore/tiff_read.py::test_tiff_read_stripbytecounts_count_not_same_as_stripoffsets_count -
# AssertionError: assert '170' is None
(fetchpatch {
name = "0006-Internal-libtiff-resync-with-4.7.2rc3-and-adjust-tes.patch";
url = "https://github.com/OSGeo/gdal/commit/06ffb0333fe557cde262aa1e81466dda42684c53.patch";
hash = "sha256-teZ9cv8JQ2ua4tEWl3I8D9DYo8srGIBYIc2NfkgNMe4=";
includes = [ "autotest/gcore/tiff_read.py" ];
})
];
nativeBuildInputs = [

View File

@@ -13,13 +13,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "libffi";
version = "3.5.2";
version = "3.7.0";
src = fetchurl {
url =
with finalAttrs;
"https://github.com/libffi/libffi/releases/download/v${version}/${pname}-${version}.tar.gz";
hash = "sha256-86MIKiOzfCk6T80QUxR7Nx8v+R+n6hsqUuM1Z2usgtw=";
hash = "sha256-IlXFpjjftRv2fCChKnu3DRf+senqurrAX1VzFG9YZDY=";
};
# Note: this package is used for bootstrapping fetchurl, and thus
@@ -32,6 +32,9 @@ stdenv.mkDerivation (finalAttrs: {
./freebsd-tsan-pthread.patch
];
# To workaround https://github.com/libffi/libffi/issues/993, we empty the test file:
postPatch = lib.optionalString stdenv.hostPlatform.isDarwin "echo 'int main (void) { return 0; }' > testsuite/libffi.call/i128-1.c";
strictDeps = true;
outputs = [
"out"

View File

@@ -8,13 +8,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "libmysofa";
version = "1.3.3";
version = "1.3.4";
src = fetchFromGitHub {
owner = "hoene";
repo = "libmysofa";
rev = "v${finalAttrs.version}";
hash = "sha256-jvib1hGPJEY2w/KjlD7iTtRy1s8LFG+Qhb2d6xdpUyc=";
hash = "sha256-gP/RjKzMx8JIYcyiivBGvy3kIdwHMEKY6abssyVUKNQ=";
};
outputs = [

View File

@@ -2,7 +2,6 @@
lib,
stdenv,
fetchurl,
fetchpatch,
getopt,
util-linuxMinimal,
which,
@@ -13,31 +12,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "libseccomp";
version = "2.6.0";
version = "2.6.1";
src = fetchurl {
url = "https://github.com/seccomp/libseccomp/releases/download/v${finalAttrs.version}/libseccomp-${finalAttrs.version}.tar.gz";
hash = "sha256-g7YIUjLRWIw3ncm5yuR7s3QHzyYubnSZPGG6ctKnhNw=";
hash = "sha256-UB9mxmciXVN5G5fh18+Fq3ZMKX0EiB9g849FHEsO4b4=";
};
patches = [
# Remove when version > 2.6.0
# Fixes test failures on big-endian archs
(fetchpatch {
name = "0001-libseccomp-remove-fuzzer-from-test-62-sim-arch_transactions.patch";
url = "https://github.com/seccomp/libseccomp/commit/2f0f3b0e9121720108431c5d054164016f476230.patch";
hash = "sha256-AKAQyALJlLgxnS23OEoqfyDswp0kU2vmja5ohgvFojw=";
})
# Remove when version > 2.6.0
# Fixes OOB reads & tests on musl
(fetchpatch {
name = "0002-libseccomp-fix-seccomp_export_bpf_mem-out-of-bounds-read.patch";
url = "https://github.com/seccomp/libseccomp/commit/dd759e8c4f5685b526638fba9ec4fc24c37c9aec.patch";
hash = "sha256-TdfQ5T8FrGE6+P24MIi9rKSC3fQu/Jlr4bsFiJd4yVY=";
})
];
outputs = [
"out"
"lib"

View File

@@ -37,13 +37,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "libtiff";
version = "4.7.1";
version = "4.7.2";
src = fetchFromGitLab {
owner = "libtiff";
repo = "libtiff";
rev = "v${finalAttrs.version}";
hash = "sha256-UiC6s86i7UavW86EKm74oPVlEacvoKmwW7KETjpnNaI=";
hash = "sha256-60Lpg5WRfWMzlOoOUA+C6KLlYIZ+3BjXidOVqv4M2GA=";
};
patches = [

View File

@@ -8,16 +8,16 @@
stdenv.mkDerivation (finalAttrs: {
pname = "tzdata";
version = "2026b";
version = "2026c";
srcs = [
(fetchurl {
url = "https://data.iana.org/time-zones/releases/tzdata${finalAttrs.version}.tar.gz";
hash = "sha256-EUVD2fGaa/61vKQ2hq6hc9OHVaPbHy7sESZHrpLG9UQ=";
hash = "sha256-5KF4pEd/PQ6nfMMYKP9yqjj+/41hqhPn6Z4ULp2QK+Q=";
})
(fetchurl {
url = "https://data.iana.org/time-zones/releases/tzcode${finalAttrs.version}.tar.gz";
hash = "sha256-N+nthCf101IcIvxY4pPL+wQ9cO7fEAOHCzPzY/Yco0Q=";
hash = "sha256-sc/8Os5MTHzQ77ovet2G7D0LedpIvPA1gmcf08j+rOg=";
})
];

View File

@@ -8,6 +8,7 @@
stdenv,
testers,
validatePkgConfig,
static ? stdenv.hostPlatform.isStatic, # generates static libraries *only*
}:
stdenv.mkDerivation (finalAttrs: {
@@ -21,6 +22,20 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-+vz/qTMRRDHV1VE4nny9vYYtarZHk1xoM4EZiah3jnY=";
};
patches = [
# FIXME: remove when included in a release
(fetchpatch2 {
url = "https://github.com/nodejs/uvwasi/commit/0820128569533c855d60c0f6382acbb14aa62ad2.patch?full_index=1";
hash = "sha256-psjivoarqisOuCdVJAWuFH0aITzwb/obmal3ewVXvG4=";
})
];
postPatch = lib.optionalString static ''
substituteInPlace CMakeLists.txt --replace-fail 'TARGETS uvwasi_a uvwasi' 'TARGETS uvwasi_a'
'';
cmakeFlags = [
(lib.cmakeBool "UVWASI_BUILD_SHARED" (!static))
];
outputs = [
"out"
];

View File

@@ -38,14 +38,7 @@
stdenv.mkDerivation (finalAttrs: {
pname = "xvfb";
# TODO: commented out for rebuild avoidance after xorg-server update. revert
# on staging.
# inherit (xorg-server) src version;
version = "21.1.23";
src = fetchurl {
url = "mirror://xorg/individual/xserver/xorg-server-${finalAttrs.version}.tar.xz";
hash = "sha256-45gy5WF9ra8HL9+fDhnl0uHCoTYHrCgLrBq6n4/hRjQ=";
};
inherit (xorg-server) src version;
strictDeps = true;

View File

@@ -0,0 +1,69 @@
From 4d9c6b19fcb34fab03fb7dab8f6d36a2cc4ef982 Mon Sep 17 00:00:00 2001
From: Florian Weimer <fweimer@redhat.com>
Date: Fri, 19 Jun 2026 18:22:20 +0200
Subject: [PATCH 1/3] resolv: Check for inet_ntop failure in ns_sprintrrf
This makes the output more consistent (either failure or complete
output) and helps with systematic testing with varying buffer
sizes.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
(cherry picked from commit cd0db208d56a2cecd528b8ae96df752ba5344d9a)
---
resolv/ns_print.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/resolv/ns_print.c b/resolv/ns_print.c
index cef2212fd2..cb680fb74e 100644
--- a/resolv/ns_print.c
+++ b/resolv/ns_print.c
@@ -140,8 +140,9 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
switch (type) {
case ns_t_a:
if (rdlen != (size_t)NS_INADDRSZ)
- goto formerr;
- (void) inet_ntop(AF_INET, rdata, buf, buflen);
+ goto formerr;
+ if (inet_ntop (AF_INET, rdata, buf, buflen) == NULL)
+ return -1;
addlen(strlen(buf), &buf, &buflen);
break;
@@ -307,9 +308,10 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
}
case ns_t_aaaa:
- if (rdlen != (size_t)NS_IN6ADDRSZ)
- goto formerr;
- (void) inet_ntop(AF_INET6, rdata, buf, buflen);
+ if (rdlen != (size_t)NS_IN6ADDRSZ)
+ goto formerr;
+ if (inet_ntop (AF_INET6, rdata, buf, buflen) == NULL)
+ return -1;
addlen(strlen(buf), &buf, &buflen);
break;
@@ -400,7 +402,8 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
goto formerr;
/* Address. */
- (void) inet_ntop(AF_INET, rdata, buf, buflen);
+ if (inet_ntop (AF_INET, rdata, buf, buflen) == NULL)
+ return -1;
addlen(strlen(buf), &buf, &buflen);
rdata += NS_INADDRSZ;
@@ -542,7 +545,8 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
if (rdata + pbyte >= edata) goto formerr;
memset(&a, 0, sizeof(a));
memcpy(&a.s6_addr[pbyte], rdata, sizeof(a) - pbyte);
- (void) inet_ntop(AF_INET6, &a, buf, buflen);
+ if (inet_ntop (AF_INET6, &a, buf, buflen) == NULL)
+ return -1;
addlen(strlen(buf), &buf, &buflen);
rdata += sizeof(a) - pbyte;
}
--
2.54.0

View File

@@ -0,0 +1,134 @@
From 103658e72f5aaeb36a5e405f9abaa1b687488fc1 Mon Sep 17 00:00:00 2001
From: Florian Weimer <fweimer@redhat.com>
Date: Fri, 19 Jun 2026 18:22:20 +0200
Subject: [PATCH 2/3] resolv: More types as unknown in ns_sprintrrf
(CVE-2026-5435)
Specifically, CERT, TKEY, TSIG, OPT. This removes the buggy
implementations of TSIG, fixing bug 34033, and partially
fixing bug 34069.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
(cherry picked from commit ca44a6609c29a683b03575fa035c6d17aa591e72)
---
resolv/ns_print.c | 96 -----------------------------------------------
1 file changed, 96 deletions(-)
diff --git a/resolv/ns_print.c b/resolv/ns_print.c
index cb680fb74e..8c876b147e 100644
--- a/resolv/ns_print.c
+++ b/resolv/ns_print.c
@@ -437,96 +437,6 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
break;
}
- case ns_t_cert: {
- u_int c_type, key_tag, alg;
- int n;
- unsigned int siz;
- char base64_cert[8192], tmp[40];
- const char *leader;
-
- c_type = ns_get16(rdata); rdata += NS_INT16SZ;
- key_tag = ns_get16(rdata); rdata += NS_INT16SZ;
- alg = (u_int) *rdata++;
-
- len = SPRINTF((tmp, "%d %d %d ", c_type, key_tag, alg));
- T(addstr(tmp, len, &buf, &buflen));
- siz = (edata-rdata)*4/3 + 4; /* "+4" accounts for trailing \0 */
- if (siz > sizeof(base64_cert) * 3/4) {
- const char *str = "record too long to print";
- T(addstr(str, strlen(str), &buf, &buflen));
- }
- else {
- len = b64_ntop(rdata, edata-rdata, base64_cert, siz);
-
- if (len < 0)
- goto formerr;
- else if (len > 15) {
- T(addstr(" (", 2, &buf, &buflen));
- leader = "\n\t\t";
- spaced = 0;
- }
- else
- leader = " ";
-
- for (n = 0; n < len; n += 48) {
- T(addstr(leader, strlen(leader),
- &buf, &buflen));
- T(addstr(base64_cert + n, MIN(len - n, 48),
- &buf, &buflen));
- }
- if (len > 15)
- T(addstr(" )", 2, &buf, &buflen));
- }
- break;
- }
-
- case ns_t_tkey: {
- /* KJD - need to complete this */
- u_long t;
- int mode, err, keysize;
-
- /* Algorithm name. */
- T(addname(msg, msglen, &rdata, origin, &buf, &buflen));
- T(addstr(" ", 1, &buf, &buflen));
-
- /* Inception. */
- t = ns_get32(rdata); rdata += NS_INT32SZ;
- len = SPRINTF((tmp, "%lu ", t));
- T(addstr(tmp, len, &buf, &buflen));
-
- /* Expiration. */
- t = ns_get32(rdata); rdata += NS_INT32SZ;
- len = SPRINTF((tmp, "%lu ", t));
- T(addstr(tmp, len, &buf, &buflen));
-
- /* Mode , Error, Key Size. */
- /* Priority, Weight, Port. */
- mode = ns_get16(rdata); rdata += NS_INT16SZ;
- err = ns_get16(rdata); rdata += NS_INT16SZ;
- keysize = ns_get16(rdata); rdata += NS_INT16SZ;
- len = SPRINTF((tmp, "%u %u %u ", mode, err, keysize));
- T(addstr(tmp, len, &buf, &buflen));
-
- /* XXX need to dump key, print otherdata length & other data */
- break;
- }
-
- case ns_t_tsig: {
- /* BEW - need to complete this */
- int n;
-
- T(len = addname(msg, msglen, &rdata, origin, &buf, &buflen));
- T(addstr(" ", 1, &buf, &buflen));
- rdata += 8; /*%< time */
- n = ns_get16(rdata); rdata += INT16SZ;
- rdata += n; /*%< sig */
- n = ns_get16(rdata); rdata += INT16SZ; /*%< original id */
- sprintf(buf, "%d", ns_get16(rdata));
- rdata += INT16SZ;
- addlen(strlen(buf), &buf, &buflen);
- break;
- }
-
case ns_t_a6: {
struct in6_addr a;
int pbyte, pbit;
@@ -561,12 +471,6 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
break;
}
- case ns_t_opt: {
- len = SPRINTF((tmp, "%u bytes", class));
- T(addstr(tmp, len, &buf, &buflen));
- break;
- }
-
default:
snprintf (errbuf, sizeof (errbuf), "unknown RR type %d", type);
comment = errbuf;
--
2.54.0

View File

@@ -0,0 +1,66 @@
From 2290143edc27486196815874dca5a528c118a73f Mon Sep 17 00:00:00 2001
From: Florian Weimer <fweimer@redhat.com>
Date: Fri, 19 Jun 2026 18:22:20 +0200
Subject: [PATCH 3/3] resolv: Fix buffer overreads in ns_sprintrrf
(CVE-2026-6238)
Check that the RDATA payload does not require more than RDATALEN
bytes while processing it. The fixes cover A6, LOC records.
(CERT, TKEY, TSIG were fixed before, by switching to the generic
formatter.)
The vulnerable LOC record handling was first introduced before
glibc 2.0, in commit ee188d555b8c32ad9704a7440cab400af967292f.
CERT, TSIG, TKEY handling came with commit
b43b13ac2544b11f35be301d1589b51a8473e32b, released with glibc 2.2.
A6 record handling was introduced in commit
91633816430e7ec5a19fe3ff510a7c4822a9557e ("* resolv/ns_print.c
(ns_sprintrrf): Handle ns_t_a6 and ns_t_opt."), which went into glibc
2.7.
This fixes bug 34069.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
(cherry picked from commit a7b60d23bbb56eaef59f4962e4140062e552600a)
---
resolv/ns_print.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/resolv/ns_print.c b/resolv/ns_print.c
index 8c876b147e..6832255a25 100644
--- a/resolv/ns_print.c
+++ b/resolv/ns_print.c
@@ -318,7 +318,8 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
case ns_t_loc: {
char t[255];
- /* XXX protocol format checking? */
+ if (rdlen != 16)
+ goto formerr;
(void) loc_ntoa(rdata, t);
T(addstr(t, strlen(t), &buf, &buflen));
break;
@@ -452,13 +453,14 @@ ns_sprintrrf(const u_char *msg, size_t msglen,
/* address suffix: provided only when prefix len != 128 */
if (pbit < 128) {
- if (rdata + pbyte >= edata) goto formerr;
+ unsigned int bytelen = sizeof(a) - pbyte;
+ if (edata - rdata < bytelen) goto formerr;
memset(&a, 0, sizeof(a));
- memcpy(&a.s6_addr[pbyte], rdata, sizeof(a) - pbyte);
+ memcpy(&a.s6_addr[pbyte], rdata, bytelen);
if (inet_ntop (AF_INET6, &a, buf, buflen) == NULL)
return -1;
addlen(strlen(buf), &buf, &buflen);
- rdata += sizeof(a) - pbyte;
+ rdata += bytelen;
}
/* prefix name: provided only when prefix len > 0 */
--
2.54.0

View File

@@ -116,6 +116,15 @@ stdenv.mkDerivation (
# enable parallel & reproducible build of glibcLocales
./0001-localedata-allow-reproducible-parallel-install-of-lo.patch
./0002-Makeconfig-make-inst_complocaledir-overridable.patch
# Security fixes.
#
# Can be dropped on 2.44. The first patch is only to make it
# easier to backport the fix for CVE-2026-6238 and it seems
# useful in its own right anyhow.
./0001-resolv-Check-for-inet_ntop-failure-in-ns_sprintrrf.patch
./0002-resolv-More-types-as-unknown-in-ns_sprintrrf-CVE-202.patch
./0003-resolv-Fix-buffer-overreads-in-ns_sprintrrf-CVE-2026.patch
]
/*
NVCC does not support ARM intrinsics. Since <math.h> is pulled in by almost

View File

@@ -95,6 +95,26 @@ stdenv.mkDerivation (finalAttrs: {
(replaceVars ./souploader.diff {
nixLibSoup3Path = "${lib.getLib libsoup_3}/lib";
})
# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11262
(fetchpatch {
name = "GStreamer-SA-2026-0021-1.patch";
url = "https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/35a905a92f4cfc85941c6c820009ac9219f755b2.patch";
sha256 = "sha256-1SgQo+wb2Adcgrz3zn6/qn248vnBdPuk2oJ1v9+Dbzo=";
stripLen = 2;
})
(fetchpatch {
name = "GStreamer-SA-2026-0021-2.patch";
url = "https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/0d819ceb654b06bbdd54381da5363c16751758a2.patch";
sha256 = "sha256-a8P1YxLNMkYka01+8MhBO+uSzGbR186sumlQk5LuGfY=";
stripLen = 2;
})
# https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/11263
(fetchpatch {
name = "GStreamer-SA-2026-0022.patch";
url = "https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/6db6dd058ebc3607452311b7dc47b0359b40b293.patch";
sha256 = "sha256-gaBUpEdZB0PrnI1IR53jtM0kecHpUIzavUdADN1NNlQ=";
stripLen = 2;
})
];
strictDeps = true;

View File

@@ -2,7 +2,7 @@
lib,
stdenv,
llvmPackages,
fetchpatch,
python3,
fetchurl,
pkg-config,
freetype,
@@ -12,14 +12,14 @@
}:
stdenv.mkDerivation (finalAttrs: {
version = "1.3.14";
version = "1.3.15";
pname = "graphite2";
src = fetchurl {
url =
with finalAttrs;
"https://github.com/silnrsi/graphite/releases/download/${version}/${pname}-${version}.tgz";
sha256 = "1790ajyhk0ax8xxamnrk176gc9gvhadzy78qia4rd8jzm89ir7gr";
hash = "sha256-xryLQlJyRmUpf3ytDFWJcoXGc/m45ts1IqzoM1k/4LE=";
};
outputs = [
@@ -29,6 +29,7 @@ stdenv.mkDerivation (finalAttrs: {
nativeBuildInputs = [
pkg-config
(python3.withPackages (ps: [ ps.fonttools ]))
cmake
];
buildInputs = [
@@ -40,14 +41,7 @@ stdenv.mkDerivation (finalAttrs: {
}
);
patches = [
# Fix build with gcc15
(fetchpatch {
url = "https://src.fedoraproject.org/rpms/graphite2/raw/deba28323b0a3b7a3dcfd06df1efc2195b102ed7/f/graphite2-1.3.14-gcc15.patch";
hash = "sha256-vkkGkHkcsj1mD3OHCHLWWgpcmFDv8leC4YQm+TsbIUw=";
})
]
++ lib.optionals stdenv.hostPlatform.isDarwin [ ./macosx.patch ];
patches = lib.optionals stdenv.hostPlatform.isDarwin [ ./macosx.patch ];
postPatch = ''
# disable broken 'nametabletest' test, fails on gcc-13:
# https://github.com/silnrsi/graphite/pull/74
@@ -61,22 +55,6 @@ stdenv.mkDerivation (finalAttrs: {
# headers are located in the dev output:
substituteInPlace CMakeLists.txt \
--replace-fail ' ''${CMAKE_INSTALL_PREFIX}/include' " ${placeholder "dev"}/include"
# Fix the build with CMake 4.
#
# See: <https://github.com/silnrsi/graphite/issues/98>
badCmakeFiles=(
CMakeLists.txt
src/CMakeLists.txt
tests/{bittwiddling,json,sparsetest,utftest}/CMakeLists.txt
gr2fonttest/CMakeLists.txt
)
for file in "''${badCmakeFiles[@]}"; do
substituteInPlace "$file" \
--replace-fail \
'CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0 FATAL_ERROR)' \
'CMAKE_MINIMUM_REQUIRED(VERSION 3.10 FATAL_ERROR)'
done
'';
cmakeFlags = lib.optionals static [

View File

@@ -2,6 +2,7 @@
lib,
stdenv,
fetchurl,
fetchpatch,
removeReferencesTo,
runtimeShellPackage,
texinfo,
@@ -25,13 +26,23 @@ assert (doCheck && stdenv.hostPlatform.isLinux) -> glibcLocales != null;
stdenv.mkDerivation rec {
pname = "gawk" + lib.optionalString interactive "-interactive";
version = "5.4.0";
version = "5.4.1";
src = fetchurl {
url = "mirror://gnu/gawk/gawk-${version}.tar.xz";
hash = "sha256-PdQw8M07RCjGw/avwCG5zTwfjJP3pojcJoykKKkLSsE=";
hash = "sha256-B/b3NCt/6+QxP8LCVCrZPWT+IK2HFyABCfEFqCb1/Tc=";
};
patches = [
# When building gawk without gmp and mpfr, gawk 5.4.1 causes build failures
# in downstream packages such as GCC and libpng.
# Discussion on bug-gawk:
# https://lists.gnu.org/archive/html/bug-gawk/2026-07/msg00013.html
# Vendored since we can't use fetchpatch:
# https://gitweb.git.savannah.gnu.org/gitweb/?p=gawk.git;a=commit;h=bf85f8a3175af703597082d4c7e0abc2066a44d3
./node-struct-without-gmp-mpfr.patch
];
# When we do build separate interactive version, it makes sense to always include man.
outputs = [
"out"

View File

@@ -0,0 +1,79 @@
From bf85f8a3175af703597082d4c7e0abc2066a44d3 Mon Sep 17 00:00:00 2001
From: "Arnold D. Robbins" <arnold@skeeve.com>
Date: Tue, 14 Jul 2026 10:14:50 +0300
Subject: [PATCH] Workaround fix for systems without MPFR and GMP.
---
ChangeLog | 8 ++++++++
awk.h | 23 ++++++++++++++---------
2 files changed, 22 insertions(+), 9 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 6a955eed..42bd2c48 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,14 @@
* builtin.c (do_dump_node): Add the size of each object to
the printout.
+ Unrelated: Make things works when built on systems without
+ the GMP and MPFR libraries. Thanks to Thomas Trepl <ttrepl@yahoo.de>
+ and Bruce Dubbs <bdubbs@linuxfromscratch.org> for the reports.
+
+ * awk.h (struct exp_node): Add alignment padding when we don't
+ have MPFR. This is a hack, pending a total refactoring of
+ the NODE structure.
+
2026-07-08 Arnold D. Robbins <arnold@skeeve.com>
* 5.4.1: Release tar ball made.
diff --git a/awk.h b/awk.h
index dbad0d81..f4a84300 100644
--- a/awk.h
+++ b/awk.h
@@ -406,17 +406,24 @@ typedef struct exp_node {
} nodep;
struct {
-#ifdef HAVE_MPFR
union {
AWKNUM fltnum;
+#ifdef HAVE_MPFR
mpfr_t mpnum;
mpz_t mpi;
- } nm;
- int rndmode;
#else
- AWKNUM fltnum;
- int for_alignment_only; // especially on 32-bit
-#endif
+ // 7/2026:
+ // This is a workaround for systems that build
+ // gawk without MPFR and GMP. The NODE struct
+ // desperately needs to be refactored.
+#if SIZEOF_VOID_P == 4
+ char alignment[28];
+#else // SIZEOF_VOID_P != 4
+ char alignment[48];
+#endif // SIZEOF_VOID_P != 4
+#endif // HAVE_MPFR
+ } nm;
+ int rndmode; // only used for MPFR.
char *sp;
size_t slen;
int idx;
@@ -561,10 +568,8 @@ typedef struct exp_node {
#ifdef HAVE_MPFR
#define mpg_numbr sub.val.nm.mpnum
#define mpg_i sub.val.nm.mpi
-#define numbr sub.val.nm.fltnum
-#else
-#define numbr sub.val.fltnum
#endif
+#define numbr sub.val.nm.fltnum
#define typed_re sub.val.typre
/*
--
2.54.0