From abb2236fe23304bccbfc30b60cde30b9a3389ac66f67c1a4aaf2250b77888b2c Mon Sep 17 00:00:00 2001 From: OBS User unknown Date: Wed, 8 Jul 2009 19:02:40 +0000 Subject: [PATCH] OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/netpbm?expand=0&rev=15 --- netpbm-10.22-security2.patch | 419 +++++ ...rflow.patch => netpbm-10.23-security.patch | 1655 ++++++++--------- netpbm-10.26.44-aliasing.patch | 35 - netpbm-10.26.44-documentation.tar.bz2 | 3 - netpbm-10.26.44-fix1overflow.patch | 13 - netpbm-10.26.44-fixes.patch | 208 --- netpbm-10.26.44-manpages.patch | 86 - netpbm-10.26.44-manpages.tar.bz2 | 3 - netpbm-10.26.44-nohpcdtoppm-nojbig.tar.bz2 | 3 - netpbm-10.26.44-pamperspective.patch | 988 ---------- netpbm-10.26.44-pnmtopng-overflow.patch | 14 - netpbm-10.26.44-pstopnm-gs-options.patch | 19 - ...ff => netpbm-10.35.64-colornames-init.diff | 6 +- netpbm-10.35.64-documentation.tar.bz2 | 3 + ...dian.patch => netpbm-10.35.64-endian.patch | 0 netpbm-10.35.64-fixes.patch | 261 +++ netpbm-10.35.64-manpages.patch | 80 + netpbm-10.35.64-nohpcdtoppm-nojbig.tar.bz2 | 3 + ...le.patch => netpbm-10.35.64-pamscale.patch | 2 +- ...il.patch => netpbm-10.35.64-pamtouil.patch | 8 +- ...tpbm-10.35.64-pnmtopng-CAN-2005-2978.patch | 6 +- ...netpbm-10.35.64-pnmtopng-transparent.patch | 4 +- ....44-rgb.patch => netpbm-10.35.64-rgb.patch | 4 +- ...ile.patch => netpbm-10.35.64-tmpfile.patch | 4 +- ...ch => netpbm-10.35.64-ximtoppm-fixes.patch | 6 +- netpbm-10.26.44.dif => netpbm-10.35.64.dif | 36 +- netpbm.changes | 19 + netpbm.spec | 247 +-- prepare-src-tarball | 15 +- 29 files changed, 1623 insertions(+), 2527 deletions(-) create mode 100644 netpbm-10.22-security2.patch rename netpbm-10.26.44-overflow.patch => netpbm-10.23-security.patch (57%) delete mode 100644 netpbm-10.26.44-aliasing.patch delete mode 100644 netpbm-10.26.44-documentation.tar.bz2 delete mode 100644 netpbm-10.26.44-fix1overflow.patch delete mode 100644 netpbm-10.26.44-fixes.patch delete mode 100644 netpbm-10.26.44-manpages.patch delete mode 100644 netpbm-10.26.44-manpages.tar.bz2 delete mode 100644 netpbm-10.26.44-nohpcdtoppm-nojbig.tar.bz2 delete mode 100644 netpbm-10.26.44-pamperspective.patch delete mode 100644 netpbm-10.26.44-pnmtopng-overflow.patch delete mode 100644 netpbm-10.26.44-pstopnm-gs-options.patch rename netpbm-10.26.44-colornames-init.diff => netpbm-10.35.64-colornames-init.diff (74%) create mode 100644 netpbm-10.35.64-documentation.tar.bz2 rename netpbm-10.26.44-endian.patch => netpbm-10.35.64-endian.patch (100%) create mode 100644 netpbm-10.35.64-fixes.patch create mode 100644 netpbm-10.35.64-manpages.patch create mode 100644 netpbm-10.35.64-nohpcdtoppm-nojbig.tar.bz2 rename netpbm-10.26.44-pamscale.patch => netpbm-10.35.64-pamscale.patch (93%) rename netpbm-10.26.44-pamtouil.patch => netpbm-10.35.64-pamtouil.patch (53%) rename netpbm-10.26.44-pnmtopng-CAN-2005-2978.patch => netpbm-10.35.64-pnmtopng-CAN-2005-2978.patch (87%) rename netpbm-10.26.44-pnmtopng-transparent.patch => netpbm-10.35.64-pnmtopng-transparent.patch (95%) rename netpbm-10.26.44-rgb.patch => netpbm-10.35.64-rgb.patch (80%) rename netpbm-10.26.44-tmpfile.patch => netpbm-10.35.64-tmpfile.patch (96%) rename netpbm-10.26.44-ximtoppm-fixes.patch => netpbm-10.35.64-ximtoppm-fixes.patch (67%) rename netpbm-10.26.44.dif => netpbm-10.35.64.dif (56%) diff --git a/netpbm-10.22-security2.patch b/netpbm-10.22-security2.patch new file mode 100644 index 0000000..2862b6e --- /dev/null +++ b/netpbm-10.22-security2.patch @@ -0,0 +1,419 @@ +--- netpbm-10.35.64/converter/other/anytopnm ++++ netpbm-10.35.64/converter/other/anytopnm +@@ -506,11 +506,7 @@ + inputFile="-" + fi + +-tempdir="${TMPDIR-/tmp}/anytopnm.$$" +-mkdir $tempdir || { echo "Could not create temporary file. Exiting."; exit 1;} +-chmod 700 $tempdir +- +-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 +@@ -536,9 +532,17 @@ + echo "$progname: unknown file type. " \ + "'file' says mime type is '$mimeType', " 1>&2 + echo "type description is '$typeDescription'" 1>&2 ++ if [ -d "$tempdir" ] ; then ++ rm -rf "$tempdir" ++ fi ++ + exit 1 + fi + + convertIt $file $filetype + ++if [ -d "$tempdir" ] ; then ++ rm -rf "$tempdir" ++fi ++ + exit 0 +--- netpbm-10.35.64/editor/pamstretch-gen ++++ netpbm-10.35.64/editor/pamstretch-gen +@@ -31,10 +31,7 @@ + exit 1 + fi + +-tempdir="${TMPDIR-/tmp}/pamstretch-gen.$$" +-mkdir $tempdir || { echo "Could not create temporary file. Exiting."; exit 1;} +-chmod 700 $tempdir +-tempfile=$tempdir/pnmig ++tempfile=$(mktemp /tmp/pnmig.XXXXXXXXXX) || exit 1 + + trap 'rm -rf $tempdir' 0 1 3 15 + +--- netpbm-10.35.64/editor/pnmmargin ++++ netpbm-10.35.64/editor/pnmmargin +@@ -11,16 +11,11 @@ + # documentation. This software is provided "as is" without express or + # implied warranty. + +-tempdir="${TMPDIR-/tmp}/pnmmargin.$$" +-mkdir $tempdir || { echo "Could not create temporary file. Exiting."; exit 1;} +-chmod 700 $tempdir +- +-trap 'rm -rf $tempdir' 0 1 3 15 +- +-tmp1=$tempdir/pnmm1 +-tmp2=$tempdir/pnmm2 +-tmp3=$tempdir/pnmm3 +-tmp4=$tempdir/pnmm4 ++tmpdir=$(mktemp -d -t ppmmargin.XXXXXXX) || exit 1 ++tmp1="$tmpdir/tmp1" ++tmp2="$tmpdir/tmp2" ++tmp3="$tmpdir/tmp3" ++tmp4="$tmpdir/tmp4" + + color="-gofigure" + +@@ -39,6 +34,9 @@ + shift + if [ ! ${1-""} ] ; then + echo "usage: $0 [-white|-black|-color ] [pnmfile]" 1>&2 ++ if [ -d "$tmpdir" ]; then ++ rm -rf "$tmpdir" ++ fi + exit 1 + fi + color="$1" +@@ -46,6 +44,9 @@ + ;; + -* ) + echo "usage: $0 [-white|-black|-color ] [pnmfile]" 1>&2 ++ if [ -d "$tmpdir" ]; then ++ rm -rf "$tmpdir" ++ fi + exit 1 + ;; + * ) +@@ -56,6 +57,9 @@ + + if [ ! ${1-""} ] ; then + echo "usage: $0 [-white|-black|-color ] [pnmfile]" 1>&2 ++ if [ -d "$tmpdir" ]; then ++ rm -rf "$tmpdir" ++ fi + exit 1 + fi + size="$1" +@@ -63,6 +67,9 @@ + + if [ ${2-""} ] ; then + echo "usage: $0 [-white|-black|-color ] [pnmfile]" 1>&2 ++ if [ -d "$tmpdir" ]; then ++ rm -rf "$tmpdir" ++ fi + exit 1 + fi + +@@ -86,3 +93,7 @@ + # Cat things together. + pnmcat -lr $tmp2 $tmp1 $tmp2 > $tmp4 + pnmcat -tb $tmp3 $tmp4 $tmp3 ++ ++if [ -d "$tmpdir" ]; then ++ rm -rf "$tmpdir" ++fi +--- netpbm-10.35.64/editor/ppmfade ++++ netpbm-10.35.64/editor/ppmfade +@@ -14,6 +14,7 @@ + # + #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + use strict; ++use File::Temp "tempdir"; + + my $SPREAD = 1; + my $SHIFT = 2; +@@ -118,20 +119,26 @@ + + print("Frames are " . $width . "W x " . $height . "H\n"); + ++# ++# We create a tmp-directory right here ++# ++my $tmpdir = tempdir("ppmfade.XXXXXX", CLEANUP => 1); ++ ++ + if ($first_file eq "undefined") { + print "Fading from black to "; +- system("ppmmake \\#000 $width $height >junk1$$.ppm"); ++ system("ppmmake \\#000 $width $height >$tmpdir/junk1$$.ppm"); + } else { + print "Fading from $first_file to "; +- system("cp", $first_file, "junk1$$.ppm"); ++ system("cp", $first_file, "$tmpdir/junk1$$.ppm"); + } + + if ($last_file eq "undefined") { + print "black.\n"; +- system("ppmmake \\#000 $width $height >junk2$$.ppm"); ++ system("ppmmake \\#000 $width $height >$tmpdir/junk2$$.ppm"); + } else { + print "$last_file\n"; +- system("cp", $last_file, "junk2$$.ppm"); ++ system("cp", $last_file, "$tmpdir/junk2$$.ppm"); + } + + # +@@ -139,14 +146,14 @@ + # + + # Here's what our temporary files are: +-# junk1$$.ppm: The original (fade-from) image +-# junk2$$.ppm: The target (fade-from) image +-# junk3$$.ppm: The frame of the fade for the current iteration of the +-# the for loop. +-# junk1a$$.ppm: If the fade involves a ppmmix sequence from one intermediate +-# image to another, this is the first frame of that +-# sequence. +-# junk2a$$.ppm: This is the last frame of the above-mentioned ppmmix sequence ++# $tmpdir/junk1$$.ppm: The original (fade-from) image ++# $tmpdir/junk2$$.ppm: The target (fade-from) image ++# $tmpdir/junk3$$.ppm: The frame of the fade for the current iteration of the ++# the for loop. ++# $tmpdir/junk1a$$.ppm: If the fade involves a ppmmix sequence from one intermediate ++# image to another, this is the first frame of that ++# sequence. ++# $tmpdir/junk2a$$.ppm: This is the last frame of the above-mentioned ppmmix sequence + + my $i; # Frame number + for ($i = 1; $i <= $nframes; $i++) { +@@ -154,148 +161,148 @@ + if ($mode eq $SPREAD) { + if ($i <= 10) { + my $n = $spline20[$i] * 100; +- system("ppmspread $n junk1$$.ppm >junk3$$.ppm"); ++ system("ppmspread $n $tmpdir/junk1$$.ppm >$tmpdir/junk3$$.ppm"); + } elsif ($i <= 20) { + my $n; + $n = $spline20[$i] * 100; +- system("ppmspread $n junk1$$.ppm >junk1a$$.ppm"); ++ system("ppmspread $n $tmpdir/junk1$$.ppm >$tmpdir/junk1a$$.ppm"); + $n = (1-$spline20[$i-10]) * 100; +- system("ppmspread $n junk2$$.ppm >junk2a$$.ppm"); ++ system("ppmspread $n $tmpdir/junk2$$.ppm >$tmpdir/junk2a$$.ppm"); + $n = $spline10[$i-10]; +- system("ppmmix $n junk1a$$.ppm junk2a$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1a$$.ppm $tmpdir/junk2a$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + my $n = (1-$spline20[$i-10])*100; +- system("ppmspread $n junk2$$.ppm >junk3$$.ppm"); ++ system("ppmspread $n $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); + } + } elsif ($mode eq $SHIFT) { + if ($i <= 10) { + my $n = $spline20[$i] * 100; +- system("ppmshift $n junk1$$.ppm >junk3$$.ppm"); ++ system("ppmshift $n $tmpdir/junk1$$.ppm >$tmpdir/junk3$$.ppm"); + } elsif ($i <= 20) { + my $n; + $n = $spline20[$i] * 100; +- system("ppmshift $n junk1$$.ppm >junk1a$$.ppm"); ++ system("ppmshift $n $tmpdir/junk1$$.ppm >$tmpdir/junk1a$$.ppm"); + $n = (1-$spline20[$i-10])*100; +- system("ppmshift $n junk2$$.ppm >junk2a$$.ppm"); ++ system("ppmshift $n $tmpdir/junk2$$.ppm >$tmpdir/junk2a$$.ppm"); + $n = $spline10[$i-10]; +- system("ppmmix $n junk1a$$.ppm junk2a$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1a$$.ppm $tmpdir/junk2a$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + my $n = (1-$spline20[$i-10]) * 100; +- system("ppmshift $n junk2$$.ppm >junk3$$.ppm"); ++ system("ppmshift $n $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); + } + } elsif ($mode eq $RELIEF) { + if ($i == 1) { +- system("ppmrelief junk1$$.ppm >junk1r$$.ppm"); ++ system("ppmrelief $tmpdir/junk1$$.ppm >$tmpdir/junk1r$$.ppm"); + } + if ($i <= 10) { + my $n = $spline10[$i]; +- system("ppmmix $n junk1$$.ppm junk1r$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1$$.ppm $tmpdir/junk1r$$.ppm >$tmpdir/junk3$$.ppm"); + } elsif ($i <= 20) { + my $n = $spline10[$i-10]; +- system("ppmmix $n junk1r$$.ppm junk2r$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1r$$.ppm $tmpdir/junk2r$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + my $n = $spline10[$i-20]; +- system("ppmmix $n junk2r$$.ppm junk2$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk2r$$.ppm $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); + } + if ($i == 10) { +- system("ppmrelief junk2$$.ppm >junk2r$$.ppm"); ++ system("ppmrelief $tmpdir/junk2$$.ppm >$tmpdir/junk2r$$.ppm"); + } + } elsif ($mode eq $OIL) { + if ($i == 1) { +- system("ppmtopgm junk1$$.ppm | pgmoil >junko$$.ppm"); +- system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . +- ">junk1o$$.ppm"); ++ system("ppmtopgm $tmpdir/junk1$$.ppm | pgmoil >$tmpdir/junko$$.ppm"); ++ system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . ++ ">$tmpdir/junk1o$$.ppm"); + } + if ($i <= 10) { + my $n = $spline10[$i]; +- system("ppmmix $n junk1$$.ppm junk1o$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1$$.ppm $tmpdir/junk1o$$.ppm >$tmpdir/junk3$$.ppm"); + } elsif ($i <= 20) { + my $n = $spline10[$i-10]; +- system("ppmmix $n junk1o$$.ppm junk2o$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1o$$.ppm $tmpdir/junk2o$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + my $n = $spline10[$i-20]; +- system("ppmmix $n junk2o$$.ppm junk2$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk2o$$.ppm $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); + } + if ($i == 10) { +- system("ppmtopgm junk2$$.ppm | pgmoil >junko$$.ppm"); +- system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . +- ">junk2o$$.ppm"); ++ system("ppmtopgm $tmpdir/junk2$$.ppm | pgmoil >$tmpdir/junko$$.ppm"); ++ system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . ++ ">$tmpdir/junk2o$$.ppm"); + } + } elsif ($mode eq $EDGE) { + if ($i == 1) { +- system("ppmtopgm junk1$$.ppm | pgmedge >junko$$.ppm"); +- system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . +- ">junk1o$$.ppm"); ++ system("ppmtopgm $tmpdir/junk1$$.ppm | pgmedge >$tmpdir/junko$$.ppm"); ++ system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . ++ ">$tmpdir/junk1o$$.ppm"); + } + if ($i <= 10) { + my $n = $spline10[$i]; +- system("ppmmix $n junk1$$.ppm junk1o$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1$$.ppm $tmpdir/junk1o$$.ppm >$tmpdir/junk3$$.ppm"); + } elsif ($i <= 20) { + my $n = $spline10[$i-10]; +- system("ppmmix $n junk1o$$.ppm junk2o$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1o$$.ppm $tmpdir/junk2o$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + my $n = $spline10[$i-20]; +- system("ppmmix $n junk2o$$.ppm junk2$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk2o$$.ppm $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); + } + if ($i == 10) { +- system("ppmtopgm junk2$$.ppm | pgmedge >junko$$.ppm"); +- system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . +- ">junk2o$$.ppm"); ++ system("ppmtopgm $tmpdir/junk2$$.ppm | pgmedge >$tmpdir/junko$$.ppm"); ++ system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . ++ ">$tmpdir/junk2o$$.ppm"); + } + } elsif ($mode eq $BENTLEY) { + if ($i == 1) { +- system("ppmtopgm junk1$$.ppm | pgmbentley >junko$$.ppm"); +- system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . +- ">junk1o$$.ppm"); ++ system("ppmtopgm $tmpdir/junk1$$.ppm | pgmbentley >$tmpdir/junko$$.ppm"); ++ system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . ++ ">$tmpdir/junk1o$$.ppm"); + } + if ($i <= 10) { + my $n = $spline10[$i]; +- system("ppmmix $n junk1$$.ppm junk1o$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1$$.ppm $tmpdir/junk1o$$.ppm >$tmpdir/junk3$$.ppm"); + } elsif ($i <= 20) { + my $n = $spline10[$i-10]; +- system("ppmmix $n junk1o$$.ppm junk2o$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1o$$.ppm $tmpdir/junk2o$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + my $n = $spline10[$i-20]; +- system("ppmmix $n junk2o$$.ppm junk2$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk2o$$.ppm $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); + } + if ($i == 10) { +- system("ppmtopgm junk2$$.ppm | pgmbentley >junko$$.ppm"); +- system("rgb3toppm junko$$.ppm junko$$.ppm junko$$.ppm " . +- ">junk2o$$.ppm"); ++ system("ppmtopgm $tmpdir/junk2$$.ppm | pgmbentley >$tmpdir/junko$$.ppm"); ++ system("rgb3toppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm $tmpdir/junko$$.ppm " . ++ ">$tmpdir/junk2o$$.ppm"); + } + } elsif ($mode eq $BLOCK) { + if ($i <= 10) { + my $n = 1 - 1.9*$spline20[$i]; +- system("pamscale $n junk1$$.ppm | " . +- "pamscale -width $width -height $height >junk3$$.ppm"); ++ system("pamscale $n $tmpdir/junk1$$.ppm | " . ++ "pamscale -width $width -height $height >$tmpdir/junk3$$.ppm"); + } elsif ($i <= 20) { + my $n = $spline10[$i-10]; +- system("ppmmix $n junk1a$$.ppm junk2a$$.ppm >junk3$$.ppm"); ++ system("ppmmix $n $tmpdir/junk1a$$.ppm $tmpdir/junk2a$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + my $n = 1 - 1.9*$spline20[31-$i]; +- system("pamscale $n junk2$$.ppm | " . +- "pamscale -width $width -height $height >junk3$$.ppm"); ++ system("pamscale $n $tmpdir/junk2$$.ppm | " . ++ "pamscale -width $width -height $height >$tmpdir/junk3$$.ppm"); + } + if ($i == 10) { +- system("cp", "junk3$$.ppm", "junk1a$$.ppm"); +- system("pamscale $n junk2$$.ppm | " . +- "pamscale -width $width -height $height >junk2a$$.ppm"); ++ system("cp", "$tmpdir/junk3$$.ppm", "$tmpdir/junk1a$$.ppm"); ++ system("pamscale $n $tmpdir/junk2$$.ppm | " . ++ "pamscale -width $width -height $height >$tmpdir/junk2a$$.ppm"); + } + } elsif ($mode eq $MIX) { + my $fade_factor = sqrt(1/($nframes-$i+1)); +- system("ppmmix $fade_factor junk1$$.ppm junk2$$.ppm >junk3$$.ppm"); ++ system("ppmmix $fade_factor $tmpdir/junk1$$.ppm $tmpdir/junk2$$.ppm >$tmpdir/junk3$$.ppm"); + } else { + print("Internal error: impossible mode value '$mode'\n"); + } + + my $outfile = sprintf("%s.%04d.ppm", $base_name, $i); +- system("cp", "junk3$$.ppm", $outfile); ++ system("cp", "$tmpdir/junk3$$.ppm", $outfile); + } + + # + # Clean up shop. + # +-system("rm junk*$$.ppm"); ++system("rm $tmpdir/junk*$$.ppm"); + + exit(0); + +--- netpbm-10.35.64/editor/ppmquantall ++++ netpbm-10.35.64/editor/ppmquantall +@@ -70,13 +70,8 @@ + heights=(${heights[*]} `grep -v '^#' $i | sed '1d; s/.* //; 2q'`) + done + +-tempdir="${TMPDIR-/tmp}/ppmquantall.$$" +-mkdir $tempdir || { echo "Could not create temporary file. Exiting."; exit 1;} +-chmod 700 $tempdir +- +-trap 'rm -rf $tempdir' 0 1 3 15 +- +-all=$tempdir/pqa.all.$$ ++all=$(mktemp -t pqa.all.XXXXXXXXXX) || exit 1 ++rm -f $all + + pnmcat -topbottom -jleft -white ${files[@]} | pnmquant $newcolors > $all + if [ $? != 0 ]; then +--- netpbm-10.35.64/editor/ppmshadow ++++ netpbm-10.35.64/editor/ppmshadow +@@ -72,9 +72,10 @@ + + + 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/netpbm-10.26.44-overflow.patch b/netpbm-10.23-security.patch similarity index 57% rename from netpbm-10.26.44-overflow.patch rename to netpbm-10.23-security.patch index 93097b9..b96e2c5 100644 --- a/netpbm-10.26.44-overflow.patch +++ b/netpbm-10.23-security.patch @@ -1,6 +1,6 @@ ---- analyzer/pgmhist.c -+++ analyzer/pgmhist.c -@@ -45,6 +45,7 @@ +--- netpbm-10.35.64/analyzer/pgmhist.c ++++ netpbm-10.35.64/analyzer/pgmhist.c +@@ -53,6 +53,7 @@ grayrow = pgm_allocrow( cols ); /* Build histogram. */ @@ -8,55 +8,40 @@ MALLOCARRAY(hist, maxval + 1); MALLOCARRAY(rcount, maxval + 1); if ( hist == NULL || rcount == NULL ) ---- analyzer/pgmtexture.c -+++ analyzer/pgmtexture.c -@@ -74,7 +74,9 @@ - vector (int nl, int nh) +--- netpbm-10.35.64/analyzer/pgmtexture.c ++++ netpbm-10.35.64/analyzer/pgmtexture.c +@@ -79,6 +79,9 @@ { - float *v; -- -+ overflow_add(nh, 1); -+ if(nh < nl) -+ pm_error("assert: h < l"); - MALLOCARRAY(v, (unsigned) (nh - nl + 1)); - if (v == NULL) - pm_error("Unable to allocate memory for a vector."); -@@ -91,12 +93,18 @@ - float **m; + float *v; - /* allocate pointers to rows */ -+ overflow_add(nrh, 1); -+ if(nrh < nrl) -+ pm_error("assert: nrh < nrl"); - MALLOCARRAY(m, (unsigned) (nrh - nrl + 1)); - if (m == NULL) - pm_error("Unable to allocate memory for a matrix."); ++ if(nh < nl) ++ pm_error("assert: h < l"); ++ overflow_add(nh - nl, 1); + MALLOCARRAY(v, (unsigned) (nh - nl + 1)); + if (v == NULL) + pm_error("Unable to allocate memory for a vector."); +@@ -95,6 +98,9 @@ + float **m; - m -= ncl; + /* allocate pointers to rows */ ++ if(nrh < nrl) ++ pm_error("assert: h < l"); ++ overflow_add(nrh - nrl, 1); + MALLOCARRAY(m, (unsigned) (nrh - nrl + 1)); + if (m == NULL) + pm_error("Unable to allocate memory for a matrix."); +@@ -102,6 +108,9 @@ + m -= ncl; -+ if(nch < ncl) -+ pm_error("assert: nch < ncl"); -+ overflow_add(nch, 1); - /* allocate rows and set pointers to them */ - for (i = nrl; i <= nrh; i++) - { ---- converter/other/bmptopnm.c -+++ converter/other/bmptopnm.c -@@ -550,6 +550,12 @@ - - xel * colormap; - unsigned int bytesRead; -+ -+ if (cmapsize == 0) { -+ *colormapP = NULL; -+ *bytesReadP = 0; -+ return; -+ } - - colormap = pnm_allocrow(MAX(1, cmapsize)); - ---- converter/other/gemtopnm.c -+++ converter/other/gemtopnm.c + /* allocate rows and set pointers to them */ ++ if(nch < ncl) ++ pm_error("assert: h < l"); ++ overflow_add(nch - ncl, 1); + for (i = nrl; i <= nrh; i++) + { + MALLOCARRAY(m[i], (unsigned) (nch - ncl + 1)); +--- netpbm-10.35.64/converter/other/gemtopnm.c ++++ netpbm-10.35.64/converter/other/gemtopnm.c @@ -106,6 +106,7 @@ pnm_writepnminit( stdout, cols, rows, MAXVAL, type, 0 ); @@ -65,40 +50,19 @@ { /* allocate input row data structure */ int plane; ---- converter/other/jpegtopnm.c -+++ converter/other/jpegtopnm.c -@@ -827,7 +827,9 @@ - +--- netpbm-10.35.64/converter/other/jpegtopnm.c ++++ netpbm-10.35.64/converter/other/jpegtopnm.c +@@ -828,6 +828,7 @@ /* Calculate output image dimensions so we can allocate space */ jpeg_calc_output_dimensions(cinfoP); -- -+ + + overflow2(cinfoP->output_width, cinfoP->output_components); -+ jpegbuffer = ((*cinfoP->mem->alloc_sarray) ((j_common_ptr) cinfoP, JPOOL_IMAGE, cinfoP->output_width * cinfoP->output_components, ---- converter/other/pamtouil.c -+++ converter/other/pamtouil.c -@@ -134,6 +134,7 @@ - int i; - - /* Allocate memory for printed number. Abort if error. */ -+ overflow_add(digits, 1); - str = (char*) malloc(digits + 1); - if (str == NULL) - pm_error("out of memory allocating number string"); -@@ -168,6 +169,7 @@ - else { - int i; - -+ overflow_add(strlen(rgbname), 5 + 1); - output = malloc(strlen(rgbname) + 5 + 1); - if (output == NULL) - pm_error( "out of memory allocating color name" ); ---- converter/other/pbmtopgm.c -+++ converter/other/pbmtopgm.c -@@ -45,6 +45,7 @@ +--- netpbm-10.35.64/converter/other/pbmtopgm.c ++++ netpbm-10.35.64/converter/other/pbmtopgm.c +@@ -47,6 +47,7 @@ "than the image height (%u rows)", height, rows); outrow = pgm_allocrow(cols) ; @@ -106,46 +70,47 @@ maxval = MIN(PGM_OVERALLMAXVAL, width*height); pgm_writepgminit(stdout, cols, rows, maxval, 0) ; ---- converter/other/pngtopnm.c -+++ converter/other/pngtopnm.c -@@ -612,18 +612,30 @@ - } +--- netpbm-10.35.64/converter/other/pngtopnm.c ++++ netpbm-10.35.64/converter/other/pngtopnm.c +@@ -990,19 +990,24 @@ + pm_error ("couldn't allocate space for image"); + } - if (info_ptr->bit_depth == 16) -+ { -+ overflow2(2, info_ptr->width); - linesize = 2 * info_ptr->width; -+ } - else - linesize = info_ptr->width; +- if (info_ptr->bit_depth == 16) ++ if (info_ptr->bit_depth == 16) { ++ overflow2(2, info_ptr->width); + linesize = 2 * info_ptr->width; +- else ++ } else + linesize = info_ptr->width; - if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) -+ { - linesize *= 2; -+ overflow2(2, linesize); -+ } - else - if (info_ptr->color_type == PNG_COLOR_TYPE_RGB) -+ { -+ overflow2(3, linesize); - linesize *= 3; -+ } - else - if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA) -+ { -+ overflow2(4, linesize); - linesize *= 4; -+ } +- if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) ++ if (info_ptr->color_type == PNG_COLOR_TYPE_GRAY_ALPHA) { ++ overflow2(2, linesize); + linesize *= 2; +- else +- if (info_ptr->color_type == PNG_COLOR_TYPE_RGB) ++ } else ++ if (info_ptr->color_type == PNG_COLOR_TYPE_RGB) { ++ overflow2(3, linesize); + linesize *= 3; +- else +- if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA) ++ } else ++ if (info_ptr->color_type == PNG_COLOR_TYPE_RGB_ALPHA) { ++ overflow2(4, linesize); + linesize *= 4; ++ } - for (y = 0 ; y < info_ptr->height ; y++) { - png_image[y] = malloc (linesize); ---- converter/other/pnmtoddif.c -+++ converter/other/pnmtoddif.c + for (y = 0 ; y < info_ptr->height ; y++) { + png_image[y] = malloc (linesize); +--- netpbm-10.35.64/converter/other/pnmtoddif.c ++++ netpbm-10.35.64/converter/other/pnmtoddif.c @@ -484,6 +484,7 @@ switch (PNM_FORMAT_TYPE(format)) { case PBM_TYPE: ip.bits_per_pixel = 1; -+ overflow_add(cols, 7); ++ overflow_add(cols, 7); ip.bytes_per_line = (cols + 7) / 8; ip.spectral = 2; ip.components = 1; @@ -157,9 +122,9 @@ ip.bytes_per_line = 3 * cols; ip.bits_per_pixel = 24; ip.spectral = 5; ---- converter/other/pnmtojpeg.c -+++ converter/other/pnmtojpeg.c -@@ -588,6 +588,8 @@ +--- netpbm-10.35.64/converter/other/pnmtojpeg.c ++++ netpbm-10.35.64/converter/other/pnmtojpeg.c +@@ -587,6 +587,8 @@ const long half_maxval = maxval / 2; long val; @@ -168,7 +133,7 @@ *rescale_p = (JSAMPLE *) (cinfo.mem->alloc_small) ((j_common_ptr) &cinfo, JPOOL_IMAGE, (size_t) (((long) maxval + 1L) * -@@ -664,6 +666,7 @@ +@@ -665,6 +667,7 @@ */ /* Allocate the libpnm output and compressor input buffers */ @@ -176,65 +141,48 @@ buffer = (*cinfo_p->mem->alloc_sarray) ((j_common_ptr) cinfo_p, JPOOL_IMAGE, (unsigned int) cinfo_p->image_width * cinfo_p->input_components, -@@ -935,6 +938,7 @@ +@@ -932,7 +935,11 @@ + * want JPOOL_PERMANENT. + */ + const unsigned int scan_info_size = nscans * sizeof(jpeg_scan_info); +- jpeg_scan_info * const scan_info = ++ const jpeg_scan_info * scan_info; ++ ++ overflow2(nscans, sizeof(jpeg_scan_info)); ++ ++ scan_info = (jpeg_scan_info *) (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, scan_info_size); -+ overflow2(nscans, sizeof(jpeg_scan_info)); - memcpy(scan_info, scans, scan_info_size); - cinfo->scan_info = scan_info; - cinfo->num_scans = nscans; ---- converter/other/pnmtopalm/palmcolormap.c -+++ converter/other/pnmtopalm/palmcolormap.c -@@ -232,7 +232,7 @@ - return 0; - - colormap = malloc(sizeof(Colormap_s)); -- colormap->color_entries = malloc(sizeof(Color_s) * ncolors); -+ colormap->color_entries = malloc2(sizeof(Color_s), ncolors); - colormap->nentries = ncolors; - colormap->ncolors = ncolors; - ---- converter/other/pnmtopng.c -+++ converter/other/pnmtopng.c -@@ -2014,6 +2014,7 @@ - /* Write the raster */ - - /* max: 3 color channels, one alpha channel, 16-bit */ -+ overflow2(cols, 8); - MALLOCARRAY(line, cols * 8); - if (line == NULL) - { ---- converter/other/pnmtops.c -+++ converter/other/pnmtops.c -@@ -147,16 +147,24 @@ - - cmdlineP->center = !nocenter; - cmdlineP->canturn = !noturn; -- -+ +--- netpbm-10.35.64/converter/other/pnmtops.c ++++ netpbm-10.35.64/converter/other/pnmtops.c +@@ -184,16 +184,20 @@ + cmdlineP->canturn = !noturn; + cmdlineP->showpage = !noshowpage; + + overflow2(width, 72); -+ overflow2(height, 72); cmdlineP->width = width * 72; ++ overflow2(height, 72); cmdlineP->height = height * 72; - if (imagewidth_spec) -+ { - cmdlineP->imagewidth = imagewidth * 72; +- if (imagewidthSpec) ++ if (imagewidthSpec) { + overflow2(imagewidth, 72); -+ } - else + cmdlineP->imagewidth = imagewidth * 72; +- else ++ } else cmdlineP->imagewidth = 0; - if (imageheight_spec) -+ { -+ overflow2(imageheight, 72); +- if (imageheightSpec) ++ if (imageheightSpec) { ++ overflow2(imageheight, 72); cmdlineP->imageheight = imageheight * 72; -+ } - else +- else ++ } else cmdlineP->imageheight = 0; ---- converter/other/pnmtorle.c -+++ converter/other/pnmtorle.c + if (!cmdlineP->psfilter && +--- netpbm-10.35.64/converter/other/pnmtorle.c ++++ netpbm-10.35.64/converter/other/pnmtorle.c @@ -19,6 +19,8 @@ * If you modify this software, you should include a notice giving the * name of the person performing the modification, the date of modification, @@ -244,9 +192,32 @@ */ /* * pnmtorle - A program which will convert pbmplus (ppm or pgm) images ---- converter/other/pnmtosgi.c -+++ converter/other/pnmtosgi.c -@@ -250,6 +250,7 @@ +--- netpbm-10.35.64/converter/other/pnmtosgi.c ++++ netpbm-10.35.64/converter/other/pnmtosgi.c +@@ -213,6 +213,22 @@ + } + } + ++static void * ++xmalloc2(int x, int y) ++{ ++ void *mem; ++ ++ overflow2(x,y); ++ if( x * y == 0 ) ++ return NULL; ++ ++ mem = malloc2(x, y); ++ if( mem == NULL ) ++ pm_error("out of memory allocating %d bytes", x * y); ++ return mem; ++} ++ ++ + static void + put_big_short(short s) + { +@@ -250,6 +266,7 @@ #endif if( storage != STORAGE_VERBATIM ) { @@ -254,7 +225,7 @@ MALLOCARRAY_NOFAIL(table, channels * rows); MALLOCARRAY_NOFAIL(rletemp, WORSTCOMPR(cols)); } -@@ -303,6 +304,8 @@ +@@ -303,6 +320,8 @@ break; case STORAGE_RLE: tabrow = chan_no * rows + row; @@ -263,68 +234,8 @@ len = rle_compress(temp, cols); /* writes result into rletemp */ channel[chan_no][row].length = len; MALLOCARRAY(p, len); ---- converter/other/pnmtotiff.c -+++ converter/other/pnmtotiff.c -@@ -611,9 +611,12 @@ - if (*bitspersampleP < 8) { - int samplesperbyte; - samplesperbyte = 8 / *bitspersampleP; -+ overflow2(cols, *samplesperpixelP); -+ overflow_add(cols * *samplesperpixelP, samplesperbyte); - *bytesperrowP = - (cols * *samplesperpixelP + samplesperbyte-1) / samplesperbyte; - } else -+ overflow3( *samplesperpixelP, cols, *bitspersampleP); - *bytesperrowP = (cols * *samplesperpixelP * *bitspersampleP) / 8; - - if (requested_rowsperstrip == -1 ) ---- converter/other/rast.c -+++ converter/other/rast.c -@@ -46,6 +46,11 @@ - ** not to be the case. In reality, all of Sun's code rounds up to - ** a short, not a long. - */ -+ -+ overflow_add(depth,15); -+ overflow2(w, depth+15); -+ overflow2(w * depth + 15, 2); -+ - m->md_linebytes = ( w * depth + 15 ) / 16 * 2; - m->md_offset.x = 0; - m->md_offset.y = 0; -@@ -108,11 +113,14 @@ - case RT_FORMAT_RGB: - /* Ignore hP->ras_length. */ - h.ras_length = p->pr_size.y * p->pr_data->md_linebytes; -+ overflow2(p->pr_size.y, p->pr_data->md_linebytes); - break; - - case RT_BYTE_ENCODED: - size = p->pr_size.y * p->pr_data->md_linebytes; -+ overflow2(p->pr_size.y, p->pr_data->md_linebytes); - bp = p->pr_data->md_image; -+ overflow2(size, 3); - MALLOCARRAY(beimage, size * 3 / 2); /* worst case */ - if ( beimage == NULL ) - return PIX_ERR; -@@ -193,6 +201,7 @@ - switch ( colormap->type ) - { - case RMT_EQUAL_RGB: -+ overflow2(colormap->length, 3); - h.ras_maplength = colormap->length * 3; - break; - -@@ -404,6 +413,7 @@ - case RT_STANDARD: - case RT_FORMAT_RGB: - /* Ignore hP->ras_length. */ -+ overflow2(p->pr_size.y, p->pr_data->md_linebytes); - i = p->pr_size.y * p->pr_data->md_linebytes; - if ( fread( p->pr_data->md_image, 1, i, in ) != i ) - { ---- converter/other/rletopnm.c -+++ converter/other/rletopnm.c +--- netpbm-10.35.64/converter/other/rletopnm.c ++++ netpbm-10.35.64/converter/other/rletopnm.c @@ -19,6 +19,8 @@ * If you modify this software, you should include a notice giving the * name of the person performing the modification, the date of modification, @@ -334,18 +245,29 @@ */ /* * rletopnm - A conversion program to convert from Utah's "rle" image format ---- converter/other/sgitopnm.c -+++ converter/other/sgitopnm.c -@@ -252,6 +252,7 @@ +--- netpbm-10.35.64/converter/other/sgitopnm.c ++++ netpbm-10.35.64/converter/other/sgitopnm.c +@@ -252,13 +252,17 @@ if (ochan < 0) { maxchannel = (head->zsize < 3) ? head->zsize : 3; -+ overflow2(head->ysize, maxchannel); ++ overflow2(head->ysize, maxchannel); MALLOCARRAY_NOFAIL(image, head->ysize * maxchannel); } else { maxchannel = ochan + 1; ---- converter/other/sirtopnm.c -+++ converter/other/sirtopnm.c + MALLOCARRAY_NOFAIL(image, head->ysize); + } +- if ( table ) ++ if ( table ) { ++ overflow2(head->xsize, 2); ++ overflow_add(head->xsize*2, 2); + MALLOCARRAY_NOFAIL(temp, WORSTCOMPR(head->xsize)); ++ } + + for( channel = 0; channel < maxchannel; channel++ ) { + #ifdef DEBUG +--- netpbm-10.35.64/converter/other/sirtopnm.c ++++ netpbm-10.35.64/converter/other/sirtopnm.c @@ -69,6 +69,7 @@ } break; @@ -354,53 +276,63 @@ picsize = cols * rows * 3; planesize = cols * rows; if ( !( sirarray = (unsigned char*) malloc( picsize ) ) ) ---- converter/other/tifftopnm.c -+++ converter/other/tifftopnm.c -@@ -736,6 +736,7 @@ +--- netpbm-10.35.64/converter/other/tifftopnm.c ++++ netpbm-10.35.64/converter/other/tifftopnm.c +@@ -748,7 +748,8 @@ if (scanbuf == NULL) pm_error("can't allocate memory for scanline buffer"); -+ overflow2(cols, spp); - MALLOCARRAY(samplebuf, cols * spp); +- MALLOCARRAY(samplebuf, cols * spp); ++ /* samplebuf is unsigned int * !!! */ ++ samplebuf = (unsigned int *) malloc3(cols , sizeof(unsigned int) , spp); if (samplebuf == NULL) pm_error ("can't allocate memory for row buffer"); ---- converter/pbm/atktopbm.c -+++ converter/pbm/atktopbm.c -@@ -281,7 +281,9 @@ - *rwidth = width; - *rheight = height; -+ overflow_add(width, 7); - rowlen = (width + 7) / 8; -+ overflow2(height, rowlen); - MALLOCARRAY(*destaddrP, height * rowlen); - if (destaddrP == NULL) - pm_error("Unable to allocate %u bytes for the input image.", ---- converter/pbm/icontopbm.c -+++ converter/pbm/icontopbm.c -@@ -12,6 +12,8 @@ +--- netpbm-10.35.64/converter/other/xwdtopnm.c ++++ netpbm-10.35.64/converter/other/xwdtopnm.c +@@ -214,6 +214,10 @@ + *colorsP = pnm_allocrow( 2 ); + PNM_ASSIGN1( (*colorsP)[0], 0 ); + PNM_ASSIGN1( (*colorsP)[1], *maxvalP ); ++ overflow_add(h10P->pixmap_width, 15); ++ if(h10P->pixmap_width < 0) ++ pm_error("assert: negative width"); ++ overflow2((((h10P->pixmap_width + 15) / 16) * 16 - h10P->pixmap_width), 8); + *padrightP = + (((h10P->pixmap_width + 15) / 16) * 16 - h10P->pixmap_width) * 8; + *bits_per_itemP = 16; +@@ -608,6 +612,7 @@ + + *colsP = h11FixedP->pixmap_width; + *rowsP = h11FixedP->pixmap_height; ++ overflow2(h11FixedP->bytes_per_line, 8); + *padrightP = + h11FixedP->bytes_per_line * 8 - + h11FixedP->pixmap_width * h11FixedP->bits_per_pixel; +--- netpbm-10.35.64/converter/pbm/icontopbm.c ++++ netpbm-10.35.64/converter/pbm/icontopbm.c +@@ -11,6 +11,7 @@ + */ #include - -+#include +#include - #include "pbm.h" - /* size in bytes of a bitmap */ -@@ -86,6 +88,11 @@ + #include "nstring.h" + #include "pbm.h" +@@ -87,6 +88,11 @@ if ( *heightP <= 0 ) pm_error( "invalid height (must be positive): %d", *heightP ); + if ( *widthP > INT_MAX - 16 || *widthP < 0) -+ pm_error( "invalid width: %d", *widthP); -+ ++ pm_error( "invalid width: %d", *widthP); ++ + overflow2(*widthP + 16, *heightP); -+ ++ data_length = BitmapSize( *widthP, *heightP ); *dataP = (short unsigned int *) malloc( data_length ); if ( *dataP == NULL ) ---- converter/pbm/mdatopbm.c -+++ converter/pbm/mdatopbm.c +--- netpbm-10.35.64/converter/pbm/mdatopbm.c ++++ netpbm-10.35.64/converter/pbm/mdatopbm.c @@ -245,10 +245,13 @@ pm_readlittleshort(infile, &yy); nInCols = yy; } @@ -409,35 +341,55 @@ nOutCols = 8 * nInCols; nOutRows = nInRows; - if (bScale) -- nOutRows *= 2; + if (bScale) { -+ overflow2(nOutRows, 2); -+ nOutRows *= 2; ++ overflow2(nOutRows, 2); + nOutRows *= 2; + } data = pbm_allocarray(nOutCols, nOutRows); ---- converter/pbm/pbmto4425.c -+++ converter/pbm/pbmto4425.c -@@ -1,6 +1,7 @@ - #include +--- netpbm-10.35.64/converter/pbm/mgrtopbm.c ++++ netpbm-10.35.64/converter/pbm/mgrtopbm.c +@@ -70,6 +70,7 @@ + + *colsP = (((int)head.h_wide - ' ') << 6) + ((int)head.l_wide - ' '); + *rowsP = (((int)head.h_high - ' ') << 6) + ((int) head.l_high - ' '); ++ overflow_add(*colsP, pad); + *padrightP = ( ( *colsP + pad - 1 ) / pad ) * pad - *colsP; + + *bitsperitemP = 8; +--- netpbm-10.35.64/converter/pbm/pbmto10x.c ++++ netpbm-10.35.64/converter/pbm/pbmto10x.c +@@ -162,7 +162,7 @@ + res_60x72(); + pm_close(ifp); +- exit(0); ++ return 0; + } + + +--- netpbm-10.35.64/converter/pbm/pbmto4425.c ++++ netpbm-10.35.64/converter/pbm/pbmto4425.c +@@ -2,6 +2,7 @@ + + #include "nstring.h" #include "pbm.h" +#include - /*extern char *sys_errlist[]; - char *malloc();*/ -@@ -72,7 +73,7 @@ - xres = vmap_width * 2; - yres = vmap_height * 3; + static char bit_table[2][3] = { + {1, 4, 0x10}, +@@ -160,7 +161,7 @@ + xres = vmap_width * 2; + yres = vmap_height * 3; -- vmap = malloc(vmap_width * vmap_height * sizeof(char)); -+ vmap = malloc3(vmap_width, vmap_height, sizeof(char)); - if(vmap == NULL) +- vmap = malloc(vmap_width * vmap_height * sizeof(char)); ++ vmap = malloc3(vmap_width, vmap_height, sizeof(char)); + if(vmap == NULL) { - pm_error( "Cannot allocate memory" ); ---- converter/pbm/pbmtoascii.c -+++ converter/pbm/pbmtoascii.c + pm_error( "Cannot allocate memory" ); +--- netpbm-10.35.64/converter/pbm/pbmtoascii.c ++++ netpbm-10.35.64/converter/pbm/pbmtoascii.c @@ -115,9 +115,11 @@ pm_usage( usage ); @@ -450,8 +402,8 @@ line = (char*) pm_allocrow( ccols + 1, sizeof(char) ); for ( row = 0; row < rows; row += gridy ) ---- converter/pbm/pbmtocmuwm.c -+++ converter/pbm/pbmtocmuwm.c +--- netpbm-10.35.64/converter/pbm/pbmtocmuwm.c ++++ netpbm-10.35.64/converter/pbm/pbmtocmuwm.c @@ -43,6 +43,7 @@ bitrow = pbm_allocrow( cols ); @@ -460,8 +412,8 @@ padright = ( ( cols + 7 ) / 8 ) * 8 - cols; putinit( rows, cols ); ---- converter/pbm/pbmtogem.c -+++ converter/pbm/pbmtogem.c +--- netpbm-10.35.64/converter/pbm/pbmtogem.c ++++ netpbm-10.35.64/converter/pbm/pbmtogem.c @@ -123,6 +123,7 @@ bitsperitem = 0; bitshift = 7; @@ -470,9 +422,9 @@ outmax = (cols + 7) / 8; outrow = (unsigned char *) pm_allocrow (outmax, sizeof (unsigned char)); lastrow = (unsigned char *) pm_allocrow (outmax, sizeof (unsigned char)); ---- converter/pbm/pbmtogo.c -+++ converter/pbm/pbmtogo.c -@@ -90,6 +90,7 @@ +--- netpbm-10.35.64/converter/pbm/pbmtogo.c ++++ netpbm-10.35.64/converter/pbm/pbmtogo.c +@@ -96,6 +96,7 @@ bitrow = pbm_allocrow(cols); /* Round cols up to the nearest multiple of 8. */ @@ -480,8 +432,8 @@ rucols = ( cols + 7 ) / 8; bytesperrow = rucols; /* GraphOn uses bytes */ rucols = rucols * 8; ---- converter/pbm/pbmtoicon.c -+++ converter/pbm/pbmtoicon.c +--- netpbm-10.35.64/converter/pbm/pbmtoicon.c ++++ netpbm-10.35.64/converter/pbm/pbmtoicon.c @@ -42,6 +42,7 @@ bitrow = pbm_allocrow( cols ); @@ -490,19 +442,11 @@ pad = ( ( cols + 15 ) / 16 ) * 16 - cols; padleft = pad / 2; padright = pad - padleft; ---- converter/pbm/pbmtolj.c -+++ converter/pbm/pbmtolj.c -@@ -30,6 +30,7 @@ - #include "pbm.h" - #include - #include -+#include - - static int dpi = 75; - static int floating = 0; /* suppress the ``ESC & l 0 E'' ? */ -@@ -123,7 +124,11 @@ - pbm_readpbminit( ifp, &cols, &rows, &format ); - bitrow = pbm_allocrow( cols ); +--- netpbm-10.35.64/converter/pbm/pbmtolj.c ++++ netpbm-10.35.64/converter/pbm/pbmtolj.c +@@ -119,7 +119,11 @@ + static void + allocateBuffers(unsigned int const cols) { + overflow_add(cols, 8); rowBufferSize = (cols + 7) / 8; @@ -512,9 +456,9 @@ packBufferSize = rowBufferSize + (rowBufferSize + 127) / 128 + 1; deltaBufferSize = rowBufferSize + rowBufferSize / 8 + 10; ---- converter/pbm/pbmtomacp.c -+++ converter/pbm/pbmtomacp.c -@@ -104,6 +104,7 @@ +--- netpbm-10.35.64/converter/pbm/pbmtomacp.c ++++ netpbm-10.35.64/converter/pbm/pbmtomacp.c +@@ -101,6 +101,7 @@ if( !lflg ) left = 0; @@ -522,7 +466,7 @@ if( rflg ) { if( right - left >= MAX_COLS ) right = left + MAX_COLS - 1; -@@ -114,6 +115,8 @@ +@@ -111,6 +112,8 @@ if( !tflg ) top = 0; @@ -531,8 +475,8 @@ if( bflg ) { if( bottom - top >= MAX_LINES ) bottom = top + MAX_LINES - 1; ---- converter/pbm/pbmtomda.c -+++ converter/pbm/pbmtomda.c +--- netpbm-10.35.64/converter/pbm/pbmtomda.c ++++ netpbm-10.35.64/converter/pbm/pbmtomda.c @@ -179,6 +179,7 @@ nOutRowsUnrounded = bScale ? nInRows/2 : nInRows; @@ -541,8 +485,8 @@ nOutRows = ((nOutRowsUnrounded + 3) / 4) * 4; /* MDA wants rows a multiple of 4 */ nOutCols = nInCols / 8; ---- converter/pbm/pbmtomgr.c -+++ converter/pbm/pbmtomgr.c +--- netpbm-10.35.64/converter/pbm/pbmtomgr.c ++++ netpbm-10.35.64/converter/pbm/pbmtomgr.c @@ -43,6 +43,7 @@ bitrow = pbm_allocrow( cols ); @@ -551,8 +495,8 @@ padright = ( ( cols + 7 ) / 8 ) * 8 - cols; putinit( rows, cols ); ---- converter/pbm/pbmtoppa/pbm.c -+++ converter/pbm/pbmtoppa/pbm.c +--- netpbm-10.35.64/converter/pbm/pbmtoppa/pbm.c ++++ netpbm-10.35.64/converter/pbm/pbmtoppa/pbm.c @@ -105,6 +105,7 @@ return 0; @@ -571,18 +515,18 @@ memcpy (pbm->revdata, data, (pbm->width+7)/8); pbm->current_line--; } ---- converter/pbm/pbmtoppa/pbmtoppa.c -+++ converter/pbm/pbmtoppa/pbmtoppa.c -@@ -472,6 +472,7 @@ +--- netpbm-10.35.64/converter/pbm/pbmtoppa/pbmtoppa.c ++++ netpbm-10.35.64/converter/pbm/pbmtoppa/pbmtoppa.c +@@ -441,6 +441,7 @@ + pm_error("main(): unrecognized parameter '%s'", argv[argn]); } - } -+ overflow_add(Width, 7); - Pwidth=(Width+7)/8; - printer.fptr=out; ++ overflow_add(Width, 7); + Pwidth=(Width+7)/8; + printer.fptr=out; ---- converter/pbm/pbmtox10bm.c -+++ converter/pbm/pbmtox10bm.c +--- netpbm-10.35.64/converter/pbm/pbmtox10bm.c ++++ netpbm-10.35.64/converter/pbm/pbmtox10bm.c @@ -57,6 +57,7 @@ bitrow = pbm_allocrow( cols ); @@ -591,19 +535,18 @@ padright = ( ( cols + 15 ) / 16 ) * 16 - cols; printf( "#define %s_width %d\n", name, cols ); ---- converter/pbm/pbmtoxbm.c -+++ converter/pbm/pbmtoxbm.c -@@ -100,6 +100,8 @@ +--- netpbm-10.35.64/converter/pbm/pbmtoxbm.c ++++ netpbm-10.35.64/converter/pbm/pbmtoxbm.c +@@ -100,6 +100,7 @@ bitrow = pbm_allocrow(cols); /* Compute padding to round cols up to the nearest multiple of 8. */ -+ + overflow_add(cols, 8); padright = ((cols + 7)/8) * 8 - cols; printf("#define %s_width %d\n", name, cols); ---- converter/pbm/pbmtoybm.c -+++ converter/pbm/pbmtoybm.c +--- netpbm-10.35.64/converter/pbm/pbmtoybm.c ++++ netpbm-10.35.64/converter/pbm/pbmtoybm.c @@ -45,6 +45,7 @@ bitrow = pbm_allocrow( cols ); @@ -612,9 +555,9 @@ padright = ( ( cols + 15 ) / 16 ) * 16 - cols; putinit( cols, rows ); ---- converter/pbm/pbmtozinc.c -+++ converter/pbm/pbmtozinc.c -@@ -66,6 +66,7 @@ +--- netpbm-10.35.64/converter/pbm/pbmtozinc.c ++++ netpbm-10.35.64/converter/pbm/pbmtozinc.c +@@ -65,6 +65,7 @@ bitrow = pbm_allocrow( cols ); /* Compute padding to round cols up to the nearest multiple of 16. */ @@ -622,19 +565,19 @@ padright = ( ( cols + 15 ) / 16 ) * 16 - cols; printf( "USHORT %s[] = {\n",name); ---- converter/pbm/pktopbm.c -+++ converter/pbm/pktopbm.c -@@ -274,6 +274,7 @@ +--- netpbm-10.35.64/converter/pbm/pktopbm.c ++++ netpbm-10.35.64/converter/pbm/pktopbm.c +@@ -277,6 +277,7 @@ if (flagbyte == 7) { /* long form preamble */ integer packetlength = get32() ; /* character packet length */ car = get32() ; /* character number */ -+ overflow_add(packetlength, pktopbm_pkloc); ++ overflow_add(packetlength, pktopbm_pkloc); endofpacket = packetlength + pktopbm_pkloc; /* calculate end of packet */ if ((car >= MAXPKCHAR) || !filename[car]) { ---- converter/pbm/thinkjettopbm.l -+++ converter/pbm/thinkjettopbm.l -@@ -90,7 +90,9 @@ +--- netpbm-10.35.64/converter/pbm/thinkjettopbm.l ++++ netpbm-10.35.64/converter/pbm/thinkjettopbm.l +@@ -106,7 +106,9 @@ \033\*b{DIG}+W { int l; if (rowCount >= rowCapacity) { @@ -644,7 +587,7 @@ rows = realloc (rows, rowCapacity * sizeof *rows); if (rows == NULL) pm_error ("Out of memory."); -@@ -200,6 +202,8 @@ +@@ -216,6 +218,8 @@ /* * Quite simple since ThinkJet bit arrangement matches PBM */ @@ -653,8 +596,8 @@ pbm_writepbminit(stdout, maxRowLength*8, rowCount, 0); packed_bitrow = malloc(maxRowLength); ---- converter/pbm/ybmtopbm.c -+++ converter/pbm/ybmtopbm.c +--- netpbm-10.35.64/converter/pbm/ybmtopbm.c ++++ netpbm-10.35.64/converter/pbm/ybmtopbm.c @@ -88,6 +88,7 @@ pm_error( "EOF / read error" ); @@ -663,9 +606,9 @@ *padrightP = ( ( *colsP + 15 ) / 16 ) * 16 - *colsP; bitsperitem = 0; } ---- converter/pgm/lispmtopgm.c -+++ converter/pgm/lispmtopgm.c -@@ -57,6 +57,7 @@ +--- netpbm-10.35.64/converter/pgm/lispmtopgm.c ++++ netpbm-10.35.64/converter/pgm/lispmtopgm.c +@@ -58,6 +58,7 @@ pm_error( "depth (%d bits) is too large", depth); pgm_writepgminit( stdout, cols, rows, (gray) maxval, 0 ); @@ -673,29 +616,29 @@ grayrow = pgm_allocrow( ( cols + 7 ) / 8 * 8 ); for ( row = 0; row < rows; ++row ) -@@ -101,7 +102,9 @@ +@@ -102,7 +103,9 @@ if ( *depthP == 0 ) *depthP = 1; /* very old file */ - + -+ overflow_add(colsP, 31); -+ ++ overflow_add((int)colsP, 31); ++ *padrightP = ( ( *colsP + 31 ) / 32 ) * 32 - *colsP; if ( *colsP != (cols_32 - *padrightP) ) { ---- converter/pgm/psidtopgm.c -+++ converter/pgm/psidtopgm.c -@@ -60,6 +60,7 @@ - "bits/sample (%d) is too large.", bitspersample ); +--- netpbm-10.35.64/converter/pgm/psidtopgm.c ++++ netpbm-10.35.64/converter/pgm/psidtopgm.c +@@ -78,6 +78,7 @@ + pm_error("bits/sample (%d) is too large.", bitspersample); - pgm_writepgminit( stdout, cols, rows, (gray) maxval, 0 ); + pgm_writepgminit(stdout, cols, rows, maxval, 0); + overflow_add(cols, 7); - grayrow = pgm_allocrow( ( cols + 7 ) / 8 * 8 ); - for ( row = 0; row < rows; ++row) - { ---- converter/ppm/Makefile -+++ converter/ppm/Makefile + grayrow = pgm_allocrow((cols + 7) / 8 * 8); + for (row = 0; row < rows; ++row) { + unsigned int col; +--- netpbm-10.35.64/converter/ppm/Makefile ++++ netpbm-10.35.64/converter/ppm/Makefile @@ -11,7 +11,7 @@ PORTBINARIES = 411toppm eyuvtoppm gouldtoppm ilbmtoppm imgtoppm \ @@ -705,36 +648,88 @@ ppmtoacad ppmtoarbtxt \ ppmtobmp ppmtoeyuv ppmtogif ppmtoicr ppmtoilbm \ ppmtoleaf ppmtolj ppmtomitsu ppmtoneo \ ---- converter/ppm/ilbmtoppm.c -+++ converter/ppm/ilbmtoppm.c -@@ -580,6 +580,7 @@ +--- netpbm-10.35.64/converter/ppm/ilbmtoppm.c ++++ netpbm-10.35.64/converter/ppm/ilbmtoppm.c +@@ -595,6 +595,7 @@ rawtype *chp; - cols = bmhd->w; + cols = bmhdP->w; + overflow_add(cols, 15); bytes = RowBytes(cols); for( plane = 0; plane < nPlanes; plane++ ) { int mask; -@@ -881,6 +882,7 @@ +@@ -682,6 +683,23 @@ + Multipalette handling + ****************************************************************************/ - col = cmap->ncolors; ++static void * ++xmalloc2(x, y) ++ int x; ++ int y; ++{ ++ void *mem; ++ ++ overflow2(x,y); ++ if( x * y == 0 ) ++ return NULL; ++ ++ mem = malloc2(x,y); ++ if( mem == NULL ) ++ pm_error("out of memory allocating %d bytes", x * y); ++ return mem; ++} ++ -+ overflow2(col, 2); - tempcolor = ppm_allocrow(col * 2); - for( i = 0; i < col; i++ ) { - tempcolor[i] = cmap->color[i]; -@@ -1913,6 +1915,9 @@ - cmap->mp_change[i] = NULL; - if( PCHG.StartLine < 0 ) { - int nch; -+ if(PCHG.MaxReg < PCHG.MinReg) -+ pm_error("assert: MinReg > MaxReg"); -+ overflow_add(PCHG.MaxReg-PCHG.MinReg, 2); - nch = PCHG.MaxReg - PCHG.MinReg +1; - MALLOCARRAY_NOFAIL(cmap->mp_init, nch + 1); - for( i = 0; i < nch; i++ ) ---- converter/ppm/imgtoppm.c -+++ converter/ppm/imgtoppm.c + static void + multi_adjust(cmap, row, palchange) +@@ -1294,6 +1312,9 @@ + 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); + MALLOCARRAY_NOFAIL(redtable, redmaxval +1); + MALLOCARRAY_NOFAIL(greentable, greenmaxval +1); + MALLOCARRAY_NOFAIL(bluetable, bluemaxval +1); +@@ -1725,7 +1746,9 @@ + ChangeCount32 = *data++; + datasize -= 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; +@@ -1852,6 +1875,7 @@ + if( datasize < 2 ) goto fail; + changes = BIG_WORD(data); data += 2; datasize -= 2; + ++ overflow_add(changes, 1); + MALLOCARRAY_NOFAIL(cmap->mp_change[row], changes + 1); + for( i = 0; i < changes; i++ ) { + if( totalchanges >= PCHG->TotalChanges ) goto fail; +@@ -1965,6 +1989,9 @@ + cmap->mp_change[i] = NULL; + if( PCHG.StartLine < 0 ) { + int nch; ++ if(PCHG.MaxReg < PCHG.MinReg) ++ pm_error("assert: MinReg > MaxReg"); ++ overflow_add(PCHG.MaxReg-PCHG.MinReg, 2); + nch = PCHG.MaxReg - PCHG.MinReg +1; + MALLOCARRAY_NOFAIL(cmap->mp_init, nch + 1); + for( i = 0; i < nch; i++ ) +@@ -2041,6 +2068,7 @@ + if( typeid == ID_ILBM ) { + int isdeep; + ++ overflow_add(bmhdP->w, 15); + MALLOCARRAY_NOFAIL(ilbmrow, RowBytes(bmhdP->w)); + *viewportmodesP |= fakeviewport; /* -isham/-isehb */ + +--- netpbm-10.35.64/converter/ppm/imgtoppm.c ++++ netpbm-10.35.64/converter/ppm/imgtoppm.c @@ -84,6 +84,7 @@ len = atoi((char*) buf ); if ( fread( buf, len, 1, ifp ) != 1 ) @@ -751,91 +746,86 @@ if ( len != cols * rows ) pm_message( "pixel data length (%d) does not match image size (%d)", ---- converter/ppm/pcxtoppm.c -+++ converter/ppm/pcxtoppm.c -@@ -376,6 +376,7 @@ +--- netpbm-10.35.64/converter/ppm/pcxtoppm.c ++++ netpbm-10.35.64/converter/ppm/pcxtoppm.c +@@ -408,6 +408,7 @@ + /* + * clear the pixel buffer + */ ++ overflow2(bytesperline, 8); + npixels = (bytesperline * 8) / bitsperpixel; + p = pixels; + while (--npixels >= 0) +@@ -469,6 +470,7 @@ } /* BytesPerLine should be >= BitsPerPixel * cols / 8 */ + overflow2(BytesPerLine, 8); rawcols = BytesPerLine * 8 / BitsPerPixel; - if( cols > rawcols ) { + if (headerCols > rawcols) { pm_message("warning - BytesPerLine = %d, " -@@ -383,6 +384,7 @@ - BytesPerLine, rawcols); - cols = rawcols; - } -+ overflow2(Planes, BytesPerLine); - pcxrow = (unsigned char *) - pm_allocrow(Planes * BytesPerLine, sizeof(unsigned char)); - rawrow = (unsigned char *)pm_allocrow(rawcols, sizeof(unsigned char)); -@@ -578,6 +580,8 @@ - /* - * clear the pixel buffer - */ -+ -+ overflow2(bytesperline, 8); - npixels = (bytesperline * 8) / bitsperpixel; - p = pixels; - while (--npixels >= 0) ---- converter/ppm/picttoppm.c -+++ converter/ppm/picttoppm.c +--- netpbm-10.35.64/converter/ppm/picttoppm.c ++++ netpbm-10.35.64/converter/ppm/picttoppm.c @@ -1,3 +1,5 @@ +#error "Unfixable. Don't ship me" + /* * picttoppm.c -- convert a MacIntosh PICT file to PPM format. * ---- converter/ppm/pjtoppm.c -+++ converter/ppm/pjtoppm.c -@@ -127,19 +127,23 @@ +--- netpbm-10.35.64/converter/ppm/pjtoppm.c ++++ netpbm-10.35.64/converter/ppm/pjtoppm.c +@@ -127,19 +127,21 @@ 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); ++ overflow_add(rows, 100); rows += 100; -+ } ++ } if (image == NULL) { -+ overflow2(rows, planes); - MALLOCARRAY(image, rows * planes); - MALLOCARRAY(imlen, rows * planes); +- MALLOCARRAY(image, rows * planes); +- MALLOCARRAY(imlen, rows * planes); ++ image = (unsigned char **) ++ malloc3(rows , planes , sizeof(unsigned char *)); ++ imlen = (int *) malloc3(rows , planes, sizeof(int)); } else { -+ overflow2(rows,planes); ++ overflow2(rows,planes); image = (unsigned char **) - realloc(image, - rows * planes * -+ realloc2(image, -+ rows * planes, ++ realloc2(image, rows * planes, sizeof(unsigned char *)); - imlen = (int *) +- imlen = (int *) - realloc(imlen, rows * planes * sizeof(int)); -+ realloc2(imlen, rows * planes,sizeof(int)); ++ imlen = (int *) realloc2(imlen, rows * planes, sizeof(int)); } } if (image == NULL || imlen == NULL) -@@ -215,6 +219,8 @@ - cmd >= 0 && i < newcols; cmd--, i++) +@@ -212,8 +214,10 @@ + 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++) ++ cmd >= 0 && i < newcols; cmd--, i++) { buf[i] = val; ++ overflow_add(i, 1); ++ } cols = cols > i ? cols : i; -+ overflow_add(i, 1); -+ free(image[p + r * planes]); /* - * This is less than what we have so it realloc should -@@ -224,6 +230,7 @@ +@@ -224,6 +228,7 @@ image[p + r * planes] = (unsigned char *) realloc(buf, i); } } -+ overflow2(cols, 8); ++ overflow2(cols, 8); cols *= 8; } ---- converter/ppm/ppmtoeyuv.c -+++ converter/ppm/ppmtoeyuv.c -@@ -113,6 +113,7 @@ +--- netpbm-10.35.64/converter/ppm/ppmtoeyuv.c ++++ netpbm-10.35.64/converter/ppm/ppmtoeyuv.c +@@ -114,6 +114,7 @@ int index; @@ -843,8 +833,8 @@ MALLOCARRAY_NOFAIL(mult299 , maxval+1); MALLOCARRAY_NOFAIL(mult587 , maxval+1); MALLOCARRAY_NOFAIL(mult114 , maxval+1); ---- converter/ppm/ppmtoicr.c -+++ converter/ppm/ppmtoicr.c +--- netpbm-10.35.64/converter/ppm/ppmtoicr.c ++++ netpbm-10.35.64/converter/ppm/ppmtoicr.c @@ -169,7 +169,7 @@ if (rleflag) { @@ -854,26 +844,9 @@ p = testimage; for (i=0; i PCL_MAXVAL) pm_error("color range too large; reduce with ppmcscale"); + if (cols < 0 || rows < 0) -+ pm_error("negative size is not possible"); ++ pm_error("negative size is not possible"); /* Figure out the colormap. */ fprintf( stderr, "(Computing colormap..." ); fflush( stderr ); -@@ -293,6 +295,8 @@ +@@ -294,6 +296,8 @@ case 0: /* direct mode (no palette) */ bpp = bitsperpixel(maxval); /* bits per pixel */ bpg = bpp; bpb = bpp; @@ -970,7 +958,7 @@ bpp = (bpp*3+7)>>3; /* bytes per pixel now */ bpr = (bpp<<3)-bpg-bpb; bpp *= cols; /* bytes per row now */ -@@ -302,9 +306,13 @@ +@@ -303,9 +307,13 @@ case 3: case 7: pclindex++; default: bpp = 8/pclindex; @@ -984,8 +972,8 @@ if ((inrow = (char *)malloc((unsigned)bpp)) == NULL || (outrow = (char *)malloc((unsigned)bpp*2)) == NULL || (runcnt = (signed char *)malloc((unsigned)bpp)) == NULL) ---- converter/ppm/ppmtowinicon.c -+++ converter/ppm/ppmtowinicon.c +--- netpbm-10.35.64/converter/ppm/ppmtowinicon.c ++++ netpbm-10.35.64/converter/ppm/ppmtowinicon.c @@ -12,6 +12,7 @@ #include @@ -994,40 +982,61 @@ #include "winico.h" #include "ppm.h" -@@ -713,6 +714,12 @@ +@@ -218,6 +219,7 @@ + MALLOCARRAY_NOFAIL(rowData, rows); + icBitmap->xBytes = xBytes; + icBitmap->data = rowData; ++ overflow2(xBytes, rows); + icBitmap->size = xBytes * rows; + for (y=0;yxBytes = xBytes; + icBitmap->data = rowData; ++ overflow2(xBytes, rows); + icBitmap->size = xBytes * rows; + + for (y=0;yxBytes = xBytes; + icBitmap->data = rowData; ++ overflow2(xBytes, rows); + icBitmap->size = xBytes * rows; + + for (y=0;ybitcount = bpp; entry->ih = createInfoHeader(entry, xorBitmap, andBitmap); entry->colors = palette->colors; -+ -+ overflow2(4, entry->color_count); -+ overflow_add(xorBitmap->size, andBitmap->size); -+ overflow_add(xorBitmap->size + andBitmap->size, 40); -+ overflow_add(xorBitmap->size + andBitmap->size + 40, 4 * entry->color_count); -+ ++ overflow2(4, entry->color_count); ++ overflow_add(xorBitmap->size, andBitmap->size); ++ overflow_add(xorBitmap->size + andBitmap->size, 40); ++ overflow_add(xorBitmap->size + andBitmap->size + 40, 4 * entry->color_count); entry->size_in_bytes = xorBitmap->size + andBitmap->size + 40 + (4 * entry->color_count); if (verbose) -@@ -736,7 +743,7 @@ - * Perhaps I should use something that allocs a decent amount at start... - */ - MSIconData->entries = -- realloc (MSIconData->entries, MSIconData->count * sizeof(IC_Entry *)); -+ realloc2 (MSIconData->entries, MSIconData->count, sizeof(IC_Entry *)); - MSIconData->entries[MSIconData->count-1] = entry; - } - ---- converter/ppm/ppmtoxpm.c -+++ converter/ppm/ppmtoxpm.c -@@ -180,6 +180,7 @@ - int i; +--- netpbm-10.35.64/converter/ppm/ppmtoxpm.c ++++ netpbm-10.35.64/converter/ppm/ppmtoxpm.c +@@ -195,6 +195,7 @@ + unsigned int i; /* Allocate memory for printed number. Abort if error. */ + overflow_add(digits, 1); if (!(str = (char *) malloc(digits + 1))) pm_error("out of memory"); ---- converter/ppm/qrttoppm.c -+++ converter/ppm/qrttoppm.c +@@ -312,6 +313,7 @@ + unsigned int charsPerPixel; + unsigned int xpmMaxval; + ++ if (includeTransparent) overflow_add(ncolors, 1); + MALLOCARRAY(cmap, cmapSize); + if (cmapP == NULL) + pm_error("Out of memory allocating %u bytes for a color map.", +--- netpbm-10.35.64/converter/ppm/qrttoppm.c ++++ netpbm-10.35.64/converter/ppm/qrttoppm.c @@ -46,7 +46,7 @@ ppm_writeppminit( stdout, cols, rows, maxval, 0 ); @@ -1037,20 +1046,22 @@ if ( buf == (unsigned char *) 0 ) pm_error( "out of memory" ); ---- converter/ppm/sldtoppm.c -+++ converter/ppm/sldtoppm.c -@@ -307,6 +307,8 @@ +--- netpbm-10.35.64/converter/ppm/sldtoppm.c ++++ netpbm-10.35.64/converter/ppm/sldtoppm.c +@@ -306,7 +306,9 @@ + } /* 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); - PPM_ASSIGN(rgbcolour, 0, 0, 0); + PPM_ASSIGN(rgbcolor, 0, 0, 0); ppmd_filledrectangle(pixels, pixcols, pixrows, pixmaxval, 0, 0, ---- converter/ppm/ximtoppm.c -+++ converter/ppm/ximtoppm.c -@@ -283,6 +283,7 @@ +--- netpbm-10.35.64/converter/ppm/ximtoppm.c ++++ netpbm-10.35.64/converter/ppm/ximtoppm.c +@@ -115,6 +115,7 @@ header->bits_channel = atoi(a_head.bits_per_channel); header->alpha_flag = atoi(a_head.alpha_channel); if (strlen(a_head.author)) { @@ -1058,7 +1069,7 @@ if (!(header->author = calloc((unsigned int)strlen(a_head.author)+1, 1))) { pm_message("ReadXimHeader: can't calloc author string" ); -@@ -292,6 +293,7 @@ +@@ -124,6 +125,7 @@ strncpy(header->author, a_head.author, strlen(a_head.author)); } if (strlen(a_head.date)) { @@ -1066,7 +1077,7 @@ if (!(header->date =calloc((unsigned int)strlen(a_head.date)+1,1))){ pm_message("ReadXimHeader: can't calloc date string" ); return(0); -@@ -300,6 +302,7 @@ +@@ -132,6 +134,7 @@ strncpy(header->date, a_head.date, strlen(a_head.date)); } if (strlen(a_head.program)) { @@ -1074,7 +1085,7 @@ if (!(header->program = calloc( (unsigned int)strlen(a_head.program) + 1, 1))) { pm_message("ReadXimHeader: can't calloc program string" ); -@@ -326,6 +329,7 @@ +@@ -158,6 +161,7 @@ if (header->nchannels == 3 && header->bits_channel == 8) header->ncolors = 0; else if (header->nchannels == 1 && header->bits_channel == 8) { @@ -1082,8 +1093,18 @@ header->colors = (Color *)calloc((unsigned int)header->ncolors, sizeof(Color)); if (header->colors == NULL) { ---- converter/ppm/yuvtoppm.c -+++ converter/ppm/yuvtoppm.c +--- netpbm-10.35.64/converter/ppm/xpmtoppm.c ++++ netpbm-10.35.64/converter/ppm/xpmtoppm.c +@@ -700,6 +700,7 @@ + &ncolors, colorsP, &ptab); + *transparentP = -1; /* No transparency in version 1 */ + } ++ overflow2(*widthP, *heightP); + totalpixels = *widthP * *heightP; + MALLOCARRAY(*dataP, totalpixels); + if (*dataP == NULL) +--- netpbm-10.35.64/converter/ppm/yuvtoppm.c ++++ netpbm-10.35.64/converter/ppm/yuvtoppm.c @@ -72,6 +72,7 @@ ppm_writeppminit(stdout, cols, rows, (pixval) 255, 0); @@ -1092,23 +1113,9 @@ MALLOCARRAY(yuvbuf, (cols+1)/2); if (yuvbuf == NULL) pm_error("Unable to allocate YUV buffer for %d columns.", cols); ---- doc/COPYRIGHT.PATENT -+++ doc/COPYRIGHT.PATENT -@@ -33,6 +33,11 @@ - all the above to be modified by "to the best of the Netpbm - maintainer's knowledge." - -+These security fixes for netpbm are (c) Copyright 2002 Red Hat Inc. -+Red Hat has not fixed those items with patent claims or commercial -+use restrictions. These changes include NO WARRANTY and are provided -+under the Open Software License v.1 (see file OPENLICENSE). -+ - - - PATENTS ---- editor/pamcut.c -+++ editor/pamcut.c -@@ -509,6 +509,8 @@ +--- netpbm-10.35.64/editor/pamcut.c ++++ netpbm-10.35.64/editor/pamcut.c +@@ -527,6 +527,8 @@ outpam.width = rightcol-leftcol+1; outpam.height = bottomrow-toprow+1; @@ -1117,8 +1124,8 @@ pnm_writepaminit(&outpam); /* Write out top padding */ ---- editor/pamoil.c -+++ editor/pamoil.c +--- netpbm-10.35.64/editor/pamoil.c ++++ netpbm-10.35.64/editor/pamoil.c @@ -112,6 +112,7 @@ tuples = pnm_readpam(ifp, &inpam, PAM_STRUCT_SIZE(tuple_type)); pm_close(ifp); @@ -1127,30 +1134,8 @@ MALLOCARRAY(hist, inpam.maxval + 1); if (hist == NULL) pm_error("Unable to allocate memory for histogram."); ---- editor/pbmclean.c -+++ editor/pbmclean.c -@@ -147,7 +147,7 @@ - inrow[0] = inrow[1]; - inrow[1] = inrow[2]; - inrow[2] = shuffle ; -- if (row+1 < rows) { -+ if (row <= rows) { - /* Read the "next" row in from the file. Allocate buffer if neeeded */ - if (inrow[2] == NULL) - inrow[2] = pbm_allocrow(cols); ---- editor/pbmlife.c -+++ editor/pbmlife.c -@@ -54,7 +54,7 @@ - prevrow = thisrow; - thisrow = nextrow; - nextrow = temprow; -- if ( row < rows - 1 ) -+ if ( row <= rows ) - pbm_readpbmrow( ifp, nextrow, cols, format ); - - for ( col = 0; col < cols; ++col ) ---- editor/pbmpscale.c -+++ editor/pbmpscale.c +--- netpbm-10.35.64/editor/pbmpscale.c ++++ netpbm-10.35.64/editor/pbmpscale.c @@ -109,6 +109,7 @@ inrow[0] = inrow[1] = inrow[2] = NULL; pbm_readpbminit(ifd, &columns, &rows, &format) ; @@ -1159,29 +1144,18 @@ outrow = pbm_allocrow(columns*scale) ; MALLOCARRAY(flags, columns); if (flags == NULL) ---- editor/pbmreduce.c -+++ editor/pbmreduce.c +--- netpbm-10.35.64/editor/pbmreduce.c ++++ netpbm-10.35.64/editor/pbmreduce.c @@ -93,6 +93,7 @@ if ( halftone == QT_FS ) { /* Initialize Floyd-Steinberg. */ -+ overflow_add(newcols, 2); ++ overflow_add(newcols, 2); MALLOCARRAY(thiserr, newcols + 2); MALLOCARRAY(nexterr, newcols + 2); if ( thiserr == NULL || nexterr == NULL ) ---- editor/pnmcrop.c -+++ editor/pnmcrop.c -@@ -379,6 +379,8 @@ - - xelrow = pnm_allocrow(cols); - -+ overflow_add(right, 1); -+ overflow_add(bottom, 1); - newcols = right - left + 1; - newrows = bottom - top + 1; - pnm_writepnminit(stdout, newcols, newrows, maxval, format, 0); ---- editor/pnmcut.c -+++ editor/pnmcut.c +--- netpbm-10.35.64/editor/pnmcut.c ++++ netpbm-10.35.64/editor/pnmcut.c @@ -373,6 +373,7 @@ toprow, leftcol, bottomrow, rightcol); } @@ -1190,28 +1164,28 @@ output_cols = rightcol-leftcol+1; output_row = pnm_allocrow(output_cols); ---- editor/pnmgamma.c -+++ editor/pnmgamma.c -@@ -280,6 +280,7 @@ - xelval **rtableP, xelval **gtableP, xelval **btableP) { +--- netpbm-10.35.64/editor/pnmgamma.c ++++ netpbm-10.35.64/editor/pnmgamma.c +@@ -586,6 +586,7 @@ + xelval ** const btableP) { /* Allocate space for the tables. */ + overflow_add(maxval, 1); MALLOCARRAY(*rtableP, maxval+1); MALLOCARRAY(*gtableP, maxval+1); MALLOCARRAY(*btableP, maxval+1); ---- editor/pnmhisteq.c -+++ editor/pnmhisteq.c -@@ -210,6 +210,7 @@ - user has specified an input map file, read it in at - this point. */ +--- netpbm-10.35.64/editor/pnmhisteq.c ++++ netpbm-10.35.64/editor/pnmhisteq.c +@@ -102,6 +102,7 @@ + unsigned int pixelCount; + unsigned int * lumahist; + overflow_add(maxval, 1); - lumahist = (long *) pm_allocrow(maxval + 1, sizeof(long)); - memset((char *) lumahist, 0, (maxval + 1) * sizeof(long)); - ---- editor/pnmindex.csh -+++ editor/pnmindex.csh + MALLOCARRAY(lumahist, maxval + 1); + if (lumahist == NULL) + pm_error("Out of storage allocating array for %u histogram elements", +--- netpbm-10.35.64/editor/pnmindex.csh ++++ netpbm-10.35.64/editor/pnmindex.csh @@ -1,5 +1,8 @@ #!/bin/csh -f # @@ -1221,9 +1195,9 @@ # pnmindex - build a visual index of a bunch of anymaps # # Copyright (C) 1991 by Jef Poskanzer. ---- editor/pnmpad.c -+++ editor/pnmpad.c -@@ -356,6 +356,8 @@ +--- netpbm-10.35.64/editor/pnmpad.c ++++ netpbm-10.35.64/editor/pnmpad.c +@@ -358,6 +358,8 @@ computePadSizes(cmdline, cols, rows, &lpad, &rpad, &tpad, &bpad); @@ -1232,9 +1206,9 @@ newcols = cols + lpad + rpad; xelrow = pnm_allocrow(newcols); bgrow = pnm_allocrow(newcols); ---- editor/pnmpaste.c -+++ editor/pnmpaste.c -@@ -100,11 +100,16 @@ +--- netpbm-10.35.64/editor/pnmpaste.c ++++ netpbm-10.35.64/editor/pnmpaste.c +@@ -101,11 +101,16 @@ "y is too large -- the second anymap has only %d rows", rows2 ); @@ -1247,21 +1221,21 @@ + overflow_add(x, cols1); + overflow_add(y, rows1); -+ ++ if ( x + cols1 > cols2 ) pm_error( "x + width is too large by %d pixels", x + cols1 - cols2 ); if ( y + rows1 > rows2 ) ---- editor/pnmremap.c -+++ editor/pnmremap.c -@@ -228,6 +228,7 @@ +--- netpbm-10.35.64/editor/pnmremap.c ++++ netpbm-10.35.64/editor/pnmremap.c +@@ -279,6 +279,7 @@ unsigned int const fserrSize = pamP->width + 2; + overflow_add(pamP->width, 2); MALLOCARRAY(fserrP->thiserr, pamP->depth); if (fserrP->thiserr == NULL) - pm_error("Out of memory allocating Floyd-Steinberg structures"); -@@ -267,6 +268,7 @@ + pm_error("Out of memory allocating Floyd-Steinberg structures " +@@ -322,6 +323,7 @@ int col; @@ -1269,35 +1243,8 @@ for (col = 0; col < pamP->width + 2; ++col) { unsigned int plane; for (plane = 0; plane < pamP->depth; ++plane) ---- editor/pnmrotate.c -+++ editor/pnmrotate.c -@@ -11,6 +11,7 @@ - */ - - #include -+#include - - #include "pnm.h" - #include "shhopt.h" -@@ -563,8 +564,16 @@ - yshearfac = sin(cmdline.angle); - if (yshearfac < 0.0) - yshearfac = -yshearfac; -+ -+ if (rows * xshearfac + cols + 0.999999 >= INT_MAX) -+ pm_error("image too large"); -+ - tempcols = rows * xshearfac + cols + 0.999999; - yshearjunk = (tempcols - cols) * yshearfac; -+ -+ if (tempcols * yshearfac + rows + 0.999999 >= INT_MAX) -+ pm_error("image too large"); -+ - newrows = tempcols * yshearfac + rows + 0.999999; - x2shearjunk = (newrows - rows - yshearjunk) * xshearfac; - newrows -= 2 * yshearjunk; ---- editor/pnmscalefixed.c -+++ editor/pnmscalefixed.c +--- netpbm-10.35.64/editor/pnmscalefixed.c ++++ netpbm-10.35.64/editor/pnmscalefixed.c @@ -209,6 +209,8 @@ const int rows, const int cols, int * newrowsP, int * newcolsP) { @@ -1311,7 +1258,7 @@ if (*newcolsP < 1) *newcolsP = 1; if (*newrowsP < 1) *newrowsP = 1; -+ ++ + overflow2(*newcolsP, *newrowsP); } @@ -1320,15 +1267,15 @@ unfilled. We can address that by stretching, whereas the other case would require throwing away some of the input. */ -+ ++ + overflow2(newcols, SCALE); + overflow2(newrows, SCALE); sxscale = SCALE * newcols / cols; syscale = SCALE * newrows / rows; ---- editor/pnmshear.c -+++ editor/pnmshear.c -@@ -12,6 +12,7 @@ +--- netpbm-10.35.64/editor/pnmshear.c ++++ netpbm-10.35.64/editor/pnmshear.c +@@ -14,6 +14,7 @@ #include #include @@ -1336,52 +1283,54 @@ #include "pnm.h" #include "shhopt.h" -@@ -198,6 +199,11 @@ +@@ -196,6 +197,11 @@ if ( shearfac < 0.0 ) shearfac = -shearfac; + if(rows * shearfac >= INT_MAX-1) + pm_error("image too large"); -+ ++ + overflow_add(rows * shearfac, cols+1); -+ ++ newcols = rows * shearfac + cols + 0.999999; pnm_writepnminit( stdout, newcols, rows, newmaxval, newformat, 0 ); ---- editor/ppmdither.c -+++ editor/ppmdither.c +--- netpbm-10.35.64/editor/ppmdither.c ++++ netpbm-10.35.64/editor/ppmdither.c @@ -111,6 +111,9 @@ (dith_dim * sizeof(int *)) + /* pointers */ (dith_dim * dith_dim * sizeof(int)); /* data */ -+ overflow2(dith_dim, sizeof(int *)); -+ overflow3(dith_dim, dith_dim, sizeof(int)); -+ overflow_add(dith_dim * sizeof(int *), dith_dim * dith_dim * sizeof(int)); ++ overflow2(dith_dim, sizeof(int *)); ++ overflow3(dith_dim, dith_dim, sizeof(int)); ++ overflow_add(dith_dim * sizeof(int *), dith_dim * dith_dim * sizeof(int)); dith_mat = (unsigned int **) malloc(dith_mat_sz); if (dith_mat == NULL) ---- generator/pbmpage.c -+++ generator/pbmpage.c -@@ -15,6 +15,7 @@ - #include - #include - #include -+#include - #include "pbm.h" +@@ -165,7 +168,8 @@ + if (dith_nb < 2) + pm_error("too few shades for blue, minimum of 2"); - /* Support both US and A4. */ -@@ -161,6 +162,9 @@ +- MALLOCARRAY(*colormapP, dith_nr * dith_ng * dith_nb); ++ overflow2(dith_nr, dith_ng); ++ *colormapP = malloc3(dith_nr * dith_ng, dith_nb, sizeof(pixel)); + if (*colormapP == NULL) + pm_error("Unable to allocate space for the color lookup table " + "(%d by %d by %d pixels).", dith_nr, dith_ng, dith_nb); +--- netpbm-10.35.64/generator/pbmpage.c ++++ netpbm-10.35.64/generator/pbmpage.c +@@ -170,6 +170,9 @@ /* We round the allocated row space up to a multiple of 8 so the ugly fast code below can work. */ -+ -+ overflow_add(Width, 7); -+ - pbmrow = pbm_allocrow(((Width+7)/8)*8); ++ ++ overflow_add(bitmap.Width, 7); ++ + pbmrow = pbm_allocrow(((bitmap.Width+7)/8)*8); bitmap_cursor = 0; ---- generator/pbmtext.c -+++ generator/pbmtext.c +--- netpbm-10.35.64/generator/pbmtext.c ++++ netpbm-10.35.64/generator/pbmtext.c @@ -89,12 +89,14 @@ for (i = 1; i < argc; i++) { @@ -1397,173 +1346,146 @@ totaltextsize += strlen(argv[i]); text = realloc(text, totaltextsize); if (text == NULL) -@@ -594,7 +596,9 @@ - while (fgets(buf, sizeof(buf), stdin) != NULL) { +@@ -575,6 +577,7 @@ + struct text input_text; + + if (cmdline_text) { ++ overflow_add(strlen(cmdline_text), 1); + allocTextArray(&input_text, 1, strlen(cmdline_text)*8); + strcpy(input_text.textArray[0], cmdline_text); + fix_control_chars(input_text.textArray[0], fn); +@@ -600,7 +603,9 @@ + "Cannot process.", (sizeof(buf)-1)/8); fix_control_chars(buf, fn); if (lineCount >= maxlines) { -+ overflow2(maxlines, 2); ++ overflow2(maxlines, 2); maxlines *= 2; -+ overflow2(maxlines, sizeof(char*)); ++ overflow2(maxlines, sizeof(char *)); text_array = (char**) realloc((char*) text_array, maxlines * sizeof(char*)); if (text_array == NULL) -@@ -680,6 +684,7 @@ +@@ -686,6 +691,7 @@ hmargin = fontP->maxwidth; } else { vmargin = fontP->maxheight; -+ overflow2(2, fontP->maxwidth); ++ overflow2(2, fontP->maxwidth); hmargin = 2 * fontP->maxwidth; } } -@@ -695,12 +700,19 @@ +@@ -702,6 +708,12 @@ } else - lp = input_text; + formattedText = inputText; + overflow2(2, vmargin); -+ overflow2(lp.lineCount, fontP->maxheight); -+ overflow_add(vmargin * 2, lp.lineCount * fontP->maxheight); -+ overflow2(lp.lineCount-1, cmdline.lspace); -+ overflow_add(2 * vmargin + lp.lineCount * fontP->maxheight, (lp.lineCount-1) * cmdline.lspace); ++ overflow2(formattedText.lineCount, fontP->maxheight); ++ overflow2(formattedText.lineCount-1, cmdline.lspace); ++ overflow_add(vmargin * 2, formattedText.lineCount * fontP->maxheight); ++ overflow_add(vmargin * 2 + formattedText.lineCount * fontP->maxheight, (formattedText.lineCount-1) * cmdline.lspace); ++ rows = 2 * vmargin + - lp.lineCount * fontP->maxheight + - (lp.lineCount-1) * cmdline.lspace; - - compute_image_width(lp, fontP, cmdline.space, &maxwidth, &maxleftb); + formattedText.lineCount * fontP->maxheight + + (formattedText.lineCount-1) * cmdline.lspace; +@@ -709,6 +721,9 @@ + compute_image_width(formattedText, fontP, cmdline.space, + &maxwidth, &maxleftb); + overflow2(2, hmargin); + overflow_add(2*hmargin, maxwidth); ++ cols = 2 * hmargin + maxwidth; - bits = pbm_allocarray(cols, rows); ---- generator/pgmcrater.c -+++ generator/pgmcrater.c -@@ -131,6 +131,7 @@ - /* Acquire the elevation array and initialise it to mean + if (cols == 0 || rows == 0) +--- netpbm-10.35.64/generator/pgmcrater.c ++++ netpbm-10.35.64/generator/pgmcrater.c +@@ -132,7 +132,7 @@ + /* Acquire the elevation array and initialize it to mean surface elevation. */ -+ overflow2(SCRX, SCRY); - MALLOCARRAY(aux, SCRX * SCRY); +- MALLOCARRAY(aux, SCRX * SCRY); ++ aux = (unsigned short *) malloc3(SCRX, SCRY, sizeof(short)); if (aux == NULL) pm_error("out of memory allocating elevation array"); ---- generator/pgmkernel.c -+++ generator/pgmkernel.c -@@ -68,6 +68,7 @@ + +--- netpbm-10.35.64/generator/pgmkernel.c ++++ netpbm-10.35.64/generator/pgmkernel.c +@@ -68,7 +68,7 @@ kycenter = (fysize - 1) / 2.0; ixsize = fxsize + 0.999; iysize = fysize + 0.999; -+ overflow2(ixsize, iysize); - MALLOCARRAY(fkernel, ixsize * iysize); +- MALLOCARRAY(fkernel, ixsize * iysize); ++ fkernel = (double *) malloc3 (ixsize, iysize, sizeof(double)); for (i = 0; i < iysize; i++) for (j = 0; j < ixsize; j++) { ---- generator/ppmforge.c -+++ generator/ppmforge.c -@@ -418,7 +418,7 @@ + fkernel[i*ixsize+j] = 1.0 / (1.0 + w * sqrt((double) +--- netpbm-10.35.64/lib/libpam.c ++++ netpbm-10.35.64/lib/libpam.c +@@ -227,7 +227,8 @@ + int const bytesPerTuple = allocationDepth(pamP) * sizeof(sample); + tuple * tuplerow; - if (UINT_MAX / n < n) - pm_error("arithmetic overflow squaring %u", n); -- cp = malloc(n * n); -+ cp = malloc2(n,n); - if (cp == NULL) - pm_error("Unable to allocate %u bytes for cp array", n); - ---- lib/libpam.c -+++ lib/libpam.c -@@ -273,7 +273,8 @@ - themselves. Each tuple consists of 'depth' samples. +- 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 +--- netpbm-10.35.64/lib/libpammap.c ++++ netpbm-10.35.64/lib/libpammap.c +@@ -103,6 +103,8 @@ */ + struct tupleint_list_item * retval; -- tuplerow = malloc(pamP->width * (sizeof(tuple *) + bytes_per_tuple)); -+ overflow_add(sizeof(tuple *), bytes_per_tuple); -+ tuplerow = malloc2(pamP->width, sizeof(tuple *) + bytes_per_tuple); - if (tuplerow == NULL) - pm_error("Out of memory allocating space for a tuple row of\n" - "%d tuples by %d samples per tuple by %d bytes per sample.", ---- lib/libpammap.c -+++ lib/libpammap.c -@@ -315,7 +315,11 @@ - as a single malloc block and suballocate internally. - */ - -- pool = malloc(mainTableSize + size * tupleIntSize); + overflow2(pamP->depth, sizeof(sample)); -+ overflow_add(pamP->depth*sizeof(sample), -+ sizeof(struct tupleint) - sizeof(sample)); -+ overflow_add(mainTableSize, size); -+ pool = malloc2(mainTableSize + size, tupleIntSize); - - retval = (tupletable) pool; - ---- lib/libpbm1.c -+++ lib/libpbm1.c -@@ -58,6 +58,8 @@ ++ overflow_add(sizeof(*retval)-sizeof(retval->tupleint.tuple), pamP->depth*sizeof(sample)); + unsigned int const size = + sizeof(*retval) - sizeof(retval->tupleint.tuple) + + pamP->depth * sizeof(sample); +--- netpbm-10.35.64/lib/libpbm1.c ++++ netpbm-10.35.64/lib/libpbm1.c +@@ -56,6 +56,7 @@ pm_message("pm_filepos passed to pm_check() is %u bytes", sizeof(pm_filepos)); #endif + overflow2(bytes_per_row, rows); -+ pm_check(file, check_type, need_raster_size, retval_p); } } ---- lib/libpbmvms.c -+++ lib/libpbmvms.c +--- netpbm-10.35.64/lib/libpbmvms.c ++++ netpbm-10.35.64/lib/libpbmvms.c @@ -1,3 +1,5 @@ +#warning "NOT AUDITED" + /*************************************************************************** This file contains library routines needed to build Netpbm for VMS. However, as of 2000.05.26, when these were split out of libpbm1.c ---- lib/libpm.c -+++ lib/libpm.c -@@ -35,6 +35,7 @@ +--- netpbm-10.35.64/lib/libpm.c ++++ netpbm-10.35.64/lib/libpm.c +@@ -36,6 +36,7 @@ /* This makes the the x64() functions available on AIX */ #include +#include - #include "version.h" - #include "compile.h" - #include "nstring.h" -@@ -122,7 +123,7 @@ - pm_allocrow(int const cols, int const size) { - char * itrow; - -- itrow = malloc( cols * size ); -+ itrow = malloc2( cols , size ); - if ( itrow == NULL ) - pm_error( "out of memory allocating a row" ); - return itrow; -@@ -158,11 +159,13 @@ - char** rowIndex; - char * rowheap; - -+ -+ overflow_add(rows, 1); - MALLOCARRAY(rowIndex, rows + 1); - if ( rowIndex == NULL ) + #include + #include + #include +@@ -213,7 +214,7 @@ + if (rowIndex == NULL) pm_error("out of memory allocating row index (%u rows) for an array", rows); -- rowheap = malloc( rows * cols * size ); -+ rowheap = malloc3( rows, cols, size ); - if ( rowheap == NULL ) { +- rowheap = malloc(rows * cols * size); ++ rowheap = malloc3(rows, cols, size); + if (rowheap == NULL) { /* We couldn't get the whole heap in one block, so try fragmented format. -@@ -1014,7 +1017,7 @@ - - long filepos; - -- pm_tell2(fileP, (pm_filepos *)&filepos, sizeof(filepos)); -+ pm_tell2(fileP, (pm_filepos *)(void *)&filepos, sizeof(filepos)); - - return filepos; - } -@@ -1171,4 +1174,53 @@ +@@ -1491,4 +1492,53 @@ } +/* + * Maths wrapping + */ -+ -+void overflow2(int a, int b) ++ ++void __overflow2(int a, int b) +{ + if(a < 0 || b < 0) + pm_error("object too large"); @@ -1609,44 +1531,32 @@ + return realloc(a, b*c); +} ---- lib/pm.h -+++ lib/pm.h -@@ -161,6 +161,12 @@ - pm_closew (FILE* const f); +--- netpbm-10.35.64/lib/pm.h ++++ netpbm-10.35.64/lib/pm.h +@@ -343,4 +343,11 @@ + #endif +void *malloc2(int, int); +void *malloc3(int, int, int); -+void overflow2(int, int); ++#define overflow2(a,b) __overflow2(a,b) ++void __overflow2(int, int); +void overflow3(int, int, int); +void overflow_add(int, int); -+void *realloc2(void *, int, int); - - int - pm_readbigshort(FILE * const in, ---- lib/util/mallocvar.h -+++ lib/util/mallocvar.h -@@ -51,7 +51,7 @@ - - - #define MALLOCARRAY(arrayName, nElements) \ -- mallocProduct((void **)&arrayName, nElements, sizeof(arrayName[0])) -+ mallocProduct((void **)(void *)&arrayName, nElements, sizeof(arrayName[0])) - - #define REALLOCARRAY(arrayName, nElements) \ - reallocProduct((void **)&arrayName, nElements, sizeof(arrayName[0])) ---- other/pnmcolormap.c -+++ other/pnmcolormap.c -@@ -795,6 +795,7 @@ ++ + #endif +--- netpbm-10.35.64/other/pnmcolormap.c ++++ netpbm-10.35.64/other/pnmcolormap.c +@@ -839,6 +839,7 @@ pamP->width = intsqrt; else pamP->width = intsqrt + 1; + overflow_add(intsqrt, 1); } { - unsigned int const intQuotient = colormapSize / pamP->width; ---- urt/README -+++ urt/README + unsigned int const intQuotient = colormap.size / pamP->width; +--- netpbm-10.35.64/urt/README ++++ netpbm-10.35.64/urt/README @@ -18,3 +18,8 @@ defines stdout as a variable, so that wouldn't compile. So I changed it to NULL and added a line to rle_hdr_init to set that field to @@ -1656,8 +1566,8 @@ +Removed pipe through and compress support (unsafe) + +Alan Cox ---- urt/Runput.c -+++ urt/Runput.c +--- netpbm-10.35.64/urt/Runput.c ++++ netpbm-10.35.64/urt/Runput.c @@ -17,6 +17,8 @@ * * Modified at BRL 16-May-88 by Mike Muuss to avoid Alliant STDC desire @@ -1667,7 +1577,7 @@ */ /* * Runput.c - General purpose Run Length Encoding. -@@ -200,9 +202,11 @@ +@@ -202,9 +204,11 @@ if ( the_hdr->background != 0 ) { register int i; @@ -1681,7 +1591,7 @@ /* * If even number of bg color bytes, put out one more to get to * 16 bit boundary. -@@ -222,7 +226,7 @@ +@@ -224,7 +228,7 @@ /* Big-endian machines are harder */ register int i, nmap = (1 << the_hdr->cmaplen) * the_hdr->ncmap; @@ -1690,8 +1600,8 @@ if ( h_cmap == NULL ) { fprintf( stderr, ---- urt/rle.h -+++ urt/rle.h +--- netpbm-10.35.64/urt/rle.h ++++ netpbm-10.35.64/urt/rle.h @@ -14,6 +14,9 @@ * If you modify this software, you should include a notice giving the * name of the person performing the modification, the date of modification, @@ -1702,16 +1612,17 @@ */ /* * rle.h - Global declarations for Utah Raster Toolkit RLE programs. -@@ -169,6 +172,16 @@ +@@ -166,6 +169,17 @@ */ extern rle_hdr rle_dflt_hdr; -+/* ++/* + * Provided by pm library + */ -+ ++ +extern void overflow_add(int, int); -+extern void overflow2(int, int); ++#define overflow2(a,b) __overflow2(a,b) ++extern void __overflow2(int, int); +extern void overflow3(int, int, int); +extern void *malloc2(int, int); +extern void *malloc3(int, int, int); @@ -1719,8 +1630,8 @@ /* Declare RLE library routines. */ ---- urt/rle_addhist.c -+++ urt/rle_addhist.c +--- netpbm-10.35.64/urt/rle_addhist.c ++++ netpbm-10.35.64/urt/rle_addhist.c @@ -14,6 +14,8 @@ * If you modify this software, you should include a notice giving the * name of the person performing the modification, the date of modification, @@ -1730,46 +1641,43 @@ */ /* * rle_addhist.c - Add to the HISTORY comment in header -@@ -69,18 +71,29 @@ +@@ -76,13 +78,19 @@ + return; + + length = 0; +- for (i = 0; argv[i]; ++i) ++ for (i = 0; argv[i]; ++i) { ++ overflow_add(length, strlen(argv[i])); ++ overflow_add(length+1, strlen(argv[i])); + length += strlen(argv[i]) +1; /* length of each arg plus space. */ ++ } - length=0; - for(i=0;argv[i];i++) -+ { -+ overflow_add(length, strlen(argv[i])); -+ overflow_add(length+1, strlen(argv[i])); - length+= strlen(argv[i]) +1; /* length of each arg plus space. */ -- -+ } - (void)time (&temp); - timedate=ctime(&temp); - length+= strlen(timedate); /* length of date and time in ASCII. */ + time(&temp); + timedate = ctime(&temp); + length += strlen(timedate); /* length of date and time in ASCII. */ -+ overflow_add(strlen(padding), 4); -+ overflow_add(strlen(padding) + 4, strlen(histoire)); -+ overflow_add(length, strlen(padding) + 4 + strlen(histoire)); - length+= strlen(padding) + 3 + strlen(histoire) + 1; /* length of padding, "on " and length of history name plus "="*/ - if(in_hdr) /* if we are interested in the old comments... */ - old=rle_getcom(histoire,in_hdr); /* get old comment. */ ++ overflow_add(strlen(padding), 4); ++ overflow_add(strlen(histoire), strlen(padding) + 4); ++ overflow_add(length, strlen(histoire) + strlen(padding) + 4); + length += strlen(padding) + 3 + strlen(histoire) + 1; + /* length of padding, "on " and length of history name plus "="*/ + if (in_hdr) /* if we are interested in the old comments... */ +@@ -90,9 +98,12 @@ + else + old = NULL; + +- if (old && *old) ++ if (old && *old) { ++ overflow_add(length, strlen(old)); + length += strlen(old); /* add length if there. */ ++ } -- if((old) && (*old)) length+= strlen(old); /* add length if there. */ -+ if((old) && (*old)) -+ { -+ overflow_add(length, strlen(old)); -+ length+= strlen(old); /* add length if there. */ -+ } ++ overflow_add(length, 1); + ++length; /*Cater for the null. */ -+ overflow_add(length, 1); - length++; /*Cater for the null. */ - - if((newc=(char *)malloc((unsigned int) length)) == NULL)return; -@@ -95,5 +108,4 @@ - (void)strcat(newc,padding); /* to line up multiple histories.*/ - - (void)rle_putcom(newc,out_hdr); -- - } ---- urt/rle_getrow.c -+++ urt/rle_getrow.c + MALLOCARRAY(newc, length); +--- netpbm-10.35.64/urt/rle_getrow.c ++++ netpbm-10.35.64/urt/rle_getrow.c @@ -17,6 +17,8 @@ * * Modified at BRL 16-May-88 by Mike Muuss to avoid Alliant STDC desire @@ -1779,8 +1687,16 @@ */ /* * rle_getrow.c - Read an RLE file in. ---- urt/rle_hdr.c -+++ urt/rle_hdr.c +@@ -168,6 +170,7 @@ + register char * cp; + + VAXSHORT( comlen, infile ); /* get comment length */ ++ overflow_add(comlen, 1); + evenlen = (comlen + 1) & ~1; /* make it even */ + if ( evenlen ) + { +--- netpbm-10.35.64/urt/rle_hdr.c ++++ netpbm-10.35.64/urt/rle_hdr.c @@ -14,6 +14,8 @@ * If you modify this software, you should include a notice giving the * name of the person performing the modification, the date of modification, @@ -1790,7 +1706,7 @@ */ /* * rle_hdr.c - Functions to manipulate rle_hdr structures. -@@ -77,7 +79,10 @@ +@@ -79,7 +81,10 @@ /* Fill in with copies of the strings. */ if ( the_hdr->cmd != pgmname ) { @@ -1802,7 +1718,7 @@ RLE_CHECK_ALLOC( pgmname, tmp, 0 ); strcpy( tmp, pgmname ); the_hdr->cmd = tmp; -@@ -85,7 +90,9 @@ +@@ -87,7 +92,9 @@ if ( the_hdr->file_name != fname ) { @@ -1813,7 +1729,7 @@ RLE_CHECK_ALLOC( pgmname, tmp, 0 ); strcpy( tmp, fname ); the_hdr->file_name = tmp; -@@ -150,6 +157,7 @@ +@@ -152,6 +159,7 @@ if ( to_hdr->bg_color ) { int size = to_hdr->ncolors * sizeof(int); @@ -1821,7 +1737,7 @@ to_hdr->bg_color = (int *)malloc( size ); RLE_CHECK_ALLOC( to_hdr->cmd, to_hdr->bg_color, "background color" ); memcpy( to_hdr->bg_color, from_hdr->bg_color, size ); -@@ -158,7 +166,7 @@ +@@ -160,7 +168,7 @@ if ( to_hdr->cmap ) { int size = to_hdr->ncmap * (1 << to_hdr->cmaplen) * sizeof(rle_map); @@ -1830,7 +1746,7 @@ RLE_CHECK_ALLOC( to_hdr->cmd, to_hdr->cmap, "color map" ); memcpy( to_hdr->cmap, from_hdr->cmap, size ); } -@@ -171,11 +179,16 @@ +@@ -173,11 +181,16 @@ int size = 0; CONST_DECL char **cp; for ( cp=to_hdr->comments; *cp; cp++ ) @@ -1847,8 +1763,8 @@ size *= sizeof(char *); to_hdr->comments = (CONST_DECL char **)malloc( size ); RLE_CHECK_ALLOC( to_hdr->cmd, to_hdr->comments, "comments" ); ---- urt/rle_open_f.c -+++ urt/rle_open_f.c +--- netpbm-10.35.64/urt/rle_open_f.c ++++ netpbm-10.35.64/urt/rle_open_f.c @@ -6,6 +6,9 @@ * University of Michigan * Date: 11/14/89 @@ -1858,8 +1774,8 @@ + * Killed of crazy unsafe pipe/compress stuff */ - #include "rle.h" -@@ -184,7 +187,7 @@ + #define _XOPEN_SOURCE /* Make sure fdopen() is in stdio.h */ +@@ -188,7 +191,7 @@ cp = file_name + strlen( (char*) file_name ) - 2; /* Pipe case. */ @@ -1868,20 +1784,20 @@ { int thepid; /* PID from my_popen */ if ( (fp = my_popen( file_name + 1, mode, &thepid )) == NULL ) -@@ -199,9 +202,10 @@ +@@ -203,9 +206,10 @@ } /* Compress case. */ - else if ( cp > file_name && *cp == '.' && *(cp + 1) == 'Z' ) -+ else if (/* SMOKING SOMETHING */ 0 && cp > file_name && *cp == '.' && *(cp + 1) == 'Z' ) ++ else if ( /* SMOKING SOMETHING */ 0 && cp > file_name && *cp == '.' && *(cp + 1) == 'Z' ) { int thepid; /* PID from my_popen. */ -+ overflow_add(20, strlen(file_name)); ++ overflow_add(20, strlen(file_name)); combuf = (char *)malloc( 20 + strlen( file_name ) ); if ( combuf == NULL ) { ---- urt/rle_putcom.c -+++ urt/rle_putcom.c +--- netpbm-10.35.64/urt/rle_putcom.c ++++ netpbm-10.35.64/urt/rle_putcom.c @@ -14,6 +14,8 @@ * If you modify this software, you should include a notice giving the * name of the person performing the modification, the date of modification, @@ -1891,41 +1807,24 @@ */ /* * rle_putcom.c - Add a picture comment to the header struct. -@@ -89,19 +91,22 @@ - - if ( the_hdr->comments == NULL ) - { -- the_hdr->comments = (CONST_DECL char **)malloc( 2 * sizeof(char *) ); -+ the_hdr->comments = (CONST_DECL char **)malloc2( 2, sizeof(char *) ); - the_hdr->comments[0] = value; - the_hdr->comments[1] = NULL; - } - else - { - for ( i = 2, cp = the_hdr->comments; *cp != NULL; i++, cp++ ) -+ { +@@ -98,12 +100,14 @@ + const char * v; + const char ** old_comments; + int i; +- for (i = 2, cp = the_hdr->comments; *cp != NULL; ++i, ++cp) ++ for (i = 2, cp = the_hdr->comments; *cp != NULL; ++i, ++cp) { + overflow_add(i, 1); - if ( match( value, *cp ) != NULL ) - { - v = *cp; - *cp = value; - return v; - } + if (match(value, *cp) != NULL) { + v = *cp; + *cp = value; + return v; + } + } - /* Not found */ - /* Can't realloc because somebody else might be pointing to this - * comments block. Of course, if this were true, then the -@@ -111,7 +116,7 @@ - * could copy the pointers, too. - */ - old_comments = the_hdr->comments; -- the_hdr->comments = (CONST_DECL char **)malloc(i * sizeof(char *) ); -+ the_hdr->comments = (CONST_DECL char **)malloc2(i , sizeof(char *) ); - the_hdr->comments[--i] = NULL; - the_hdr->comments[--i] = value; - for ( i--; i >= 0; i-- ) ---- urt/scanargs.c -+++ urt/scanargs.c + /* Not found */ + /* Can't realloc because somebody else might be pointing to this + * comments block. Of course, if this were true, then the +--- netpbm-10.35.64/urt/scanargs.c ++++ netpbm-10.35.64/urt/scanargs.c @@ -38,6 +38,8 @@ * * Modified at BRL 16-May-88 by Mike Muuss to avoid Alliant STDC desire diff --git a/netpbm-10.26.44-aliasing.patch b/netpbm-10.26.44-aliasing.patch deleted file mode 100644 index bc302f3..0000000 --- a/netpbm-10.26.44-aliasing.patch +++ /dev/null @@ -1,35 +0,0 @@ ---- lib/util/mallocvar.h -+++ lib/util/mallocvar.h -@@ -12,9 +12,8 @@ - #include - #include - --static __inline__ void --mallocProduct(void ** const resultP, -- unsigned int const factor1, -+static __inline__ void * -+mallocProduct(unsigned int const factor1, - unsigned int const factor2) { - /*---------------------------------------------------------------------------- - malloc a space whose size in bytes is the product of 'factor1' and -@@ -30,9 +29,9 @@ - nobody really needs to allocate more than 4GB of memory. - -----------------------------------------------------------------------------*/ - if (UINT_MAX / factor2 < factor1) -- *resultP = NULL; \ -+ return NULL; - else -- *resultP = malloc(factor1 * factor2); -+ return malloc(factor1 * factor2); - } - - -@@ -51,7 +50,7 @@ - - - #define MALLOCARRAY(arrayName, nElements) \ -- mallocProduct((void **)(void *)&arrayName, nElements, sizeof(arrayName[0])) -+ (arrayName = mallocProduct(nElements, sizeof(arrayName[0]))) - - #define REALLOCARRAY(arrayName, nElements) \ - reallocProduct((void **)&arrayName, nElements, sizeof(arrayName[0])) diff --git a/netpbm-10.26.44-documentation.tar.bz2 b/netpbm-10.26.44-documentation.tar.bz2 deleted file mode 100644 index 4f1904d..0000000 --- a/netpbm-10.26.44-documentation.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9f8e83e8ac287dc57aacb3e4ef2764fdad6075ccdd361358398f50c489733d57 -size 564985 diff --git a/netpbm-10.26.44-fix1overflow.patch b/netpbm-10.26.44-fix1overflow.patch deleted file mode 100644 index ba8c9b9..0000000 --- a/netpbm-10.26.44-fix1overflow.patch +++ /dev/null @@ -1,13 +0,0 @@ -Sent to upstream maintainer. -Marcus - ---- converter/ppm/ppmtoarbtxt.c -+++ converter/ppm/ppmtoarbtxt.c -@@ -276,7 +276,7 @@ - objlen = 0; - for (;;) /* Read replacement string up to ')' */ - { -- if (objlen == sizeof (objstr)) break; /* ')' not found */ -+ if (objlen == sizeof (objstr)-1) break; /* ')' not found */ - if ((chr = getc (sklfile)) == EOF) break; - if (chr == meta3) break; - objstr[objlen++] = chr; diff --git a/netpbm-10.26.44-fixes.patch b/netpbm-10.26.44-fixes.patch deleted file mode 100644 index 4cd1a19..0000000 --- a/netpbm-10.26.44-fixes.patch +++ /dev/null @@ -1,208 +0,0 @@ ---- buildtools/Makefile -+++ buildtools/Makefile -@@ -33,10 +33,10 @@ - -o $@ $< - - typegen.o endiangen.o:%.o:%.c -- $(CC_FOR_BUILD) -c -o $@ $< -+ $(CC_FOR_BUILD) $(CFLAGS) -c -o $@ $< - - $(PROGS):%:%.o -- $(LD_FOR_BUILD) -o $@ $< -+ $(LD_FOR_BUILD) $(LDFLAGS) -o $@ $< - - clean: cleanlocal - .PHONY: cleanlocal ---- converter/other/fiasco/codec/coeff.c -+++ converter/other/fiasco/codec/coeff.c -@@ -14,6 +14,7 @@ - * $State: Exp $ - */ - -+#include - #include "config.h" - - #include "types.h" ---- converter/other/fiasco/codec/dfiasco.c -+++ converter/other/fiasco/codec/dfiasco.c -@@ -14,6 +14,9 @@ - * $State: Exp $ - */ - -+#include -+#include -+ - #include "config.h" - - #include "types.h" ---- converter/other/fiasco/input/basis.c -+++ converter/other/fiasco/input/basis.c -@@ -14,6 +14,7 @@ - * $State: Exp $ - */ - -+#include - #include "config.h" - - #include "types.h" ---- converter/other/jpegtopnm.c -+++ converter/other/jpegtopnm.c -@@ -511,6 +511,7 @@ - pm_error("Input JPEG image has 'unknown' color space " - "(JCS_UNKNOWN).\n" - "We cannot interpret this image."); -+ *output_type_p = PPM_TYPE; /* not reached */ - break; - case JCS_GRAYSCALE: - *output_type_p = PGM_TYPE; -@@ -538,6 +539,7 @@ - default: - pm_error("Internal error: unknown color space code %d passed " - "to set_color_spaces().", jpeg_color_space); -+ *output_type_p = PPM_TYPE; /* not reached */ - } - pm_message("WRITING %s FILE", - *output_type_p == PPM_TYPE ? "PPM" : "PGM"); ---- converter/other/pamtopfm.c -+++ converter/other/pamtopfm.c -@@ -239,6 +239,7 @@ - enum endian const endian) { - - struct pfmHeader pfmHeader; -+ memset(&pfmHeader, 0, sizeof(pfmHeader)); - - pfmHeader.width = pamP->width; - pfmHeader.height = pamP->height; ---- converter/other/pamtouil.c -+++ converter/other/pamtouil.c -@@ -377,11 +377,15 @@ - int i; - - for (i = 0; i < ncolors; ++i) { -- cixel_map const cmapEntry = cmap[i]; -- if (cmapEntry.uilname) -+ cixel_map cmapEntry = cmap[i]; -+ if (cmapEntry.uilname) { - freeString(cmapEntry.uilname); -- if (cmapEntry.rgbname) -+ cmapEntry.uilname = NULL; -+ } -+ if (cmapEntry.rgbname) { - freeString(cmapEntry.uilname); -+ cmapEntry.rgbname = NULL; -+ } - } - } - ---- converter/other/pgmtopbm.c -+++ converter/other/pgmtopbm.c -@@ -549,6 +549,8 @@ - converter.cols = cols; - converter.convertRow = &dither8ConvertRow; - converter.destroy = NULL; -+ converter.stateP = NULL; -+ converter.maxval = 0; - - /* Scale dither matrix. */ - for (row = 0; row < 16; ++row) { -@@ -621,6 +623,7 @@ - converter.cols = cols; - converter.convertRow = &clusterConvertRow; - converter.destroy = &clusterDestroy; -+ converter.maxval = 0; - - MALLOCVAR_NOFAIL(stateP); - ---- converter/other/pnmtofits.c -+++ converter/other/pnmtofits.c -@@ -122,13 +122,13 @@ - sprintf( card, "NAXIS3 = 3 " ); - write_card( card ); ++i; - } -- sprintf( card, "BSCALE = %E ", bscale ); -+ sprintf( card, "BSCALE = %E ", bscale ); /* %E is 12 chars */ - write_card( card ); ++i; -- sprintf( card, "BZERO = %E ", fits_bzero ); -+ sprintf( card, "BZERO = %E ", fits_bzero ); - write_card( card ); ++i; -- sprintf( card, "DATAMAX = %E ", datamax ); -+ sprintf( card, "DATAMAX = %E ", datamax ); - write_card( card ); ++i; -- sprintf( card, "DATAMIN = %E ", datamin ); -+ sprintf( card, "DATAMIN = %E ", datamin ); - write_card( card ); ++i; - sprintf( card, "HISTORY Created by pnmtofits. " ); - write_card( card ); ++i; ---- converter/other/pnmtopng.c -+++ converter/other/pnmtopng.c -@@ -145,6 +145,7 @@ - retval.green = PPM_GETG(scaled); - retval.blue = PPM_GETB(scaled); - retval.gray = PNM_GET1(scaled); -+ retval.index = 0; - - return retval; - } ---- converter/other/rletopnm.c -+++ converter/other/rletopnm.c -@@ -100,7 +100,7 @@ - optStruct3 opt; - unsigned int option_def_index; - -- unsigned int alphaoutSpec; -+ unsigned int alphaoutSpec = 0; - - option_def_index = 0; /* incremented by OPTENT3 */ - OPTENT3('h', "headerdump", OPT_FLAG, ---- converter/ppm/ximtoppm.c -+++ converter/ppm/ximtoppm.c -@@ -50,7 +50,7 @@ - - unsigned int option_def_index; - -- unsigned int alphaoutSpec; -+ unsigned int alphaoutSpec = 0; - - option_def_index = 0; /* incremented by OPTENT3 */ - OPTENT3(0, "alphaout", OPT_STRING, ---- editor/pamenlarge.c -+++ editor/pamenlarge.c -@@ -52,7 +52,7 @@ - Create a tuple *outTupleRowP which is actually a row of pointers into - inTupleRow[], so as to map input pixels to output pixels by stretching. - -----------------------------------------------------------------------------*/ -- tuple * const newtuplerow; -+ tuple * newtuplerow; - int col; - - MALLOCARRAY_NOFAIL(newtuplerow, outpamP->width); ---- lib/pm.h -+++ lib/pm.h -@@ -20,6 +20,7 @@ - #include - #include - #include -+#include - - #ifdef VMS - #include ---- lib/util/wordaccess.h -+++ lib/util/wordaccess.h -@@ -76,6 +76,7 @@ - return *((wordint *)bytes); - } - -+static __inline__ void - wordintToBytes(wordintBytes * const bytesP, - wordint const wordInt) { - ---- urt/rle.h -+++ urt/rle.h -@@ -36,6 +36,7 @@ - #include "rle_config.h" /* Configuration parameters. */ - - #include /* Declare FILE. */ -+#include - - #ifdef c_plusplus - #define USE_PROTOTYPES diff --git a/netpbm-10.26.44-manpages.patch b/netpbm-10.26.44-manpages.patch deleted file mode 100644 index 57a201c..0000000 --- a/netpbm-10.26.44-manpages.patch +++ /dev/null @@ -1,86 +0,0 @@ ---- GNUmakefile -+++ GNUmakefile -@@ -64,7 +64,6 @@ - - SUBDIRS = $(PRODUCT_SUBDIRS) $(SUPPORT_SUBDIRS) - --SCRIPTS = manweb - MANUALS1 = netpbm - NOMERGEBINARIES = netpbm - -@@ -198,11 +197,9 @@ - endif - - .PHONY: install-merge install-nonmerge --install-merge: install.merge install.lib install.data \ -- install.manweb install.man -+install-merge: install.merge install.lib install.data - --install-nonmerge: install.bin install.lib install.data \ -- install.manweb install.man -+install-nonmerge: install.bin install.lib install.data - - .PHONY: merge - merge: netpbm -@@ -290,17 +287,6 @@ - install.lib: - endif - --.PHONY: install.manweb --install.manweb: $(PKGDIR)/man/web/netpbm.url $(PKGDIR)/bin/doc.url -- --$(PKGDIR)/man/web/netpbm.url: $(PKGDIR)/man/web -- echo "$(NETPBM_DOCURL)" > $@ -- chmod $(INSTALL_PERM_MAN) $@ -- --$(PKGDIR)/bin/doc.url: $(PKGDIR)/bin -- echo "$(NETPBM_DOCURL)" > $@ -- chmod $(INSTALL_PERM_MAN) $@ -- - .PHONY: install-dev - # Note that you might install the development package and NOT the runtime - # package. If you have a special system for building stuff, maybe for ---- Makefile.common -+++ Makefile.common -@@ -360,31 +360,6 @@ - $(INSTALL) -c -m $(INSTALL_PERM_DATA) \ - $(SRCDIR)/$(SUBDIR)/$(@:%_installdata=%) $< - -- --.PHONY: install.man install.man1 install.man3 install.man5 --install.man: install.man1 install.man3 install.man5 \ -- $(SUBDIRS:%=%/install.man) -- --MANUALS1 = $(BINARIES) $(SCRIPTS) -- --install.man1: $(PKGDIR)/man/man1 $(MANUALS1:%=%_installman1) -- --install.man3: $(PKGDIR)/man/man3 $(MANUALS3:%=%_installman3) -- --install.man5: $(PKGDIR)/man/man5 $(MANUALS5:%=%_installman5) -- --%_installman1: $(PKGDIR)/man/man1 -- perl -w $(SRCDIR)/buildtools/makepointerman $(@:%_installman1=%) \ -- $(NETPBM_DOCURL) $< 1 $(MANPAGE_FORMAT) $(INSTALL_PERM_MAN) -- --%_installman3: $(PKGDIR)/man/man3 -- perl -w $(SRCDIR)/buildtools/makepointerman $(@:%_installman3=%) \ -- $(NETPBM_DOCURL) $< 3 $(MANPAGE_FORMAT) $(INSTALL_PERM_MAN) -- --%_installman5: $(PKGDIR)/man/man5 -- perl -w $(SRCDIR)/buildtools/makepointerman $(@:%_installman5=%) \ -- $(NETPBM_DOCURL) $< 5 $(MANPAGE_FORMAT) $(INSTALL_PERM_MAN) -- - .PHONY: clean - - ifneq ($(EXE)x,x) -@@ -422,9 +397,6 @@ - %/install.lib: - $(MAKE) -C $(dir $@) -f $(SRCDIR)/$(SUBDIR)/$(dir $@)Makefile \ - SRCDIR=$(SRCDIR) BUILDDIR=$(BUILDDIR) $(notdir $@) --%/install.man: -- $(MAKE) -C $(dir $@) -f $(SRCDIR)/$(SUBDIR)/$(dir $@)Makefile \ -- SRCDIR=$(SRCDIR) BUILDDIR=$(BUILDDIR) $(notdir $@) - %/install.data: - $(MAKE) -C $(dir $@) -f $(SRCDIR)/$(SUBDIR)/$(dir $@)Makefile \ - SRCDIR=$(SRCDIR) BUILDDIR=$(BUILDDIR) $(notdir $@) diff --git a/netpbm-10.26.44-manpages.tar.bz2 b/netpbm-10.26.44-manpages.tar.bz2 deleted file mode 100644 index a871392..0000000 --- a/netpbm-10.26.44-manpages.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6e908d298c441959e311b588301b3c18d578a4137e1244765c41f65e543b9cd8 -size 478853 diff --git a/netpbm-10.26.44-nohpcdtoppm-nojbig.tar.bz2 b/netpbm-10.26.44-nohpcdtoppm-nojbig.tar.bz2 deleted file mode 100644 index 7ee2aa7..0000000 --- a/netpbm-10.26.44-nohpcdtoppm-nojbig.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:259d0ad28c1450fd06d9208aa068db50d0295af960ed59330c42fbf8840d8659 -size 1725501 diff --git a/netpbm-10.26.44-pamperspective.patch b/netpbm-10.26.44-pamperspective.patch deleted file mode 100644 index 4924b9c..0000000 --- a/netpbm-10.26.44-pamperspective.patch +++ /dev/null @@ -1,988 +0,0 @@ ---- editor/pamperspective.c -+++ editor/pamperspective.c -@@ -18,13 +18,16 @@ - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - --#include "pam.h" --#include "shhopt.h" --#include "mallocvar.h" -+#define _BSD_SOURCE /* Make sure strdup is int string.h */ - -+#include -+#include - #include - #include - -+#include "mallocvar.h" -+#include "shhopt.h" -+#include "pam.h" - - typedef double number; - -@@ -43,7 +46,10 @@ - typedef enum {lattice, pixel_s} coord_system; - const char *const system_token[3] = {"lattice", "pixel", NULL}; - --typedef enum {nearest, linear} interpolation; -+/* Note that 'nearest' is a function in AIX's math.h. So don't use -+ that as a symbol. -+*/ -+typedef enum {interp_nearest, interp_linear} interpolation; - const char *const interpolation_token[3] = {"nearest", "linear", NULL}; - - typedef enum {free_, fixed} proportion; -@@ -160,9 +166,9 @@ - xw_ll, yw_ll, zw_ll, xw_lr, yw_lr, zw_lr; - - /* Originally I planned to include the possibility to move the -- centre of projection, that is the pixel the camera "looks at". It -+ center of projection, that is the pixel the camera "looks at". It - turned out, maybe surprisingly, that this does not have any -- effect. So now this centre is moved to (0,0). -+ effect. So now this center is moved to (0,0). - - Another original plan was to correct the output parameters - depending on the lengths of the paralellograms sides or its -@@ -180,26 +186,36 @@ - } world_data; - - --/* -- Internal infile buffer -- -- This is a cyclic in random access out buffer, just large enough -- to store all input lines that are still in use. --*/ - - typedef struct { -- -- int num_rows, last_physical, last_logical; -- tuple** rows; -- const struct pam* inpam; -- -+/*---------------------------------------------------------------------------- -+ A buffer of image input. This holds a vertical window of the input. -+-----------------------------------------------------------------------------*/ -+ unsigned int numRows; -+ /* Height of buffer window */ -+ unsigned int nextImageRow; -+ /* Row number of the next image row that will go into the buffer. -+ The 'numRows' rows before (above) that are in the buffer now. -+ */ -+ unsigned int nextBufferRow; -+ /* Row number in the physical buffer (index of rows[]) where -+ the next row read will go (hence where the oldest/highest -+ row in the buffer is now). -+ */ -+ tuple ** rows; -+ /* The rows of the window, as a cyclic buffer */ -+ const struct pam * inpamP; -+ /* The image from which we fill the buffer */ - } buffer; - - - -+typedef void interpolateFn(tuple, number, number); -+ - /* - The following are like MALLOCARRAY_NOFAIL and MALLOCVAR_NOFAIL, -- but issue an error message instead of aborting. -+ but abort (fail) the program instead of killing the process with an -+ abort signal. - */ - - #define MALLOCARRAY_SAFE(handle,length) \ -@@ -232,7 +248,7 @@ - options->enums[0] = lattice; /* --input_system */ - options->enums[1] = lattice; /* --output_system */ - options->enums[2] = pixel_u; /* --input_unit */ -- options->enums[3] = nearest; /* --interpolation */ -+ options->enums[3] = interp_nearest; /* --interpolation */ - options->enums[4] = free_; /* --proportion */ - options->bools[0] = TRUE; /* --frame_include */ - } -@@ -302,45 +318,53 @@ - - - --static number parse_float (char *const text) -+static number -+parseFloat(const char * const text) { - /*---------------------------------------------------------------------------- - Parse an argument given to a float command line option. We cannot -- just call strtod, because we want to support fractions like "5/3" -+ just call strtod, because we want to parse fractions like "5/3" - -----------------------------------------------------------------------------*/ --{ -- bool error; -- char* end; -- char* denstart; -- number num,den; -- -- error = FALSE; -- num = strtod (text, &end); /* try strtod anyway */ -- switch (*end) { -- case 0: /* It is a plain number */ -- break; -- case '/': /* It might be a fraction */ -- /* (Try to) parse the numerator */ -- *end = 0; -- num = strtod (text, &end); -- error = (*end) != 0; -- if (!error) { -- /* Undo the above change */ -- *end = '/'; -- /* (Try to) parse the denominator */ -- denstart = end+1; -- den = strtod (denstart, &end); -- error = (fabs(den)xi = (number) parse_float(specification); -- new_point->yi = (number) parse_float(comma_seek+1); -+ new_point->xi = (number) parseFloat(specification); -+ new_point->yi = (number) parseFloat(comma_seek+1); - *comma_seek = ','; - } - -@@ -418,9 +442,12 @@ - } - - --static void parse_command_line (int argc, char* argv[], option *const options) --{ -- char* float_text[num_float_options]; -+ -+static void -+parseCommandLine(int argc, const char * argv[], -+ option * const options) { -+ -+ const char* float_text[num_float_options]; - unsigned int float_spec[num_float_options]; - char* enum_text[num_enum_options]; - unsigned int enum_spec[num_enum_options]; -@@ -433,6 +460,8 @@ - unsigned int option_def_index; - optEntry* option_def; - -+ set_command_line_defaults(options); -+ - /* Let shhopt try its best */ - - option_def_index = 0; -@@ -456,7 +485,7 @@ - opt.opt_table = option_def; - opt.short_allowed = FALSE; - opt.allowNegNum = TRUE; -- optParseOptions3 (&argc, argv, opt, sizeof(opt), 0); -+ optParseOptions3 (&argc, (char **)argv, opt, sizeof(opt), 0); - - /* The non-option arguments are optionally all eight coordinates - and optionally the input filename -@@ -489,7 +518,7 @@ - - for (i=0; ifloats[i] = parse_float (float_text[i]); -+ options->floats[i] = parseFloat (float_text[i]); - - /* Parse enum options -- shhopt retrieved them as strings */ - -@@ -607,7 +636,7 @@ - a11*x1 + a12*x2 + a13*x3 = b1 - a21*x1 + a22*x2 + a23*x3 = b2 - a31*x1 + a32*x2 + a33*x3 = b3 -- The return value is wether the system is solvable -+ The return value is whether the system is solvable - ----------------------------------------------------------------------------*/ - { - number c11,c12,d1,c21,c22,d2,e,f; -@@ -702,18 +731,18 @@ - static void determine_world_parallelogram (world_data *const world, - const option *const options) - /*---------------------------------------------------------------------------- -- constructs xw_ul,...,zw_lr from xi_ul,...,yi_lr -+ Construct xw_ul,...,zw_lr from xi_ul,...,yi_lr - -- Actually this is a solution of a linear equation system. -+ This is a solution of a linear equation system. - -- We first solve 4 variables (the 4 z-coordinates) against 4 -- equations: Each z-coordinate determines the corresponding x- and -- y-coordinates in a linear fashion, where the coefficients are taken -- from the image coordinates. This corresponds to the fact that a -- point of an image determines a line in the world. -+ We first solve 4 equations for 4 variables (the 4 z-coordinates): -+ Each z-coordinate determines the corresponding x- and y-coordinates -+ in a linear fashion, where the coefficients are taken from the image -+ coordinates. This corresponds to the fact that a point of an image -+ determines a line in the world. - - 3 equations state that the 4 points form a parallelogram. The 4th -- equation is for normalization and states, that the centre of the -+ equation is for normalization and states that the center of the - parallelogram has a z-coordinate of 1. - -----------------------------------------------------------------------------*/ - { -@@ -881,9 +910,11 @@ - - - --static int diff (int const a, int const b) --{ -- return MAX (b-a, a-b); -+static unsigned int -+distance(unsigned int const a, -+ unsigned int const b) { -+ -+ return a > b ? a - b : b - a; - } - - -@@ -1020,8 +1051,8 @@ - Constructs ax,...,cz from xw_ul,...,zw_lr - - The calculations assume pixel coordinates, that is the point ul -- corresponds to the centre of the pixel (0,0) and the point lr -- corresponds to the centre of the pixel (width-1,height-1) -+ corresponds to the center of the pixel (0,0) and the point lr -+ corresponds to the center of the pixel (width-1,height-1) - -----------------------------------------------------------------------------*/ - { - number width,height; -@@ -1050,292 +1081,455 @@ - - - --static void outpixel_to_inpixel (int const xo, int const yo, -- number* const xi, number* const yi, -- const world_data *const world) --{ -- number xof,yof,xw,yw,zw; -+static void -+outpixelToInPos(int const outCol, -+ int const outRow, -+ number * const inColP, -+ number * const inRowP, -+ const world_data * const worldP) { -+/*---------------------------------------------------------------------------- -+ For a pixel of the output image at Column 'outCol', row 'outRow', -+ determine the position in the input image that corresponds to the -+ center of that pixel. -+ -+ This position is not a pixel position -- it's a position in -+ continuous space, for example Row 9.2, Column 0.1. And it isn't -+ necessarily within the input image, for example Column 600 even though -+ the input image is only 500 pixels wide, and a coordinate might even -+ be negative. -+-----------------------------------------------------------------------------*/ -+ number const outColF = (number) outCol; -+ number const outRowF = (number) outRow; - -- xof = (number) xo; -- yof = (number) yo; -- xw = world->ax + world->bx*xof + world->cx*yof; -- yw = world->ay + world->by*xof + world->cy*yof; -- zw = world->az + world->bz*xof + world->cz*yof; -- *xi = xw/zw; -- *yi = yw/zw; -+ number const xw = worldP->ax + worldP->bx * outColF + worldP->cx * outRowF; -+ number const yw = worldP->ay + worldP->by * outColF + worldP->cy * outRowF; -+ number const zw = worldP->az + worldP->bz * outColF + worldP->cz * outRowF; -+ -+ *inColP = xw/zw; -+ *inRowP = yw/zw; - } - --static int outpixel_to_iny (int xo, int yo, const world_data *const world) --{ -- number xi,yi; - -- outpixel_to_inpixel (xo,yo,&xi,&yi,world); - -- return (int) yi; -+static int -+outpixelToInRow(int const outCol, -+ int const outRow, -+ const world_data * const worldP) { -+ -+ number xi, yi; -+ -+ outpixelToInPos(outCol, outRow, &xi, &yi, worldP); -+ -+ return (int) yi; - } - --static int clean_y (int const y, const struct pam *const outpam) --{ -- return MIN(MAX(0, y), outpam->height-1); -+ -+ -+static int -+boundedRow(int const unboundedRow, -+ const struct pam * const outpamP) { -+ -+ return MIN(MAX(0, unboundedRow), outpamP->height-1); - } - --static void init_buffer (buffer *const b, const world_data *const world, -- const option *const options, -- const struct pam *const inpam, -- const struct pam *const outpam) --{ -- int yul, yur, yll, ylr, y_min; -- int i, num_rows; - -- yul = outpixel_to_iny (0,0,world); -- yur = outpixel_to_iny (outpam->width-1,0,world); -- yll = outpixel_to_iny (0,outpam->height-1,world); -- ylr = outpixel_to_iny (outpam->width-1,outpam->height-1,world); -- -- y_min = MIN (MIN (yul,yur), MIN (yll,ylr)); -- num_rows = MAX (MAX (diff (yul, yur), -- diff (yll, ylr)), -- MAX (diff (clean_y(yul,outpam), clean_y(y_min,outpam)), -- diff (clean_y(yur,outpam), clean_y(y_min,outpam)))) -- + 2; -- switch (options->enums[3]) { /* --interpolation */ -- case nearest: -- break; -- case linear: -- num_rows += 1; -- break; -- }; -- if (num_rows > inpam->height) -- num_rows = inpam->height; - -- b->num_rows = num_rows; -- MALLOCARRAY_SAFE (b->rows, num_rows); -- for (i=0; irows[i] = pnm_allocpamrow (inpam); -- pnm_readpamrow (inpam, b->rows[i]); -- }; -- b->last_physical = num_rows-1; -- b->last_logical = num_rows-1; -- b->inpam = inpam; -+#if 0 -+/* This is the original calculation of window height. It's -+ mysterious, and doesn't work. It looks like it basically wants to -+ take the greater of vertical displacement of the top edge of the -+ input quadrilateral and that of the bottom edge. In simple -+ scenarios, that is in fact what it does, and I can see how those -+ edges might be where the most stretching takes place. However, it -+ the calculation is obviously more complex than that. -+ -+ It doesn't work because the actual image generation produces rows -+ in the middle that are derived from lines in the input quadrilateral -+ with greater slope than either the top or bottom edge. I.e. to -+ compute one output row, it needs more rows of input than this -+ calculation provides. -+ -+ I don't know if that means the computation of the output is wrong -+ or the computation of the window height is wrong. The code is too -+ opaque. But just to make a viable computation, I replaced the -+ window height calculation with the brute force computation you -+ see below: it determines the vertical displacement of every line -+ of the input quadrilateral that is used to generate an output row -+ and takes the greatest of them for the window height. -+ -+ - Bryan Henderson 08.07.27. -+*/ -+ -+ -+static unsigned int -+windowHeight(const world_data * const worldP, -+ const struct pam * const inpamP, -+ const struct pam * const outpamP, -+ const option * const optionsP) { -+ -+ unsigned int numRows; -+ int yul, yur, yll, ylr, y_min; -+ -+ yul = outpixelToInRow(0, 0, worldP); -+ yur = outpixelToInRow(outpamP->width-1, 0, worldP); -+ yll = outpixelToInRow(0, outpamP->height-1, worldP); -+ ylr = outpixelToInRow(outpamP->width-1, outpamP->height-1, worldP); -+ -+ y_min = MIN(MIN(yul, yur), MIN(yll, ylr)); -+ numRows = MAX(MAX(diff(yul, yur), -+ diff(yll, ylr)), -+ MAX(diff(boundedRow(yul, outpamP), -+ boundedRow(y_min, outpamP)), -+ diff(boundedRow(yur, outpamP), -+ boundedRow(y_min, outpamP)))) -+ + 2; -+ switch (optionsP->enums[3]) { /* --interpolation */ -+ case interp_nearest: -+ break; -+ case interp_linear: -+ numRows += 1; -+ break; -+ } -+ if (numRows > inpamP->height) -+ numRows = inpamP->height; -+ -+ return numRows; - } -+#endif - --static tuple* read_buffer (buffer *const b, int const logical_y) --{ -- int y; - -- while (logical_y > b->last_logical) { -- b->last_physical++; -- if (b->last_physical == b->num_rows) -- b->last_physical = 0; -- pnm_readpamrow (b->inpam, b->rows[b->last_physical]); -- b->last_logical++; -- } - -- y = logical_y - b->last_logical + b->last_physical; -- if (y<0) -- y += b->num_rows; -+static unsigned int -+windowHeight(const world_data * const worldP, -+ const struct pam * const inpamP, -+ const struct pam * const outpamP, -+ const option * const optionsP) { -+ -+ unsigned int outRow; -+ unsigned int maxRowWindowHeight; -+ -+ maxRowWindowHeight = 1; /* initial value */ - -- return b->rows[y]; -+ for (outRow = 0; outRow < outpamP->height; ++outRow) { -+ unsigned int const leftCol = 0; -+ unsigned int const rghtCol = outpamP->width - 1; -+ unsigned int const leftInRow = -+ boundedRow(outpixelToInRow(leftCol, outRow, worldP), outpamP); -+ unsigned int const rghtInRow = -+ boundedRow(outpixelToInRow(rghtCol, outRow, worldP), outpamP); -+ -+ unsigned int const rowWindowHeight = distance(leftInRow, rghtInRow); -+ -+ maxRowWindowHeight = MAX(maxRowWindowHeight, rowWindowHeight); -+ } -+ -+ /* We add 2 for rounding */ -+ -+ return maxRowWindowHeight + 2; - } - --static void free_buffer (buffer *const b) --{ -- int i; - -- /* We have to read through the end of the input image even if we -- didn't use all the rows, because if the input is a pipe, the -- guy writing into the pipe may require all the data to go -- through. -- */ -- -- while (b->last_logical < b->inpam->height-1) { -- pnm_readpamrow(b->inpam, b->rows[0]); -- ++b->last_logical; -- } - -- for (i=0; inum_rows; i++) -- pnm_freepamrow (b->rows[i]); -- free (b->rows); -+static void -+buffer_init(buffer * const bufferP, -+ const world_data * const worldP, -+ const option * const optionsP, -+ const struct pam * const inpamP, -+ const struct pam * const outpamP) { -+ -+ unsigned int const numRows = -+ windowHeight(worldP, inpamP, outpamP, optionsP); -+ -+ unsigned int row; -+ -+ MALLOCARRAY_SAFE(bufferP->rows, numRows); -+ -+ for (row = 0; row < numRows; ++row) { -+ bufferP->rows[row] = pnm_allocpamrow(inpamP); -+ pnm_readpamrow(inpamP, bufferP->rows[row]); -+ } -+ -+ bufferP->nextImageRow = numRows; -+ bufferP->nextBufferRow = 0; -+ bufferP->numRows = numRows; -+ -+ bufferP->inpamP = inpamP; - } - - - -+static const tuple * -+buffer_getRow(buffer * const bufferP, -+ unsigned int const imageRow) { -+/*---------------------------------------------------------------------------- -+ Return row 'imageRow' of an image. -+ -+ The return value is a pointer into storage that belongs to *bufferP. -+ -+ *bufferP remembers only a window of the image, and the window -+ cannot move up, so 'imageRow' cannot be higher in the image than -+ the lowest row read so far through *bufferP plus *bufferP's maximum -+ window height. We assume that. -+-----------------------------------------------------------------------------*/ -+ unsigned int bufferRow; -+ /* The row of the buffer that holds row 'imageRow' of the image */ -+ unsigned int n; -+ /* Number of rows our row is before the bottom of the window */ -+ -+ assert(imageRow >= bufferP->nextImageRow - bufferP->numRows); -+ /* The requested row is not one that's already been bumped out -+ of the buffer. -+ */ -+ -+ while (imageRow >= bufferP->nextImageRow) { -+ pnm_readpamrow(bufferP->inpamP, bufferP->rows[bufferP->nextBufferRow]); -+ -+ ++bufferP->nextBufferRow; -+ if (bufferP->nextBufferRow == bufferP->numRows) -+ bufferP->nextBufferRow = 0; -+ -+ ++bufferP->nextImageRow; -+ } -+ -+ n = bufferP->nextImageRow - imageRow; -+ -+ assert(n <= bufferP->numRows); -+ -+ if (n <= bufferP->nextBufferRow) -+ bufferRow = bufferP->nextBufferRow - n; -+ else -+ bufferRow = bufferP->nextBufferRow + bufferP->numRows - n; -+ -+ assert(bufferRow < bufferP->numRows); -+ -+ return bufferP->rows[bufferRow]; -+} -+ -+ - --/* The following variables are global for speed reasons. -- In this way they do not have to be passed to each call of the -+static void -+buffer_term(buffer * const bufferP) { -+ -+ unsigned int i; -+ -+ /* We have to read through the end of the input image even if we -+ didn't use all the rows, because if the input is a pipe, the -+ guy writing into the pipe may require all the data to go -+ through. -+ */ -+ -+ while (bufferP->nextImageRow < bufferP->inpamP->height) { -+ pnm_readpamrow(bufferP->inpamP, bufferP->rows[0]); -+ ++bufferP->nextImageRow; -+ } -+ -+ for (i = 0; i < bufferP->numRows; ++i) -+ pnm_freepamrow(bufferP->rows[i]); -+ -+ free(bufferP->rows); -+} -+ -+ -+ -+ -+struct interpContext { -+ tuple background; -+ buffer* indata; -+ int width,height,depth; -+}; -+ -+/* The following is global for speed reasons. -+ In this way it does not have to be passed to each call of the - interpolation functions - - Think of this as Schönfinkeling (aka Currying). - */ - --static tuple background; --static buffer* indata; --static int width,height,depth; -- --static void init_interpolation_global_vars (buffer* const inbuffer, -- const struct pam *const inpam, -- const struct pam *const outpam) --{ -- pnm_createBlackTuple (outpam, &background); -- indata = inbuffer; -- width = inpam->width; -- height = inpam->height; -- depth = outpam->depth; -+static struct interpContext ictx; -+ -+static void -+init_interpolation_global_vars(buffer * const inbufferP, -+ const struct pam * const inpamP, -+ const struct pam * const outpamP) { -+ -+ pnm_createBlackTuple(outpamP, &ictx.background); -+ ictx.indata = inbufferP; -+ ictx.width = inpamP->width; -+ ictx.height = inpamP->height; -+ ictx.depth = outpamP->depth; - } - - - --static void clean_interpolation_global_vars (void) --{ -- free (background); -+static void -+clean_interpolation_global_vars(void) { -+ -+ free(ictx.background); - } - - - - /* These functions perform the interpolation */ - --static tuple attempt_read (int const x, int const y) --{ -- if ((x<0) || (x>=width) || (y<0) || (y>=height)) -- return background; -- else -- return read_buffer(indata, y)[x]; -+static tuple -+getPixel(int const col, -+ int const row) { -+/*---------------------------------------------------------------------------- -+ Get the pixel at Row 'row', Column 'col' of the image which is the -+ context of the interpolation in which we are called. -+ -+ Consider the image to go on forever in all directions (even negative -+ column/row numbers), being the background color everywhere outside -+ the actual image. -+-----------------------------------------------------------------------------*/ -+ if ((col < 0) || (col >= ictx.width) || (row < 0) || (row >= ictx.height)) -+ return ictx.background; -+ else -+ return buffer_getRow(ictx.indata, row)[col]; - } - - - --static void take_nearest (tuple const dest, number const x, number const y) --{ -- int xx,yy,entry; -- tuple p; -+static void -+takeNearest(tuple const dest, -+ number const x, -+ number const y) { - -- xx = (int)floor(x+0.5); -- yy = (int)floor(y+0.5); -- p = attempt_read (xx, yy); -- for (entry=0; entryheight; ++row) { -+ unsigned int col; -+ -+ for (col = 0; col < outpamP->width; ++col) { -+ number xi, yi; -+ outpixelToInPos(col, row, &xi, &yi, worldP); -+ interpolater(outrow[col], xi, yi); -+ } -+ pnm_writepamrow(outpamP, outrow); -+ } -+ pnm_freepamrow(outrow); -+} - -- /* The usual initializations */ - -- pnm_init (&argc, argv); -- set_command_line_defaults (&options); -- parse_command_line (argc, argv, &options); -- infp = pm_openr (options.infilename); -- pnm_readpaminit (infp, &inpam, PAM_STRUCT_SIZE(tuple_type)); -- -- /* Our own initializations */ -- -- init_world (&options, &inpam, &world); -- determine_world_parallelogram (&world, &options); -- determine_output_width_and_height (&world, &options); -- switch (options.enums[1]) { /* --output_system */ -- case lattice: -- determine_coefficients_lattice (&world, &options); -- break; -- case pixel_s: -- determine_coefficients_pixel (&world, &options); -- break; -- }; - -- /* Initialize outpam */ -+int -+main(int argc, const char * argv[]) { - -- outfp = pm_openw ("-"); -- outpam.size = sizeof (outpam); -- outpam.len = PAM_STRUCT_SIZE(bytes_per_sample); -- outpam.file = outfp; -- outpam.format = inpam.format; -- outpam.plainformat = inpam.plainformat; -- outpam.height = options.height; -- outpam.width = options.width; -- outpam.depth = inpam.depth; -- outpam.maxval = inpam.maxval; -- outpam.bytes_per_sample = inpam.bytes_per_sample; -- pnm_writepaminit (&outpam); -- -- /* Initialize the actual calculation */ -- -- init_buffer (&inbuffer, &world, &options, &inpam, &outpam); -- outrow = pnm_allocpamrow (&outpam); -- init_interpolation_global_vars (&inbuffer,&inpam,&outpam); -- switch (options.enums[3]) { /* --interpolation */ -- case nearest: -- interpolate = take_nearest; -- break; -- case linear: -- interpolate = linear_interpolation; -- break; -- }; -+ FILE * ifP; -+ struct pam inpam; -+ buffer inbuffer; -+ struct pam outpam; -+ option options; -+ world_data world; -+ interpolateFn * interpolater; - -- /* Perform the actual calculation */ -+ pm_proginit(&argc, argv); - -- for (row=0; row + ++#include ++#include ++ + #include "config.h" + + #include "types.h" +--- converter/other/fiasco/input/basis.c ++++ converter/other/fiasco/input/basis.c +@@ -14,6 +14,7 @@ + * $State: Exp $ + */ + ++#include + #include "config.h" + + #include "types.h" +--- converter/other/fitstopnm.c ++++ converter/other/fitstopnm.c +@@ -444,7 +444,7 @@ + c[i] = ich; + } + swapbytes(c, 4); +- *vp = *( (float *) c); ++ memcpy(vp, c, 4); + break; + + case -64: +@@ -455,7 +455,7 @@ + c[i] = ich; + } + swapbytes(c, 8); +- *vp = *( (double *) c); ++ memcpy(vp, c, 8); + break; + + default: +--- converter/other/jpegtopnm.c ++++ converter/other/jpegtopnm.c +@@ -511,6 +511,7 @@ + pm_error("Input JPEG image has 'unknown' color space " + "(JCS_UNKNOWN).\n" + "We cannot interpret this image."); ++ *output_type_p = PPM_TYPE; /* not reached */ + break; + case JCS_GRAYSCALE: + *output_type_p = PGM_TYPE; +@@ -538,6 +539,7 @@ + default: + pm_error("Internal error: unknown color space code %d passed " + "to set_color_spaces().", jpeg_color_space); ++ *output_type_p = PPM_TYPE; /* not reached */ + } + pm_message("WRITING %s FILE", + *output_type_p == PPM_TYPE ? "PPM" : "PGM"); +--- converter/other/pamtopfm.c ++++ converter/other/pamtopfm.c +@@ -149,12 +149,12 @@ + Type converter + -----------------------------------------------------------------------------*/ + if (machineEndianness == pfmEndianness) { +- *(float *)outputP->bytes = input; ++ memcpy(outputP->bytes, &input, sizeof(float)); + } else { + unsigned char reversed[sizeof(pfmSample)]; + unsigned int i, j; + +- *(float *)reversed = input; ++ memcpy(reversed, &input, sizeof(float)); + + for (i = 0, j = sizeof(pfmSample)-1; + i < sizeof(pfmSample); +@@ -239,6 +239,7 @@ + enum endian const endian) { + + struct pfmHeader pfmHeader; ++ memset(&pfmHeader, 0, sizeof(pfmHeader)); + + pfmHeader.width = pamP->width; + pfmHeader.height = pamP->height; +--- converter/other/pamtosvg/curve.c ++++ converter/other/pamtosvg/curve.c +@@ -222,9 +222,7 @@ + new_curve_list (void) + { + curve_list_type curve_list; +- +- curve_list.length = 0; +- curve_list.data = NULL; ++ memset(&curve_list, 0, sizeof(curve_list)); + + return curve_list; + } +--- converter/other/pamtosvg/pxl-outline.c ++++ converter/other/pamtosvg/pxl-outline.c +@@ -262,6 +262,9 @@ + outline.open = false; + outline.color = getBitmapColor(bitmap, original_row, original_col); + ++ search_dir = original_dir; /* initial value */ ++ row = original_row; /* initial value */ ++ col = original_col; /* initial values */ + /* Add the starting pixel to the output list, changing from bitmap + to Cartesian coordinates and specifying the left edge so that + the coordinates won't be adjusted. +@@ -272,9 +275,6 @@ + LOG2(" (%d,%d)", pos.col, pos.row); + append_outline_pixel(&outline, pos); + } +- search_dir = original_dir; /* initial value */ +- row = original_row; /* initial value */ +- col = original_col; /* initial values */ + + for ( ; ; ) { + unsigned int const prev_row = row; +@@ -527,6 +527,7 @@ + { + pixel_outline_type pixel_outline; + ++ memset(&pixel_outline, 0, sizeof(pixel_outline)); + O_LENGTH (pixel_outline) = 0; + pixel_outline.data = NULL; + pixel_outline.open = false; +--- converter/other/pamtosvg/spline.c ++++ converter/other/pamtosvg/spline.c +@@ -80,6 +80,7 @@ + empty_spline_list (void) + { + spline_list_type answer; ++ memset(&answer, 0, sizeof(answer)); + SPLINE_LIST_DATA (answer) = NULL; + SPLINE_LIST_LENGTH (answer) = 0; + return answer; +@@ -153,6 +154,7 @@ + new_spline_list_array (void) + { + spline_list_array_type answer; ++ memset(&answer, 0, sizeof(answer)); + + SPLINE_LIST_ARRAY_DATA (answer) = NULL; + SPLINE_LIST_ARRAY_LENGTH (answer) = 0; +--- converter/other/pamtosvg/vector.c ++++ converter/other/pamtosvg/vector.c +@@ -38,6 +38,7 @@ + + coord.x = v.dx; + coord.y = v.dy; ++ coord.z = v.dz; + + return coord; + } +--- converter/other/pamtouil.c ++++ converter/other/pamtouil.c +@@ -376,11 +376,15 @@ + int i; + + for (i = 0; i < ncolors; ++i) { +- cixel_map const cmapEntry = cmap[i]; +- if (cmapEntry.uilname) ++ cixel_map cmapEntry = cmap[i]; ++ if (cmapEntry.uilname) { + freeString(cmapEntry.uilname); +- if (cmapEntry.rgbname) ++ cmapEntry.uilname = NULL; ++ } ++ if (cmapEntry.rgbname) { + freeString(cmapEntry.rgbname); ++ cmapEntry.rgbname = NULL; ++ } + } + } + +--- converter/other/pgmtopbm.c ++++ converter/other/pgmtopbm.c +@@ -549,6 +549,8 @@ + converter.cols = cols; + converter.convertRow = &dither8ConvertRow; + converter.destroy = NULL; ++ converter.stateP = NULL; ++ converter.maxval = 0; + + /* Scale dither matrix. */ + for (row = 0; row < 16; ++row) { +@@ -622,6 +624,7 @@ + converter.cols = cols; + converter.convertRow = &clusterConvertRow; + converter.destroy = &clusterDestroy; ++ converter.maxval = 0; + + MALLOCVAR_NOFAIL(stateP); + +--- converter/other/pnmtopng.c ++++ converter/other/pnmtopng.c +@@ -506,6 +506,7 @@ + retval.green = PPM_GETG(scaled); + retval.blue = PPM_GETB(scaled); + retval.gray = PNM_GET1(scaled); ++ retval.index = 0; + + return retval; + } +--- converter/other/rletopnm.c ++++ converter/other/rletopnm.c +@@ -101,7 +101,7 @@ + optStruct3 opt; + unsigned int option_def_index; + +- unsigned int alphaoutSpec; ++ unsigned int alphaoutSpec = 0; + + MALLOCARRAY(option_def, 100); + +--- converter/ppm/ximtoppm.c ++++ converter/ppm/ximtoppm.c +@@ -44,7 +44,7 @@ + + unsigned int option_def_index; + +- unsigned int alphaoutSpec; ++ unsigned int alphaoutSpec = 0; + + option_def_index = 0; /* incremented by OPTENT3 */ + OPTENT3(0, "alphaout", OPT_STRING, +--- lib/pm.h ++++ lib/pm.h +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + + #ifdef VMS + #include +--- lib/util/wordaccess_64_le.h ++++ lib/util/wordaccess_64_le.h +@@ -49,4 +49,5 @@ + return (__builtin_clzll((long long int)x << (s - 8) * 8)); + else + pm_error("Long long int is less than 64 bits on this machine"); ++ return 0; /* unreached */ + } diff --git a/netpbm-10.35.64-manpages.patch b/netpbm-10.35.64-manpages.patch new file mode 100644 index 0000000..f4a6e2f --- /dev/null +++ b/netpbm-10.35.64-manpages.patch @@ -0,0 +1,80 @@ +--- buildtools/makeman ++++ buildtools/makeman +@@ -1,4 +1,4 @@ +-#!/bin/env python ++#!/usr/bin/python + # + # makeman -- compile netpbm's stereotyped HTML to troff markup + # +@@ -95,6 +95,8 @@ + indoc = re.sub("(?i)\n *", "\n.fi", indoc) + indoc = re.sub("(?i)\n *
", "\n.nf", indoc) + indoc = re.sub("(?i)\n *
", "\n.fi", indoc) ++ indoc = re.sub("(?i)\n *", "\n.nf", indoc) ++ indoc = re.sub("(?i)\n *", "\n.fi", indoc) + # Highlight processing + indoc = re.sub("(?i)", r"\\fB", indoc) + indoc = re.sub("(?i)", r"\\fP", indoc) +@@ -114,7 +116,10 @@ + indoc = re.sub("(?i)", r"\\d", indoc) + # Paragraph handling + indoc = re.sub("(?i)\n*

