summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2024-04-10 17:36:23 -0400
committerbill-auger <mr.j.spam.me@gmail.com>2024-04-14 01:21:54 -0400
commitf9dff9b876e99187b565de5175693fb63c912e0d (patch)
treece04556c8e93101ce13b53ec498de94b97589eb7
parentaa59d210cdc0421f4e3562121c92b08b4500257c (diff)
netpbm: upgrade to v10.86.41
-rw-r--r--libre/netpbm/PKGBUILD184
-rw-r--r--libre/netpbm/keys/pgp/5357F3B111688D88C1D88119FCF2CB179205AC90.asc30
-rw-r--r--libre/netpbm/netpbm-CAN-2005-2471.patch6
-rw-r--r--libre/netpbm/netpbm-security-code.patch168
-rw-r--r--libre/netpbm/netpbm-security-scripts.patch57
-rw-r--r--libre/netpbm/nonfree-licenses-docs.patch51
-rw-r--r--libre/netpbm/reproducible-man-gzip.patch20
-rw-r--r--libre/netpbm/use-source-date-epoch.patch13
8 files changed, 268 insertions, 261 deletions
diff --git a/libre/netpbm/PKGBUILD b/libre/netpbm/PKGBUILD
index 69ad75e8c..deb443f15 100644
--- a/libre/netpbm/PKGBUILD
+++ b/libre/netpbm/PKGBUILD
@@ -1,95 +1,106 @@
+# Maintainer (arch): Caleb Maclennan <caleb@alerque.com>
# Maintainer: Omar Vega Ramos <ovruni@gnu.org.pe>
# Contributor: André Silva <emulatorman@hyperbola.info>
-# Maintainer (Arch):
+# Contributor: bill-auger <bill-auger@programmer.net>
+
+
# parabola changes and rationale:
# - Added armv7h and i686 support
-# - Removed nonfree parts
+# - Removed non-free parts
+
pkgname=netpbm
-pkgver=10.73.42
-pkgrel=2
+pkgver=10.86.41
+pkgrel=1
pkgrel+=.parabola1
-pkgdesc="A toolkit for manipulation of graphic images"
-pkgdesc+=", without nonfree parts"
-arch=('x86_64')
-arch+=('i686' 'armv7h')
-license=('custom' 'BSD' 'GPL' 'LGPL')
+pkgdesc='A toolkit for manipulation of graphic images'
+arch=(x86_64)
+arch+=(armv7h i686)
+#license=(Artistic-1.0 GPL-2.0-only LGPL-2.0.only MIT) # TODO: SPDX
+license=('custom' 'custom:BSD3' 'GPL' 'LGPL')
url="http://netpbm.sourceforge.net/"
-depends=('perl' 'libpng' 'libtiff' 'libxml2')
-makedepends=('jbigkit' 'subversion')
-options=('!makeflags')
+depends=(bash
+ gcc-libs
+ glibc
+ jbigkit
+ libjpeg-turbo
+ libpng
+ libtiff
+ libxml2
+ perl
+ zlib)
+options=(!makeflags)
# Get docs with: wget --recursive --relative -nH http://netpbm.sourceforge.net/doc/
source=(https://downloads.sourceforge.net/project/netpbm/super_stable/$pkgver/netpbm-$pkgver.tgz
https://sources.archlinux.org/other/packages/netpbm/netpbm-doc-31Jan2014.tar.xz{,.sig}
- netpbm-CAN-2005-2471.patch netpbm-security-code.patch netpbm-security-scripts.patch
- reproducible-man-gzip.patch use-source-date-epoch.patch)
-sha256sums=('f1ddaa753d189aa7760a75265b6f7ab96eeedac3e2493ef57227824d058d528c'
+ netpbm-CAN-2005-2471.patch
+ netpbm-security-code.patch
+ netpbm-security-scripts.patch
+ reproducible-man-gzip.patch)
+sha256sums=('045f7796224a801512efb5e7d6150a321674cbfb566128b21abf8d4ba65b4513'
'74bcf840ee643c6917330c382484010cb99c004a3fcf05391bebcac63815acb3'
'SKIP'
- '991aba7897e0710687369b4e2edfba1397ecd77d62578eac496afbc47b5ca970'
- '343a72eb67edb338bc593d823ced770a0fe44c4c1fa4f4ac1934b84da4431579'
- '2c397588d9cba2c40dee55c07713d5e77e0e04245db939fdc1962d7de4cf4a33'
- '8e3efdb4fcbfdc8e9a5c8e9663c7d6b9ecef3a2379ce38d2acc5669c339f6814'
- '68055341833f482c6910a56c2fdfe046978a1a92fd8442a2a9209c82ce3e4d13')
+ '7348274b72b8285add042d0f45d124c9833206ee3440bd1846cfc792b9b4d5e5'
+ '698645215d46bcee515d75847fc550ce99c5fcb6fae63dacdba1d773f327c80e'
+ '5ee27b4187577cbb9e85f6b36c5e5a421e03927f9195f888be7be2b647a5ac9d'
+ 'b0be94fbfbf247552c5cc3f1cdd93e2d549f59c3d218350ccc1bea44e9bebc9b')
validpgpkeys=('5357F3B111688D88C1D88119FCF2CB179205AC90')
-remove_program() {
+
+# parabola mksource over-rides
+_N_MKSOURCES=3 # number of upstream sources to be isolated for mksource
+mksource=( ${source[*]:0:${_N_MKSOURCES}} )
+mksha256sums=( ${sha256sums[*]:0:${_N_MKSOURCES}} )
+mkvalidpgpkeys=( ${validpgpkeys[*]} )
+mksource+=(nonfree-licenses-docs.patch)
+mksha256sums+=(5ee57bba37dca542df9abea1061d8d343a1ba299038f0e01888210acc08d4779)
+source=(https://repo.parabola.nu/other/${pkgname}-libre/${pkgname}-${pkgver}-parabola.tar.gz{,.sig}
+ ${source[*]:${_N_MKSOURCES}})
+sha256sums=(a75a8530140f0d6b59b2902cef23d388192bd278eb391fbc2cee265fef816917
+ SKIP
+ ${sha256sums[*]:${_N_MKSOURCES}})
+validpgpkeys=(3954A7AB837D0EA9CFA9798925DB7D9B5A8D4B40) # bill-auger
+
+
+_UNLICENSED_FILES=( converter/ppm/ppmtogif.c
+ other/pamchannel.c
+ converter/other/pamtopnm.c
+ converter/pbm/pbmto4425.c
+ converter/pbm/pbmtoln03.c
+ converter/pbm/pbmtolps.c
+ converter/pbm/pbmtopk.c
+ converter/pbm/pktopbm.c
+ converter/ppm/ppmtopjxl.c
+ converter/pgm/spottopgm.c)
+
+
+mksource() {
+ remove_program() {
file="$1"
progname="$(basename ${file} | sed 's/\.c$//')"
rm -v "${file}"
sed -i "s/${progname}//g" "$(dirname ${file})/Makefile"
sed -i "s/${progname}\.1//g" buildtools/manpage.mk
-}
+ }
-prepare() {
- cd $pkgname-$pkgver
- patch -p1 < ../netpbm-CAN-2005-2471.patch
- patch -p1 < ../netpbm-security-code.patch
- patch -p1 < ../netpbm-security-scripts.patch
- patch -p1 < ../reproducible-man-gzip.patch
- patch -p1 < ../use-source-date-epoch.patch
- # sed -i 's|#!/usr/bin/python|#!/usr/bin/python2|' buildtools/makeman
- # sed -i 's|@python|@python2|' buildtools/manpage.mk
-
- cp config.mk.in config.mk
- [ "${CARCH}" = 'x86_64' ] && echo 'CFLAGS_SHLIB = -fPIC' >> config.mk
- [ "${CARCH}" = 'armv7h' ] && echo 'CFLAGS_SHLIB = -fPIC' >> config.mk
- echo "NETPBM_DOCURL = file://${srcdir}/doc" >> config.mk
- echo 'TIFFLIB = libtiff.so' >> config.mk
- echo 'JPEGLIB = libjpeg.so' >> config.mk
- echo 'PNGLIB = libpng.so' >> config.mk
- echo 'ZLIB = libz.so' >> config.mk
- echo 'JBIGLIB = /usr/lib/libjbig.a' >> config.mk
-
- sed -i 's|misc|share/netpbm|' common.mk
- sed -i 's|/link|/lib|' lib/Makefile
- sed -i 's|install.manwebmain install.manweb install.man|install.man|' GNUmakefile
+ cd $pkgname-$pkgver
# Remove the converter/ppm/hpcdtoppm directory:
# - hpcdtoppm: as hpcdtoppm is not even redistributable, this hpcdtoppm only
- # prints a message to steer users toward downloading "the real hpcdtoppm"
- # which is nonfree
- # - pcdovtoppm: no license information
- rm -rv converter/ppm/hpcdtoppm
- sed '/\.\/converter\/ppm\/hpcdtoppm \\/d' -i GNUmakefile
+ # prints a message to download "the real hpcdtoppm" (non-free)
+ # - pcdovtoppm: no licensing information
+ rm -rfv converter/ppm/hpcdtoppm
+ sed '/\.\/converter\/ppm\/hpcdtoppm\/ \\/d' -i GNUmakefile
sed 's/hpcdtoppm//g' -i converter/ppm/Makefile
- # Removing programs without license information
- remove_program converter/other/pamtopnm.c
- remove_program converter/pbm/pbmto4425.c
- remove_program converter/pbm/pbmtoln03.c
- remove_program converter/pbm/pbmtolps.c
- remove_program converter/pbm/pbmtopk.c
- remove_program converter/pbm/pktopbm.c
- remove_program converter/pgm/spottopgm.c
- remove_program converter/ppm/ppmtogif.c
- remove_program converter/ppm/ppmtopjxl.c
- remove_program other/pamchannel.c
+ # Remove programs without licensing information
+ for f in ${_UNLICENSED_FILES[*]} ; do remove_program $f ; done ;
# Tests have no license information
rm -v -rf test/
+
# Remove test from "SUPPORT_SUBDIRS = urt icon buildtools test"
awk '{
if ($1 != "SUPPORT_SUBDIRS") {
@@ -106,9 +117,44 @@ prepare() {
sed -i '/pnmtopnm/d' netpbm.c
- #Removing references about nonfree licenses part
- sed -i '338,383d' doc/copyright_summary
+ # Remove references about non-free licensed parts
+ echo "applying nonfree-licenses-docs.patch"
+ patch -p0 < ../nonfree-licenses-docs.patch
+ unset remove_program
+}
+
+
+prepare() {
+ # delete patches which would apply to deleted files
+ _UNLICENSED_FILES+=(converter/ppm/hpcdtoppm)
+ local files="($(sed 's|/|\\/|g ; s|\.|\\.|g' <<<${_UNLICENSED_FILES[*]} | tr ' ' '|'))"
+ local awk_script="( \$1 !~ /^a\/$files/ ) { print \"diff --git \"\$0 }"
+ awk -i inplace -v INPLACE_SUFFIX=.orig "$awk_script" RS='diff --git ' FS='\n' *.patch
+
+
+ # arch patching ##
+
+ cd $pkgname-$pkgver
+
+ patch -p1 < ../netpbm-CAN-2005-2471.patch
+ patch -p1 < ../netpbm-security-code.patch
+ patch -p1 < ../netpbm-security-scripts.patch
+ patch -p1 < ../reproducible-man-gzip.patch
+
+ cp config.mk.in config.mk
+ [ "${CARCH}" = 'x86_64' ] && echo 'CFLAGS_SHLIB = -fPIC' >> config.mk
+ [ "${CARCH}" = 'armv7h' ] && echo 'CFLAGS_SHLIB = -fPIC' >> config.mk
+ echo "NETPBM_DOCURL = file://${srcdir}/doc" >> config.mk
+ echo 'TIFFLIB = libtiff.so' >> config.mk
+ echo 'JPEGLIB = libjpeg.so' >> config.mk
+ echo 'PNGLIB = libpng.so' >> config.mk
+ echo 'ZLIB = libz.so' >> config.mk
+ echo 'JBIGLIB = /usr/lib/libjbig.a' >> config.mk
+
+ sed -i 's|misc|share/netpbm|' common.mk
+ sed -e 's|/sharedlink|/lib|' -e 's|/staticlink|/lib|' -i lib/Makefile
+ sed -i 's|install.manwebmain install.manweb install.man|install.man|' GNUmakefile
}
build() {
@@ -124,16 +170,16 @@ package() {
cd $pkgname-$pkgver
make pkgdir="${pkgdir}/usr" PKGMANDIR=share/man install-run install-dev
-# Removing dummy man pages
- rm "${pkgdir}"/usr/share/man/man{1,3,5}/*
-
- # make MAKEMAN="${srcdir}/$pkgname-$pkgver/buildtools/makeman" MANDIR="${pkgdir}/usr/share/man" \
- # -C ../doc -f "${srcdir}/$pkgname-$pkgver/buildtools/manpage.mk" installman
-
# Replace obsolete utility
echo -e '#!/bin/sh\npamditherbw $@ | pamtopnm\n' > "${pkgdir}/usr/bin/pgmtopbm"
# Licensing. Note that each program in the package has a separate license.
install -D -m644 "${srcdir}/$pkgname-$pkgver/doc/copyright_summary" \
"${pkgdir}/usr/share/licenses/${pkgname}/copyright_summary.txt"
+
+
+ ## parabola changes ##
+
+ # Remove symlinks to deleted programs
+ rm -v "${pkgdir}"/usr/bin/pnmtopnm
}
diff --git a/libre/netpbm/keys/pgp/5357F3B111688D88C1D88119FCF2CB179205AC90.asc b/libre/netpbm/keys/pgp/5357F3B111688D88C1D88119FCF2CB179205AC90.asc
new file mode 100644
index 000000000..6a31d17a7
--- /dev/null
+++ b/libre/netpbm/keys/pgp/5357F3B111688D88C1D88119FCF2CB179205AC90.asc
@@ -0,0 +1,30 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQENBE2uPGoBCADRwwKRvWByYVE0603LkklzYjpCtfSQRWASQnozo9ZcUMxNXr8x
+zKxzLZKIh6eTCNpizI0e3WNSN/+rDcen9dJiycPKodWTNRjfCgwW5pr92pwXjHIh
+uKGwXrGN4iV0J7E9mLroxjKcSSqMZV7BEK3TGWdSW1dh7D09MexUUfSlKKKVmgY3
+CWhMLYolVVrLIczIvkRi4bRDAQi57nqQvgk//NTjmfZnA/XaxM57bXj/gCKvcRE7
+jPruwANyZ5Vjo/IbEm83J/WJx035KfiXFBYGBVLK9KaqD8UCUClJ7N+niIARikP+
+GxFWY4sTRdtW7yDQ8nAhpQxBBWIaaqB+b8B3ABEBAAG0IkVyaWMgQmVsYW5nZXIg
+PGVyaWNAYXJjaGxpbnV4Lm9yZz6JAU8EEwECACIFAk2uPGoCGwMGCwkIBwMCBhUI
+AgkKCwQWAgMBAh4BAheAACEJEPzyyxeSBayQFiEEU1fzsRFojYjB2IEZ/PLLF5IF
+rJCiSggAolQwd1dvgNVlysaYOT6g8CZO1I5eLxdTyKbyw/ww3e9wtkGW0XcgoNxq
+ZO9cuuyjPAn6hIn3nug2qPVmBfhbO/PMvS+617e66104JmxBhH4hqU2c4CfRJmt9
+0WRHbt3Zsy/0MSQStS/Lda5IFwunpLjwAIvn2L5IPtfAg6s5O5qyhpapm0w++bTS
+1aHjZRZMVdAXm2yVixZ98NQ9S6o7+VrgipYR/oxb1X88yABJXrHF9ca16QQXXDfz
+niR0sv/00/PtVgXZ7fr7jeyrTk96F4+DcRTFFwXASChd3jwHZ7TjBhPBB+gNBwmR
+BihNCnrGf26+8TNB/hAXDDaxcwjzHLkBDQRNrjxqAQgA0XBT84b+ttT/6R/Lt2q1
+uFSb2+CwVkrjyI1DQVg0ATjUKyjgypvi78X3fWfpPX8InnBdd6d8uBrpzr0Jlzto
+7MMp+VaKH1D7hSQPRVn1u00P1Wo7LQigsYgFoMsfR2N/PK6j6EZm9Epsnawz85ic
+Y2qsvXokTtz3tsmeZq8bUc5BNq6fl9rawK2ZPRlZ69xjR564nm2qfN48vqknJIsh
+g5oEAIl20MdbXECju8LYh1PfsB6XPQNMpTRrasJnDhB/20xnflL1X6vf2MYI0VCP
+vGZxoQxqoLUM5MMqzkzW//9M7+eio4WIaYXJzYjQv/ZRFkTGgnZIOSTPaEfhhnLi
+jwARAQABiQE2BBgBAgAJBQJNrjxqAhsMACEJEPzyyxeSBayQFiEEU1fzsRFojYjB
+2IEZ/PLLF5IFrJA2Wwf6Am4E5AvHXSRsRmjwLjptaDp67WerwKwnqzezyxaGj2c5
+mCarysywJa6G7CEgMqIWu9ADSnkKh8Qg+fzdrhuqPONshjDWZJwNlkoIxILvgkxl
+RcQ9BGEi0CWzF2Zk8kxZnXIUVV4XW94JXXJvoW0aWp1bj8iFztf1tMvrk1YXo5Rd
+TiDucTjU27zW0aIjDIr1/r11mO5TfZGc8Kw1TCEWmT6GmJBWI/8vwCxpsvoXKtPV
+xoFwlwBLSVW7gAACvoUbBVycmXW8+j1fczzh+Wn1Y01lxsgGmPwoYjzp8wFm2OCh
+LFcXnCero1/fOThZH15G+l7DuA4hn+yB5A2w38URiQ==
+=NtCF
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/libre/netpbm/netpbm-CAN-2005-2471.patch b/libre/netpbm/netpbm-CAN-2005-2471.patch
index e4e93735b..f7f2ae4ef 100644
--- a/libre/netpbm/netpbm-CAN-2005-2471.patch
+++ b/libre/netpbm/netpbm-CAN-2005-2471.patch
@@ -1,9 +1,9 @@
--- netpbm-10.29/converter/other/pstopnm.c.CAN-2005-2471 2005-08-15 02:39:46.000000000 +0200
+++ netpbm-10.29/converter/other/pstopnm.c 2005-08-16 15:38:15.000000000 +0200
-@@ -818,11 +818,11 @@
+@@ -896,11 +896,11 @@
ghostscriptProg, arg0,
deviceopt, outfileopt, gopt, ropt, textalphabitsopt,
- "-q", "-dNOPAUSE",
+ "-q", "-dNOPAUSE",
- "-dSAFER", "-");
+ "-dPARANOIDSAFER", "-");
}
@@ -11,6 +11,6 @@
execl(ghostscriptProg, arg0, deviceopt, outfileopt, gopt, ropt,
- textalphabitsopt, "-q", "-dNOPAUSE", "-dSAFER", "-", NULL);
+ textalphabitsopt, "-q", "-dNOPAUSE", "-dPARANOIDSAFER", "-", NULL);
-
+
pm_error("execl() of Ghostscript ('%s') failed, errno=%d (%s)",
ghostscriptProg, errno, strerror(errno));
diff --git a/libre/netpbm/netpbm-security-code.patch b/libre/netpbm/netpbm-security-code.patch
index 9e2e259f5..b3b92d4bd 100644
--- a/libre/netpbm/netpbm-security-code.patch
+++ b/libre/netpbm/netpbm-security-code.patch
@@ -32,13 +32,13 @@ index aac7479..5f1a51a 100644
--- a/converter/other/gemtopnm.c
+++ b/converter/other/gemtopnm.c
@@ -106,6 +106,7 @@ main(argc, argv)
-
- pnm_writepnminit( stdout, cols, rows, MAXVAL, type, 0 );
+ else
+ type = PPM_TYPE;
+ overflow_add(cols, padright);
- {
- /* allocate input row data structure */
- int plane;
+ pnm_writepnminit( stdout, cols, rows, MAXVAL, type, 0 );
+
+ {
diff --git a/converter/other/jpegtopnm.c b/converter/other/jpegtopnm.c
index ab3b18e..c324b86 100644
--- a/converter/other/jpegtopnm.c
@@ -318,21 +318,21 @@ index 2f8a42b..1c8d236 100644
--- a/converter/pbm/pbmtoppa/pbm.c
+++ b/converter/pbm/pbmtoppa/pbm.c
@@ -106,6 +106,7 @@ int pbm_readline(pbm_stat* pbm,unsigned char* data)
- return 0;
-
- case P4:
-+ overflow_add(pbm->width, 7);
- tmp=(pbm->width+7)/8;
- tmp2=fread(data,1,tmp,pbm->fptr);
- if(tmp2 == tmp)
-@@ -130,6 +131,7 @@ void pbm_unreadline (pbm_stat *pbm, void *data)
- return;
-
- pbm->unread = 1;
-+ overflow_add(pbm->width, 7);
- pbm->revdata = malloc ((pbm->width+7)/8);
- memcpy (pbm->revdata, data, (pbm->width+7)/8);
- pbm->current_line--;
+ break;
+ case P4: {
+ int tmp, tmp2;
++ overflow_add(pbmStatP->width, 7);
+ tmp = (pbmStatP->width+7)/8;
+ tmp2 = fread(data,1,tmp,pbmStatP->fptr);
+ if (tmp2 == tmp) {
+@@ -185,6 +186,7 @@ void pbm_unreadline (pbm_stat *pbm, void *data)
+
+ if (!pbmStatP->unread) {
+ pbmStatP->unread = 1;
++ overflow_add(pbmStatP->width, 7);
+ pbmStatP->revdata = malloc ((pbmStatP->width+7)/8);
+ memcpy(pbmStatP->revdata, data, (pbmStatP->width+7)/8);
+ --pbmStatP->current_line;
diff --git a/converter/pbm/pbmtoppa/pbmtoppa.c b/converter/pbm/pbmtoppa/pbmtoppa.c
index f43c08a..98e0284 100644
--- a/converter/pbm/pbmtoppa/pbmtoppa.c
@@ -491,7 +491,7 @@ index 662be0b..2a86efc 100644
@@ -1355,6 +1373,9 @@ dcol_to_ppm(FILE * const ifP,
if( redmaxval != maxval || greenmaxval != maxval || bluemaxval != maxval )
pm_message("scaling colors to %d bits", pm_maxvaltobits(maxval));
-
+
+ overflow_add(redmaxval, 1);
+ overflow_add(greenmaxval, 1);
+ overflow_add(bluemaxval, 1);
@@ -500,14 +500,14 @@ index 662be0b..2a86efc 100644
MALLOCARRAY_NOFAIL(bluetable, bluemaxval +1);
@@ -1784,7 +1805,9 @@ PCHG_ConvertSmall(PCHG, cmap, mask, datasize)
ChangeCount32 = *data++;
- datasize -= 2;
+ remDataSize -= 2;
+ overflow_add(ChangeCount16, ChangeCount32);
changes = ChangeCount16 + ChangeCount32;
+ overflow_add(changes, 1);
- for( i = 0; i < changes; i++ ) {
- if( totalchanges >= PCHG->TotalChanges ) goto fail;
- if( datasize < 2 ) goto fail;
+ for (i = 0; i < changes; ++i) {
+ if (totalchanges >= pchgP->TotalChanges) goto fail;
+ if (remDataSize < 2) goto fail;
@@ -2049,6 +2072,9 @@ read_pchg(FILE * const ifP,
cmap->mp_change[i] = NULL;
if( PCHG.StartLine < 0 ) {
@@ -579,51 +579,37 @@ diff --git a/converter/ppm/pjtoppm.c b/converter/ppm/pjtoppm.c
index 7b694fb..62ce77e 100644
--- a/converter/ppm/pjtoppm.c
+++ b/converter/ppm/pjtoppm.c
-@@ -127,20 +127,22 @@ main(argc, argv)
+@@ -127,11 +127,15 @@ main(argc, argv)
case 'V': /* send plane */
case 'W': /* send last plane */
- if (rows == -1 || r >= rows || image == NULL) {
-- if (rows == -1 || r >= rows)
-+ if (rows == -1 || r >= rows) {
-+ overflow_add(rows, 100);
- rows += 100;
+ if (row >= rowsX || image == NULL) {
+- if (row >= rowsX)
++ if (row >= rowsX) {
++ overflow_add(rowsX, 100);
+ rowsX += 100;
+ }
+
if (image == NULL) {
-- MALLOCARRAY(image, rows * planes);
-- MALLOCARRAY(imlen, rows * planes);
+- MALLOCARRAY(image, uintProduct(rowsX, planes));
+- MALLOCARRAY(imlen, uintProduct(rowsX, planes));
+ image = (unsigned char **)
-+ malloc3(rows , planes , sizeof(unsigned char *));
-+ imlen = (int *) malloc3(rows , planes, sizeof(int));
- }
- else {
-- image = (unsigned char **)
-- realloc(image,
-- rows * planes *
-- sizeof(unsigned char *));
-- imlen = (int *)
-- realloc(imlen, rows * planes * sizeof(int));
-- }
-+ overflow2(rows,planes);
-+ image = (unsigned char **)
-+ realloc2(image, rows * planes,
-+ sizeof(unsigned char *));
-+ imlen = (int *) realloc2(imlen, rows * planes, sizeof(int)); }
- }
- if (image == NULL || imlen == NULL)
- pm_error("out of memory");
++ malloc3(rowsX , planes , sizeof(unsigned char *));
++ imlen = (int *) malloc3(rowsX , planes, sizeof(int));
+ } else {
+ REALLOCARRAY(image, uintProduct(rowsX, planes));
+ REALLOCARRAY(imlen, uintProduct(rowsX, planes));
@@ -212,8 +214,10 @@ main(argc, argv)
- for (i = 0, c = 0; c < imlen[p + r * planes]; c += 2)
- for (cmd = image[p + r * planes][c],
- val = image[p + r * planes][c+1];
-- cmd >= 0 && i < newcols; cmd--, i++)
+ col += 2)
+ for (cmd = image[plane + row * planes][col],
+ val = image[plane + row * planes][col+1];
+- cmd >= 0 && i < newcols; cmd--, i++)
+ cmd >= 0 && i < newcols; cmd--, i++) {
buf[i] = val;
+ overflow_add(i, 1);
+ }
- cols = cols > i ? cols : i;
- free(image[p + r * planes]);
- /*
+ cols = MAX(cols, i);
+ free(image[plane + row * planes]);
+ /*
@@ -224,6 +228,7 @@ main(argc, argv)
image[p + r * planes] = (unsigned char *) realloc(buf, i);
}
@@ -831,9 +817,9 @@ index 6ba4cb4..fc6a498 100644
--- a/converter/ppm/sldtoppm.c
+++ b/converter/ppm/sldtoppm.c
@@ -464,6 +464,8 @@ slider(slvecfn slvec,
-
+
/* Allocate image buffer and clear it to black. */
-
+
+ overflow_add(ixdots, 1);
+ overflow_add(iydots, 1);
pixels = ppm_allocarray(pixcols = ixdots + 1, pixrows = iydots + 1);
@@ -869,13 +855,13 @@ index f49c8d9..580e5e0 100644
--- a/editor/pbmreduce.c
+++ b/editor/pbmreduce.c
@@ -94,6 +94,7 @@ main( argc, argv )
- if (halftone == QT_FS) {
- unsigned int col;
- /* Initialize Floyd-Steinberg. */
+
+ unsigned int col;
+
+ overflow_add(newcols, 2);
- MALLOCARRAY(thiserr, newcols + 2);
- MALLOCARRAY(nexterr, newcols + 2);
- if (thiserr == NULL || nexterr == NULL)
+ MALLOCARRAY(fsP->thiserr, newcols + 2);
+ MALLOCARRAY(fsP->nexterr, newcols + 2);
+
diff --git a/editor/pnmgamma.c b/editor/pnmgamma.c
index b357b0d..ec612d3 100644
--- a/editor/pnmgamma.c
@@ -939,12 +925,12 @@ index b2448cb..b924120 100644
MALLOCARRAY(fserrP->thiserr, pamP->depth);
@@ -465,6 +466,7 @@ floydInitRow(struct pam * const pamP, struct fserr * const fserrP) {
- int col;
-
+ unsigned int col;
+
+ overflow_add(pamP->width, 2);
for (col = 0; col < pamP->width + 2; ++col) {
unsigned int plane;
- for (plane = 0; plane < pamP->depth; ++plane)
+ for (plane = 0; plane < pamP->depth; ++plane)
diff --git a/editor/pnmscalefixed.c b/editor/pnmscalefixed.c
index 884ca31..747cd8f 100644
--- a/editor/pnmscalefixed.c
@@ -1004,42 +990,6 @@ index 6cb8d3a..6f4bde9 100644
MALLOCARRAY(hist, inpam.maxval + 1);
if (hist == NULL)
pm_error("Unable to allocate memory for histogram.");
-diff --git a/generator/pbmtext.c b/generator/pbmtext.c
-index 9f4366d..445d718 100644
---- a/generator/pbmtext.c
-+++ b/generator/pbmtext.c
-@@ -96,12 +96,14 @@ parseCommandLine(int argc, const char ** argv,
-
- for (i = 1; i < argc; ++i) {
- if (i > 1) {
-+ overflow_add(totaltextsize, 1);
- totaltextsize += 1;
- text = realloc(text, totaltextsize);
- if (text == NULL)
- pm_error("out of memory allocating space for input text");
- strcat(text, " ");
-- }
-+ }
-+ overflow_add(totaltextsize, strlen(argv[i]));
- totaltextsize += strlen(argv[i]);
- text = realloc(text, totaltextsize);
- if (text == NULL)
-@@ -712,6 +714,7 @@ getText(const char cmdline_text[],
- pm_error("A line of input text is longer than %u characters."
- "Cannot process.", (unsigned)sizeof(buf)-1);
- if (lineCount >= maxlines) {
-+ overflow2(maxlines, 2);
- maxlines *= 2;
- REALLOCARRAY(text_array, maxlines);
- if (text_array == NULL)
-@@ -832,6 +835,7 @@ main(int argc, const char *argv[]) {
- hmargin = fontP->maxwidth;
- } else {
- vmargin = fontP->maxheight;
-+ overflow2(2, fontP->maxwidth);
- hmargin = 2 * fontP->maxwidth;
- }
- }
diff --git a/lib/libpam.c b/lib/libpam.c
index cc6368e..4e10572 100644
--- a/lib/libpam.c
@@ -1049,13 +999,13 @@ index cc6368e..4e10572 100644
tuple * tuplerow;
- tuplerow = malloc(pamP->width * (sizeof(tuple *) + bytesPerTuple));
--
+-
+ overflow_add(sizeof(tuple *), bytesPerTuple);
+ tuplerow = malloc2(pamP->width, (sizeof(tuple *) + bytesPerTuple));
+
if (tuplerow != NULL) {
/* Now we initialize the pointers to the individual tuples
- to make this a regulation C two dimensional array.
+ to make this a regulation C two dimensional array.
diff --git a/lib/libpammap.c b/lib/libpammap.c
index 55e1d3f..04b1ba3 100644
--- a/lib/libpammap.c
@@ -1143,7 +1093,7 @@ index e9f1405..da54391 100644
+void __overflow2(int, int);
+void overflow3(int, int, int);
+void overflow_add(int, int);
-+
++void *realloc2(void*, int, int);
#endif
diff --git a/other/pnmcolormap.c b/other/pnmcolormap.c
diff --git a/libre/netpbm/netpbm-security-scripts.patch b/libre/netpbm/netpbm-security-scripts.patch
index 0dfe84f43..66fd14bea 100644
--- a/libre/netpbm/netpbm-security-scripts.patch
+++ b/libre/netpbm/netpbm-security-scripts.patch
@@ -2,18 +2,6 @@ diff --git a/converter/other/anytopnm b/converter/other/anytopnm
index acf8813..335312a 100755
--- a/converter/other/anytopnm
+++ b/converter/other/anytopnm
-@@ -511,10 +511,7 @@ else
- inputFile="-"
- fi
-
--tempdir="${TMPDIR-/tmp}/anytopnm.$$"
--mkdir -m 0700 $tempdir || \
-- { echo "Could not create temporary file. Exiting."; exit 1;}
--trap 'rm -rf $tempdir' 0
-+tempdir=$(mktemp -d -t anytopnm.XXXXXXXXXX) || exit 1
-
- # Take out all spaces
- # Find the filename extension for last-ditch efforts later
@@ -537,12 +534,17 @@ typeDescription=`file "$file" | cut -d: -f2- | cut -c2-`
determineType "$file" "$mimeType" "$typeDescription" "$fileExtension"
@@ -35,38 +23,10 @@ index acf8813..335312a 100755
+fi
+
exit 0
-diff --git a/editor/pamstretch-gen b/editor/pamstretch-gen
-index ba0e818..250fca0 100755
---- a/editor/pamstretch-gen
-+++ b/editor/pamstretch-gen
-@@ -31,9 +31,7 @@ if [ "$1" = "" ]; then
- exit 1
- fi
-
--tempdir="${TMPDIR-/tmp}/pamstretch-gen.$$"
--mkdir -m 0700 $tempdir || \
-- { echo "Could not create temporary file. Exiting."; exit 1;}
-+tempfile=$(mktemp /tmp/pnmig.XXXXXXXXXX) || exit 1
- trap 'rm -rf $tempdir' 0 1 3 15
-
- tempfile=$tempdir/pnmig
diff --git a/editor/pnmmargin b/editor/pnmmargin
index 0f57d1d..e0d3625 100755
--- a/editor/pnmmargin
+++ b/editor/pnmmargin
-@@ -11,11 +11,7 @@
- # documentation. This software is provided "as is" without express or
- # implied warranty.
-
--tempdir="${TMPDIR-/tmp}/pnmmargin.$$"
--mkdir -m 0700 $tempdir || \
-- { echo "Could not create temporary file. Exiting." 1>&2; exit 1;}
--trap 'rm -rf $tempdir' 0 1 3 15
--
-+tempdir=$(mktemp -d -t ppmmargin.XXXXXXX) || exit 1
- tmp1=$tempdir/pnmm1
- tmp2=$tempdir/pnmm2
- tmp3=$tempdir/pnmm3
@@ -90,6 +86,7 @@ else
-white | -black )
pnmpad $plainopt $color \
@@ -348,22 +308,5 @@ index 027fc79..8eb094f 100755
+system("rm $tmpdir/junk*$$.ppm");
exit(0);
-diff --git a/editor/ppmshadow b/editor/ppmshadow
-index 62cdf8b..72e1b22 100755
---- a/editor/ppmshadow
-+++ b/editor/ppmshadow
-@@ -97,9 +97,10 @@ sub makeConvolutionKernel($$) {
-
-
- my $tmpdir = $ENV{TMPDIR} || "/tmp";
--my $ourtmp = "$tmpdir/ppmshadow$$";
--mkdir($ourtmp, 0777) or
-- die("Unable to create directory for temporary files '$ourtmp");
-+my $ourtmp; chomp($ourtmp = `mktemp -d -t PPMshadow.XXXXXX`);
-+if ($? >> 8) {
-+ die "Can't create directory for temporary files";
-+}
-
- # Process command line options
diff --git a/libre/netpbm/nonfree-licenses-docs.patch b/libre/netpbm/nonfree-licenses-docs.patch
new file mode 100644
index 000000000..2ccaaab25
--- /dev/null
+++ b/libre/netpbm/nonfree-licenses-docs.patch
@@ -0,0 +1,51 @@
+--- doc/copyright_summary 2024-04-13 16:55:26.577301602 -0400
++++ doc/copyright_summary 2024-04-13 16:55:26.580634935 -0400
+@@ -335,48 +335,3 @@
+ yuvsplittoppm: (A) 1993 Marcel Wijkstra <wijkstra@fwi.uva.nl>
+ yuvtoppm: (A) 1987-1991 Jef Poskanzer, Abekas Video Systems Inc., DHD PostImage Inc.
+ zeisstopnm: (A) 1993 Oliver Trepte <oliver@fysik4.kth.se>
+-
+-==============================================================================
+-NON-FREE:
+-
+-The following programs have restrictions on their use or source:
+-
+-hpcdtoppm package:
+-==================
+-hpcdtoppm pcdindex
+-
+-* Copyright (c) 1992, 1993, 1994 by Hadmut Danisch (danisch@ira.uka.de).
+-* Permission to use and distribute this software and its
+-* documentation for noncommercial use and without fee is hereby granted,
+-* provided that the above copyright notice appear in all copies and that
+-* both that copyright notice and this permission notice appear in
+-* supporting documentation. It is not allowed to sell this software in
+-* any way. This software is not public domain.
+-
+-Note that Hpcdtoppm and Pcdindex are not distributed in the main Netpbm
+-package on Sourceforge, as Sourceforge does not offer distribution services
+-for software licensed in this way. These programs are distributed in the
+-supplemental Netpbm package on Ibiblio.
+-
+-filter to create GIFs - patent restricted. (http://www.unisys.com/unisys/lzw/)
+-ppmtogif: (A) 1989 Jef Poskanzer
+-
+-The Unisys patent, at least in the US, expired in 2003.
+-
+-=============================================================================
+-UNKNOWN, SO NOT DISTRIBUTED:
+-
+-The following programs are in the upstream source package, but do not
+-have sufficient copyright and license information to be redistributed:
+-
+-pamchannel: No copyright / license text found
+-pamtopnm: No copyright / license text found
+-pbmto4425: No copyright / license text found
+-pbmtoln03: No copyright / license text found
+-pbmtolps: No copyright / license text found
+-pbmtopk: No copyright / license text found
+-pktopbm: No copyright / license text found
+-ppmtopjxl: No copyright / license text found
+-spottopgm: No copyright / license text found
+-
+-
diff --git a/libre/netpbm/reproducible-man-gzip.patch b/libre/netpbm/reproducible-man-gzip.patch
index f6f4f0df7..ec06eaf1f 100644
--- a/libre/netpbm/reproducible-man-gzip.patch
+++ b/libre/netpbm/reproducible-man-gzip.patch
@@ -2,15 +2,15 @@ diff -aur netpbm-10.73.31.old/buildtools/manpage.mk netpbm-10.73.31/buildtools/m
--- netpbm-10.73.31.old/buildtools/manpage.mk 2020-05-28 18:41:20.400790506 +0200
+++ netpbm-10.73.31/buildtools/manpage.mk 2020-05-28 18:50:50.444143414 +0200
@@ -388,9 +388,9 @@
- # This will install the generated man pages
- installman:
+ .PHONY : installman
+ installman: report
set -x
-- for f in netpbm.1 $(MAN1); do if [ -f $$f ]; then gzip <$$f >$(MANDIR)/man1/$$f.gz; fi; done
-- for f in $(MAN3); do if [ -f $$f ]; then gzip <$$f >$(MANDIR)/man3/$$f.gz; fi; done
-- for f in $(MAN5); do if [ -f $$f ]; then gzip <$$f >$(MANDIR)/man5/$$f.gz; fi; done
-+ for f in netpbm.1 $(MAN1); do if [ -f $$f ]; then gzip -n <$$f >$(MANDIR)/man1/$$f.gz; fi; done
-+ for f in $(MAN3); do if [ -f $$f ]; then gzip -n <$$f >$(MANDIR)/man3/$$f.gz; fi; done
-+ for f in $(MAN5); do if [ -f $$f ]; then gzip -n <$$f >$(MANDIR)/man5/$$f.gz; fi; done
+- for f in $(wildcard $(MAN1)); do if [ -f $$f ]; then gzip <$$f >$(MANDIR)/man1/$$f.gz; fi; done
+- for f in $(wildcard $(MAN3)); do if [ -f $$f ]; then gzip <$$f >$(MANDIR)/man3/$$f.gz; fi; done
+- for f in $(wildcard $(MAN5)); do if [ -f $$f ]; then gzip <$$f >$(MANDIR)/man5/$$f.gz; fi; done
++ for f in $(wildcard $(MAN1)); do if [ -f $$f ]; then gzip -n <$$f >$(MANDIR)/man1/$$f.gz; fi; done
++ for f in $(wildcard $(MAN3)); do if [ -f $$f ]; then gzip -n <$$f >$(MANDIR)/man3/$$f.gz; fi; done
++ for f in $(wildcard $(MAN5)); do if [ -f $$f ]; then gzip -n <$$f >$(MANDIR)/man5/$$f.gz; fi; done
- # This will uninstall them
- uninstallman:
+
+ # This will uninstall the man pages.
diff --git a/libre/netpbm/use-source-date-epoch.patch b/libre/netpbm/use-source-date-epoch.patch
deleted file mode 100644
index 496935fe6..000000000
--- a/libre/netpbm/use-source-date-epoch.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Only in netpbm-10.73.31/buildtools/: depend.mk
-diff -aur netpbm-10.73.31.old/buildtools/stamp-date netpbm-10.73.31/buildtools/stamp-date
---- netpbm-10.73.31.old/buildtools/stamp-date 2020-05-30 17:34:29.833395465 +0200
-+++ netpbm-10.73.31/buildtools/stamp-date 2020-05-30 17:48:52.910091897 +0200
-@@ -9,7 +9,7 @@
- # documentation. This software is provided "as is" without express or
- # implied warranty.
- #
--DATE=$(date)
-+DATE="$(date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}")"
- LOGNAME_OR_UNKNOWN=${LOGNAME:-UNKNOWN}
- USER=${USER:-$LOGNAME_OR_UNKNOWN}
- if [ "$USER" = "UNKNOWN" ]; then