\n*", r"\n.PP\n", indoc) ++ indoc = re.sub("(?i)
", r"\n.PP\n", indoc) + indoc = re.sub("(?i)

", "", indoc) ++ indoc = re.sub("(?i)", "", indoc) ++ indoc = re.sub("(?i)]*>", "", indoc) + lines = indoc.split("\n") + listdepth = 0 + for i in range(len(lines)): +@@ -131,13 +136,14 @@ + indoc = re.sub('(?i)([^<]+)', r'\\fI\1\\fP', indoc) + # Format manual crossreferences + def xrefmatch(match): +- xrefto = match.group(1) +- xrefsection = sectmap.get(xrefto, 1) ++ xrefto = match.group(2) ++ xrefurl = match.group(1) ++ xrefsection = sectmap.get(xrefurl, 1) + if xrefsection == 0: + return "\n.I " + xrefto + else: +- return "\n.BR %s (%d)" % (xrefto, xrefsection) +- indoc = re.sub(r'(?i)\n* *(?:\\fB)?([^<]+)(?:\\fP)?', ++ return "\n.BR %s (%d)\n" % (xrefto, xrefsection) ++ indoc = re.sub(r'(?i)\n* *(?:\\fB)?([^<]+)(?:\\fP)?', + xrefmatch, indoc) + # Format URLs + def urlmatch(match): +@@ -151,7 +157,7 @@ + indoc = indoc.replace("×", r"\(mu") + indoc = indoc.replace("®", r"\*R") + # Turn anchors into .UN tags +- indoc = re.sub('(?i)(?: )*\s*', ".UN \\1\n", indoc) ++ indoc = re.sub('(?i)(?: )*\s*', ".UN \\1\n", indoc) + # Strip off the index trailer + trailer = re.compile('
.*', re.DOTALL | re.IGNORECASE) + indoc = re.sub(trailer, "", indoc) +@@ -159,17 +165,17 @@ + indoc = indoc.replace("", "").replace("", "") + indoc = indoc.replace("", "").replace("", "") + # Recognize sections with IDs +- indoc = re.sub('(?i)

([^><]*)

', ++ indoc = re.sub('(?i)

([^><]*)

', + ".UN \\1\n.SH \\2", indoc) +- indoc = re.sub('(?i)

([^><]*)

', ++ indoc = re.sub('(?i)

([^><]*)

', + ".UN \\1\n.SS \\2", indoc) +- indoc = re.sub('(?i)

([^><]*)

', ++ indoc = re.sub('(?i)

([^><]*)

', + ".UN \\1\n.B \\2", indoc) +- indoc = re.sub('(?i)

([^><]*)

', ++ indoc = re.sub('(?i)

([^><]*)

', + ".UN \\1\n.SH \\2", indoc) +- indoc = re.sub('(?i)

([^><]*)

', ++ indoc = re.sub('(?i)

([^><]*)

', + ".UN \\1\n.SS \\2", indoc) +- indoc = re.sub('(?i)

([^><]*)

', ++ indoc = re.sub('(?i)

([^><]*)

', + ".UN \\1\n.B \\2", indoc) + # Sections without IDs + indoc = re.sub('(?i)

([^><]*)

', ".SH \\1", indoc) diff --git a/netpbm-10.35.64-nohpcdtoppm-nojbig.tar.bz2 b/netpbm-10.35.64-nohpcdtoppm-nojbig.tar.bz2 new file mode 100644 index 0000000..cdc7422 --- /dev/null +++ b/netpbm-10.35.64-nohpcdtoppm-nojbig.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98a8e99357f89a8488e0a55941286165f6efbe1aa376b3303ef56d0be23f5c45 +size 1608029 diff --git a/netpbm-10.26.44-pamscale.patch b/netpbm-10.35.64-pamscale.patch similarity index 93% rename from netpbm-10.26.44-pamscale.patch rename to netpbm-10.35.64-pamscale.patch index da2ab03..bf09b02 100644 --- a/netpbm-10.26.44-pamscale.patch +++ b/netpbm-10.35.64-pamscale.patch @@ -1,6 +1,6 @@ --- editor/pamscale.c +++ editor/pamscale.c -@@ -599,6 +599,8 @@ +@@ -595,6 +595,8 @@ const char *filterOpt, *window; unsigned int filterSpec, windowSpec; diff --git a/netpbm-10.26.44-pamtouil.patch b/netpbm-10.35.64-pamtouil.patch similarity index 53% rename from netpbm-10.26.44-pamtouil.patch rename to netpbm-10.35.64-pamtouil.patch index 03e6293..b705bb3 100644 --- a/netpbm-10.26.44-pamtouil.patch +++ b/netpbm-10.35.64-pamtouil.patch @@ -1,11 +1,11 @@ --- converter/other/pamtouil.c +++ converter/other/pamtouil.c -@@ -94,7 +94,7 @@ +@@ -95,7 +95,7 @@ /* Remove trailing "_icon" */ barPos = strrchr(cmdlineP->outname, '_'); -- if (strcmp(barPos, "_icon") == 0) -+ if (barPos && strcmp(barPos, "_icon") == 0) +- if (STREQ(barPos, "_icon")) ++ if (barPos && STREQ(barPos, "_icon")) *barPos = '\0'; } else { - if (strcmp(cmdlineP->inputFilespec, "-") == 0) + if (STREQ(cmdlineP->inputFilespec, "-")) diff --git a/netpbm-10.26.44-pnmtopng-CAN-2005-2978.patch b/netpbm-10.35.64-pnmtopng-CAN-2005-2978.patch similarity index 87% rename from netpbm-10.26.44-pnmtopng-CAN-2005-2978.patch rename to netpbm-10.35.64-pnmtopng-CAN-2005-2978.patch index b09f831..e72de20 100644 --- a/netpbm-10.26.44-pnmtopng-CAN-2005-2978.patch +++ b/netpbm-10.35.64-pnmtopng-CAN-2005-2978.patch @@ -1,6 +1,6 @@ --- converter/other/pnmtopng.c +++ converter/other/pnmtopng.c -@@ -160,7 +160,7 @@ +@@ -521,7 +521,7 @@ unsigned int * const bestMatchP) { unsigned int paletteIndex; @@ -8,8 +8,8 @@ + unsigned int bestIndex = 0; unsigned int bestMatch; - bestMatch = UINT_MAX; -@@ -1578,7 +1578,7 @@ + assert(paletteSize > 0); +@@ -2342,7 +2342,7 @@ /* The color part of the color/alpha palette passed to the PNG compressor */ diff --git a/netpbm-10.26.44-pnmtopng-transparent.patch b/netpbm-10.35.64-pnmtopng-transparent.patch similarity index 95% rename from netpbm-10.26.44-pnmtopng-transparent.patch rename to netpbm-10.35.64-pnmtopng-transparent.patch index ce5a8bd..eee5cdb 100644 --- a/netpbm-10.26.44-pnmtopng-transparent.patch +++ b/netpbm-10.35.64-pnmtopng-transparent.patch @@ -1,6 +1,6 @@ --- converter/other/pnmtopng.c +++ converter/other/pnmtopng.c -@@ -1328,7 +1328,7 @@ +@@ -1842,7 +1842,7 @@ computePixelWidth(PNM_FORMAT_TYPE(format), pnm_meaningful_bits, alpha, NULL, &bitsPerPixel); @@ -9,7 +9,7 @@ /* No palette can beat 1 bit per pixel -- no need to waste time counting the colors. */ -@@ -1351,7 +1351,7 @@ +@@ -1865,7 +1865,7 @@ "colormapped PNG", MAXCOLORS); } else { /* There are few enough colors that a palette is possible */ diff --git a/netpbm-10.26.44-rgb.patch b/netpbm-10.35.64-rgb.patch similarity index 80% rename from netpbm-10.26.44-rgb.patch rename to netpbm-10.35.64-rgb.patch index d2ba907..615dd9e 100644 --- a/netpbm-10.26.44-rgb.patch +++ b/netpbm-10.35.64-rgb.patch @@ -1,11 +1,11 @@ --- pm_config.in.h +++ pm_config.in.h -@@ -99,7 +99,7 @@ +@@ -67,7 +67,7 @@ #define RGB_DB2 "PBMplus_Dir:RGB.TXT" #define RGB_DB3 "PBMplus_Dir:RGB.TXT" #else -#define RGB_DB1 "/usr/lib/X11/rgb.txt" +#define RGB_DB1 "/usr/share/X11/rgb.txt" - #define RGB_DB2 "/usr/openwin/lib/rgb.txt" + #define RGB_DB2 "/usr/share/X11/rgb.txt" #define RGB_DB3 "/usr/X11R6/lib/X11/rgb.txt" #endif diff --git a/netpbm-10.26.44-tmpfile.patch b/netpbm-10.35.64-tmpfile.patch similarity index 96% rename from netpbm-10.26.44-tmpfile.patch rename to netpbm-10.35.64-tmpfile.patch index bf78079..01326ec 100644 --- a/netpbm-10.26.44-tmpfile.patch +++ b/netpbm-10.35.64-tmpfile.patch @@ -24,7 +24,7 @@ --- generator/ppmrainbow +++ generator/ppmrainbow -@@ -39,7 +39,13 @@ +@@ -47,7 +47,13 @@ push @colorlist, $ARGV[0]; } @@ -39,7 +39,7 @@ my $widthRemaining; my $n; -@@ -71,4 +77,5 @@ +@@ -79,4 +85,5 @@ END { unlink @outlist if @outlist; diff --git a/netpbm-10.26.44-ximtoppm-fixes.patch b/netpbm-10.35.64-ximtoppm-fixes.patch similarity index 67% rename from netpbm-10.26.44-ximtoppm-fixes.patch rename to netpbm-10.35.64-ximtoppm-fixes.patch index 9b2364c..030e7ef 100644 --- a/netpbm-10.26.44-ximtoppm-fixes.patch +++ b/netpbm-10.35.64-ximtoppm-fixes.patch @@ -1,8 +1,8 @@ --- converter/ppm/ximtoppm.c +++ converter/ppm/ximtoppm.c -@@ -56,6 +56,10 @@ - OPTENT3(0, "alphaout", OPT_STRING, - &cmdlineP->alpha_filename, &alphaoutSpec, 0); +@@ -54,6 +54,10 @@ + opt.short_allowed = FALSE; /* We have no short (old-fashioned) options */ + opt.allowNegNum = FALSE; /* We have no parms that are negative numbers */ + opt.opt_table = option_def; + opt.short_allowed = FALSE; /* We have no short (old-fashioned) options */ diff --git a/netpbm-10.26.44.dif b/netpbm-10.35.64.dif similarity index 56% rename from netpbm-10.26.44.dif rename to netpbm-10.35.64.dif index 3a77c4a..9b47d0e 100644 --- a/netpbm-10.26.44.dif +++ b/netpbm-10.35.64.dif @@ -1,6 +1,6 @@ --- Makefile.config.in +++ Makefile.config.in -@@ -78,7 +78,7 @@ +@@ -108,7 +108,7 @@ #OSF1: #INSTALL = $(SRCDIR)/buildtools/installosf #Red Hat Linux: @@ -9,19 +9,16 @@ # STRIPFLAG is the option you pass to the above install program to make it # strip unnecessary information out of binaries. -@@ -218,9 +218,9 @@ - # copy of Pbmtext used 16K less real memory when built with -fpic than - # when built without. 2001.06.02. - --CFLAGS_SHLIB = -+# CFLAGS_SHLIB = - # Solaris or SunOS with gcc, and NetBSD: --#CFLAGS_SHLIB = -fpic +@@ -283,7 +283,7 @@ + CFLAGS_SHLIB = + # Gcc: + #CFLAGS_SHLIB = -fpic +-#CFLAGS_SHLIB = -fPIC +CFLAGS_SHLIB = -fPIC - #CFLAGS_SHLIB = -fPIC # Sun compiler: #CFLAGS_SHLIB = -Kpic -@@ -288,7 +288,7 @@ + #CFLAGS_SHLIB = -KPIC +@@ -350,7 +350,7 @@ # The TIFF library. See above. If you want to build the tiff # converters, you must have the tiff library already installed. @@ -30,7 +27,7 @@ TIFFHDR_DIR = #TIFFLIB = libtiff.so -@@ -318,7 +318,7 @@ +@@ -382,7 +382,7 @@ # JPEG stuff statically linked in, in which case you won't need # JPEGLIB in order to build the Tiff converters. @@ -39,18 +36,9 @@ JPEGHDR_DIR = #JPEGLIB = libjpeg.so #JPEGHDR_DIR = /usr/include/jpeg -@@ -342,7 +342,7 @@ - # with names that include a version number, such as libpng10.a and header - # files in /usr/include/libpng10. - # option. --PNGLIB = NONE -+PNGLIB = libpng.so - PNGHDR_DIR = - PNGVER = - #PNGLIB = libpng$(PNGVER).so -@@ -359,7 +359,7 @@ - # NONE for the PNG library, it doesn't matter what you specify here -- - # it won't get used. +@@ -432,7 +432,7 @@ + # + # If you have 'libpng-config' (see above), these are irrelevant. -ZLIB = NONE +ZLIB = libz.so diff --git a/netpbm.changes b/netpbm.changes index 94ab969..c95316e 100644 --- a/netpbm.changes +++ b/netpbm.changes @@ -1,3 +1,22 @@ +------------------------------------------------------------------- +Wed Jun 17 16:28:54 CEST 2009 - nadvornik@suse.cz + +- improved generating of man pages [bnc#431226] +- fixed various warnings + +------------------------------------------------------------------- +Tue Jun 16 14:06:12 CEST 2009 - nadvornik@suse.cz + +- generate man pages from html + +------------------------------------------------------------------- +Mon Jun 15 16:56:54 CEST 2009 - nadvornik@suse.cz + +- updated to 10.35.64 + * for detailed changelog see + /usr/share/doc/packages/netpbm/HISTORY +- use security patches from Fedora + ------------------------------------------------------------------- Mon Jun 1 14:22:31 CEST 2009 - nadvornik@suse.cz diff --git a/netpbm.spec b/netpbm.spec index 1f5ec64..3507cec 100644 --- a/netpbm.spec +++ b/netpbm.spec @@ -1,5 +1,5 @@ # -# spec file for package netpbm (Version 10.26.44) +# spec file for package netpbm (Version 10.35.64) # # Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany. # @@ -19,8 +19,8 @@ Name: netpbm -BuildRequires: flex libjasper-devel libpng-devel libtiff-devel -License: Any permissive; Artistic License; BSD 3-Clause; GPL v2 or later; Public Domain, Freeware; X11/MIT +BuildRequires: flex libjasper-devel libpng-devel libtiff-devel python +License: PERMISSIVE-OSI-COMPLIANT ; Artistic License .. ; BSD 3-clause (or similar) ; GPL v2 or later ; Public Domain, Freeware ; MIT License (or similar) Group: Productivity/Graphics/Convertors Provides: pbmplus AutoReqProv: on @@ -29,31 +29,26 @@ AutoReqProv: on Obsoletes: netpbm-64bit %endif # -Version: 10.26.44 -Release: 104 +Version: 10.35.64 +Release: 1 Summary: A Powerful Graphics Conversion Package Source: netpbm-%{version}-nohpcdtoppm-nojbig.tar.bz2 Source1: netpbm-%{version}-documentation.tar.bz2 -Source2: netpbm-%{version}-manpages.tar.bz2 Source3: prepare-src-tarball Patch: netpbm-%{version}.dif Patch2: netpbm-%{version}-manpages.patch -Patch4: netpbm-%{version}-overflow.patch -Patch5: netpbm-%{version}-aliasing.patch +Patch3: netpbm-10.23-security.patch +Patch4: netpbm-10.22-security2.patch Patch6: netpbm-%{version}-tmpfile.patch Patch7: netpbm-%{version}-colornames-init.diff Patch8: netpbm-%{version}-fixes.patch -Patch9: netpbm-%{version}-pstopnm-gs-options.patch Patch10: netpbm-%{version}-endian.patch Patch11: netpbm-%{version}-pnmtopng-CAN-2005-2978.patch -Patch12: netpbm-%{version}-pnmtopng-overflow.patch Patch13: netpbm-%{version}-ximtoppm-fixes.patch Patch15: netpbm-%{version}-rgb.patch Patch16: netpbm-%{version}-pamtouil.patch Patch17: netpbm-%{version}-pnmtopng-transparent.patch -Patch18: netpbm-%{version}-fix1overflow.patch Patch19: netpbm-%{version}-pamscale.patch -Patch20: netpbm-%{version}-pamperspective.patch Url: http://netpbm.sourceforge.net BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -157,26 +152,21 @@ Authors: %prep %setup %setup -D -q -a 1 -%setup -D -q -a 2 rm -rf libtiff %patch %patch2 -%patch4 -%patch5 +%patch3 -p1 +%patch4 -p1 %patch6 %patch7 -p1 %patch8 -%patch9 %patch10 %patch11 -%patch12 %patch13 %patch15 %patch16 %patch17 -%patch18 %patch19 -%patch20 rm -rf converter/other/jpeg2000/libjasper/include #make sure the internal libjasper is not used mkdir -p pnmtopalm cd pnmtopalm @@ -195,6 +185,14 @@ CFLAGS="$CFLAGS -flax-vector-conversions" make CFLAGS="$CFLAGS" \ JASPERLIB=-ljasper \ JASPERHDR_DIR=/usr/include/jasper +# +# convert html to man pages +cd netpbm.sourceforge.net/doc + ../../buildtools/makeman *.html +for i in 1 3 5 ; do + mkdir -p ../../man/man${i} + mv *.${i} ../../man/man${i} +done %install mkdir -p $RPM_BUILD_ROOT/usr/{bin,include,%_lib,share/man} @@ -211,16 +209,15 @@ cp -prd man/* $RPM_BUILD_ROOT/usr/share/man rm $RPM_BUILD_ROOT/usr/%_lib/*.a mkdir -p $RPM_BUILD_ROOT/usr/share/netpbm install -m 644 converter/other/pnmtopalm/*.map $RPM_BUILD_ROOT/usr/share/netpbm +rm $RPM_BUILD_ROOT/usr/bin/doc.url rm $RPM_BUILD_ROOT/usr/bin/g3topbm #conflict with g3utils %clean rm -rf $RPM_BUILD_ROOT -%post -n libnetpbm10 -%run_ldconfig +%post -n libnetpbm10 -p /sbin/ldconfig -%postun -n libnetpbm10 -%run_ldconfig +%postun -n libnetpbm10 -p /sbin/ldconfig %files %defattr(-,root,root) @@ -242,207 +239,3 @@ rm -rf $RPM_BUILD_ROOT %{_libdir}/lib*.so %changelog -* Mon Jun 01 2009 nadvornik@suse.cz -- build fix: use non-conflicting name instead of "getline" -* Wed Jan 14 2009 olh@suse.de -- obsolete libnetpbm-XXbit instead of netpbm-XXbit -* Wed Jan 07 2009 olh@suse.de -- obsolete old -XXbit packages (bnc#437293) -* Fri Nov 28 2008 nadvornik@suse.cz -- fixed a crash in pamperspective by an update to newer - version [bnc#440954] -* Wed Oct 22 2008 nadvornik@suse.cz -- fixed "pamscale -reduce" [bnc#391972] -* Thu Apr 10 2008 ro@suse.de -- added baselibs.conf file to build xxbit packages - for multilib support -* Fri Feb 01 2008 meissner@suse.de -- fixed potential 1 byte array overread -* Wed Nov 21 2007 nadvornik@suse.cz -- compile with -flax-vector-conversions -* Fri Nov 09 2007 nadvornik@suse.cz -- use system libjasper [#339731] -* Thu Jul 19 2007 nadvornik@suse.cz -- updated to 10.26.44 (many bugfixes) -- applied Shared Library Packaging Policy: - * created libnetpbm-devel subpackage - * renamed libnetpbm to libnetpbm10 -* Wed Apr 11 2007 nadvornik@suse.cz -- removed ppmtompeg sources [#261140] -* Thu Mar 29 2007 rguenther@suse.de -- add flex BuildRequires -* Wed Dec 06 2006 prusnak@suse.cz -- fixed pamtouil crash when -name was specified (pamtouil.patch) -- changed transparency handling (pnmtopng-transparent.patch) [#225258] -* Thu Nov 30 2006 prusnak@suse.cz -- fixed missing manpages [#224478] -- fixed segfault in pbmtext [#224420] -* Tue Nov 14 2006 prusnak@suse.cz -- fixed [#216670] - - removed man pages that pointed to online documentation (manpages.patch) - - added man pages generated from HTML documentation (manpages.tar.bz2) -* Thu Mar 23 2006 nadvornik@suse.cz -- fixed uninitialized variables [#155948] -* Wed Jan 25 2006 mls@suse.de -- converted neededforbuild to BuildRequires -* Thu Jan 12 2006 nadvornik@suse.cz -- compile with -fstack-protector -* Thu Jan 05 2006 nadvornik@suse.cz -- updated to 10.26.22 -* Tue Nov 15 2005 nadvornik@suse.cz -- fixed possible buffer overflow [#133649] -* Thu Oct 13 2005 nadvornik@suse.cz -- fixed possible buffer overflow (CAN-2005-2978) [#119601] -* Mon Sep 26 2005 nadvornik@suse.cz -- fixed fiasco on bigendian [#105431] -* Tue Aug 09 2005 nadvornik@suse.cz -- call ghostscript with the -dSAFER option [#102527] -* Mon Aug 01 2005 nadvornik@suse.cz -- fixed libnetpb.so symlink -* Fri Jul 29 2005 nadvornik@suse.cz -- installed palm colormaps required by plucker -* Thu Jul 28 2005 nadvornik@suse.cz -- updated to 10.26.12 -* Wed Jun 22 2005 schwab@suse.de -- Fix aliasing bug. -- Don't strip binaries. -* Thu Jan 06 2005 nadvornik@suse.cz -- updated to 10.18.18 -- fixed tempdir handling in anytopbm [#49446] -* Fri Nov 19 2004 ro@suse.de -- fixed file list -* Tue Aug 31 2004 jw@suse.de -- fix uninitialized colornames in libppmcolor.c, - that caused ppmtoxpm to segv on x86-64. -* Fri Aug 27 2004 kukuk@suse.de -- Fix .so symlink -* Thu Aug 26 2004 nadvornik@suse.cz -- updated to 10.18.15: many bugfixes, incuding pnmtopng fix [#42868] -* Thu Mar 18 2004 nadvornik@suse.cz -- do not pack /usr/bin/doc.url [#36329] -* Fri Mar 05 2004 nadvornik@suse.cz -- fixed pbmtextps [#32104] -- fixed dangerous compiler warnings -* Mon Jan 26 2004 nadvornik@suse.cz -- fixed temp files handling [#34036] -* Sat Jan 10 2004 adrian@suse.de -- add %%run_ldconfig -* Thu Sep 18 2003 nadvornik@suse.cz -- fixed tail/head syntax [#31231] -* Wed May 28 2003 nadvornik@suse.cz -- remove unpackaged files from buildroot -* Thu Feb 13 2003 ro@suse.de -- fix symlink for libnetpbm.so -* Tue Feb 11 2003 nadvornik@suse.cz -- updated to 10.11.4 -* Mon Aug 05 2002 nadvornik@suse.cz -- removed g3topbm again -* Mon Jul 29 2002 schwab@suse.de -- Fix reference to perl in scripts. -* Sat Jul 27 2002 kukuk@suse.de -- Create compatibility links for the old libraries to compile - old sources -* Sat Jul 27 2002 meissner@suse.de -- %%_lib fixes, use RPM_OPT_FLAGS and -fPIC -* Fri Jul 26 2002 adrian@suse.de -- fix neededforbuild -* Fri Jul 26 2002 nadvornik@suse.cz -- updated to 10.5: - - libraries libpbm, libpgm, libpnm, libppm merged to libnetpbm - - documentation is in html only -* Tue May 14 2002 nadvornik@suse.cz -- fixed usage of the %%{_libdir} macro -* Tue Feb 26 2002 nadvornik@suse.cz -- fixed "#!/bin/sh" line in ppmtomap -* Thu Feb 07 2002 nadvornik@suse.cz -- updated to 9.24 -* Fri Feb 01 2002 ro@suse.de -- changed neededforbuild to -* Thu Jan 10 2002 nadvornik@suse.cz -- update to 9.23: - - bugfix release -- patched pnmtops to accept -dpi x [bug #12591] -- used macros %%{_lib} and %%{_libdir} -* Wed Dec 05 2001 nadvornik@suse.cz -- update to 9.21: - - new: pamdeinterlace, pnmquant, ppmtoneo, neotoppm -* Tue Sep 04 2001 nadvornik@suse.cz -- removed jbigtopnm and pnmtojbig because of potential patent - problems [bug #9903] -- fixed segfault in icontopnm -* Thu Aug 23 2001 ro@suse.de -- added pm.h and pm_config.h to INTERFACE_HEADERS - (pm.h is included by pbm.h and includes pm_config.h) -* Thu Aug 23 2001 nadvornik@suse.cz -- update to 9.16 - new: pbmtopsg3 (Postscript G3 fax), pbmtonokia, ppmrainbow - pamoil (a replacement for pgmoil) - fixes and updates: - ppmtogif, ppmtojpeg, xpmtoppm, pnmtopng/pngtopnm, - giftopnm, ppm3d, tifftopnm, pgmcrater, pnmgamma, - ppmcie, pnmscale, pnmscalefixed, ppmtoeyuv, eyuvtoppm - pstopnm -- removed hpcdtoppm from source, because selling and commercial - using is prohibited -* Tue Jun 05 2001 pblaha@suse.cz -- upgrade on 9.14 -- add documentation and examples for ppmtompeg fix bug #8647 -* Thu Apr 05 2001 pblaha@suse.cz -- make ln -s pnmtoplainpnm pnmnoraw and ln -s gemtopnm gemtopbm -* Tue Apr 03 2001 kukuk@suse.de -- Remove g2topbm again due conficts with g3utils -* Mon Mar 26 2001 pblaha@suse.cz -- update on 9.12 -* Wed Mar 14 2001 pblaha@suse.cz -- remove g3topbm due to conflict with g3utils -* Wed Mar 07 2001 pblaha@suse.cz -- update on 9.11 -* Wed Jan 24 2001 pblaha@suse.cz -- update on 9.10 -* Fri Dec 22 2000 garloff@suse.de -- Add Provides + Obsoletes: libnetpb. -- Use some more macros in spec file. -- bzip2 source. -* Tue Dec 05 2000 schwab@suse.de -- Be sure to compile with -fpic. -* Mon Dec 04 2000 kukuk@suse.de -- Fix again path to perl -* Thu Nov 30 2000 pblaha@suse.cz -- remove g3topbm and pbmtog3 for conflict with g3utils -* Tue Nov 28 2000 kukuk@suse.de -- Use /usr/bin/perl -* Tue Nov 28 2000 pblaha@suse.cz -- remove hpcdtoppm because conflict with photocd -* Mon Oct 02 2000 pblaha@suse.cz -- update to 9.8 and rename libnetpb to libnetpbm -* Fri Sep 29 2000 ro@suse.de -- fixed Makefile deps -* Mon Jul 10 2000 bubnikv@suse.cz -- fixed pbmtog3 to use fixed width of fax image (standard), added - switch to allow usage of source image width -- updated man page of pbmtog3 -- changed URLs of home page and source file -* Tue Jun 20 2000 nadvornik@suse.cz -- added shhopt.h, libshhopt.* -* Fri May 26 2000 bubnikv@suse.cz -- sorted -* Fri May 19 2000 nadvornik@suse.cz -- fixed Imakefile -* Tue May 16 2000 nadvornik@suse.cz -- update to 8.4 -- added BuildRoot -* Fri May 12 2000 schwab@suse.de -- pbmplus.h: fix linux configuration. -* Tue Feb 29 2000 kukuk@suse.de -- Let ldconfig create correct links for shared libraries and add - them to file list -* Mon Sep 13 1999 bs@suse.de -- ran old prepare_spec on spec file to switch to new prepare_spec. -* Thu Jan 14 1999 ro@suse.de -- pbmplus.h: don't redeclare write on alpha -* Wed Jun 17 1998 ro@suse.de -- patched to build for libc5 and glibc -* Thu May 14 1998 ro@suse.de -- added patch to build pbmtosff from Christian Lademann -* Tue May 12 1998 ro@suse.de -- extracted package from libgr / build from own sources diff --git a/prepare-src-tarball b/prepare-src-tarball index a7d9a00..e3d1533 100644 --- a/prepare-src-tarball +++ b/prepare-src-tarball @@ -1,15 +1,17 @@ #!/bin/sh -x #This script is used to create netpbm-$VER-nohpcdtoppm-nojbig.tar.bz2 -#from netpbm-$VER.tgz -#netpbm-$VER.tgz can be found at http://sourceforge.net/projects/netpbm/ +#from upstream svn, http://sourceforge.net/projects/netpbm/ -VER=10.26.44 rm -rf REMOVE mkdir REMOVE cd REMOVE -tar xzf ../netpbm-$VER.tgz +svn checkout http://netpbm.svn.sourceforge.net/svnroot/netpbm/stable netpbm +VER=`echo \`cut -f2 -d= netpbm*/Makefile.version \`|sed -e "s| |.|g"` +mv netpbm* netpbm-$VER + +find . -name ".svn" -exec rm -rf {} \; cd netpbm*/converter/ppm/hpcdtoppm || exit 1 rm -rf * @@ -38,8 +40,9 @@ echo install.data: >> Makefile echo clean: >> Makefile cd ../../../.. - - tar cjf ../netpbm-$VER-nohpcdtoppm-nojbig.tar.bz2 * +wget -m netpbm.sourceforge.net +rm netpbm.sourceforge.net/bdffont.tgz +tar cjf ../netpbm-$VER-documentation.tar.bz2 netpbm.sourceforge.net