From ff7ebdd298b487ba64842b2d1b990935c181cd89 Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Wed, 27 Apr 2011 15:00:52 +0200 Subject: [PATCH] Works on windows --- thirdparty/xpdf/README.txt | 5 +- thirdparty/xpdf/xpdf-3.02/aconf.h | 116 --- thirdparty/xpdf/xpdf-3.02/config.status | 967 ------------------ thirdparty/xpdf/xpdf-3.02/fofi/FoFiType1.cc | 2 +- thirdparty/xpdf/xpdf-3.02/goo/gfile.cc | 48 +- thirdparty/xpdf/xpdf-3.02/goo/gmem.cc | 40 +- thirdparty/xpdf/xpdf-3.02/splash/Splash.cc | 13 +- .../xpdf/xpdf-3.02/splash/SplashBitmap.cc | 35 +- .../xpdf/xpdf-3.02/splash/SplashErrorCodes.h | 2 - thirdparty/xpdf/xpdf-3.02/xpdf/Gfx.cc | 2 - thirdparty/xpdf/xpdf-3.02/xpdf/JBIG2Stream.cc | 478 +++------ thirdparty/xpdf/xpdf-3.02/xpdf/JBIG2Stream.h | 4 - thirdparty/xpdf/xpdf-3.02/xpdf/PSOutputDev.cc | 2 +- thirdparty/xpdf/xpdf-3.02/xpdf/Stream.cc | 435 ++++---- thirdparty/xpdf/xpdf-3.02/xpdf/Stream.h | 10 +- thirdparty/xpdf/xpdf-3.02/xpdf/XRef.cc | 18 +- 16 files changed, 378 insertions(+), 1799 deletions(-) delete mode 100644 thirdparty/xpdf/xpdf-3.02/aconf.h delete mode 100755 thirdparty/xpdf/xpdf-3.02/config.status diff --git a/thirdparty/xpdf/README.txt b/thirdparty/xpdf/README.txt index c4e08b32..22f66331 100644 --- a/thirdparty/xpdf/README.txt +++ b/thirdparty/xpdf/README.txt @@ -7,8 +7,9 @@ instructions for version 3.02 - Decompress xpdf-3.02.xx.tar.gz Windows: - - Copy aconf-win32.h to aconf.h - - undefine unicode API support by adding '#undef UNICODE' aconf.h + - using cywin run ./configure + - run qmake xpdf.pro -r -spec win32-g++ + - run make OSX: - run ./configure (may need extrea options ?) diff --git a/thirdparty/xpdf/xpdf-3.02/aconf.h b/thirdparty/xpdf/xpdf-3.02/aconf.h deleted file mode 100644 index 6ec44b9d..00000000 --- a/thirdparty/xpdf/xpdf-3.02/aconf.h +++ /dev/null @@ -1,116 +0,0 @@ -/* aconf.h. Generated by configure. */ -/* - * aconf.h - * - * Copyright 2002-2003 Glyph & Cog, LLC - */ - -#ifndef ACONF_H -#define ACONF_H - -#include - -/* - * Use A4 paper size instead of Letter for PostScript output. - */ -/* #undef A4_PAPER */ - -/* - * Do not allow text selection. - */ -/* #undef NO_TEXT_SELECT */ - -/* - * Include support for OPI comments. - */ -/* #undef OPI_SUPPORT */ - -/* - * Enable multithreading support. - */ -/* #undef MULTITHREADED */ - -/* - * Enable C++ exceptions. - */ -/* #undef USE_EXCEPTIONS */ - -/* - * Enable word list support. - */ -/* #undef TEXTOUT_WORD_LIST */ - -/* - * Use fixed point (instead of floating point) arithmetic. - */ -/* #undef USE_FIXEDPOINT */ - -/* - * Directory with the Xpdf app-defaults file. - */ -/* #undef APPDEFDIR */ - -/* - * Full path for the system-wide xpdfrc file. - */ -#define SYSTEM_XPDFRC "/usr/local/etc/xpdfrc" - -/* - * Various include files and functions. - */ -#define HAVE_DIRENT_H 1 -/* #undef HAVE_SYS_NDIR_H */ -/* #undef HAVE_SYS_DIR_H */ -/* #undef HAVE_NDIR_H */ -/* #undef HAVE_SYS_SELECT_H */ -/* #undef HAVE_SYS_BSDTYPES_H */ -#define HAVE_STRINGS_H 1 -/* #undef HAVE_BSTRING_H */ -#define HAVE_POPEN 1 -#define HAVE_MKSTEMP 1 -#define HAVE_MKSTEMPS 1 -/* #undef SELECT_TAKES_INT */ -#define HAVE_FSEEKO 1 -/* #undef HAVE_FSEEK64 */ -#define _FILE_OFFSET_BITS 64 -/* #undef _LARGE_FILES */ -/* #undef _LARGEFILE_SOURCE */ -#define HAVE_XTAPPSETEXITFLAG 1 - -/* - * This is defined if using libXpm. - */ -#define HAVE_X11_XPM_H 1 - -/* - * This is defined if using t1lib. - */ -/* #undef HAVE_T1LIB_H */ - -/* - * One of these is defined if using FreeType 2. - */ -/* #undef HAVE_FREETYPE_H */ -/* #undef HAVE_FREETYPE_FREETYPE_H */ - -/* - * This is defined if using libpaper. - */ -/* #undef HAVE_PAPER_H */ - -/* - * Enable support for loading plugins. - */ -/* #undef ENABLE_PLUGINS */ - -/* - * Defined if the Splash library is avaiable. - */ -/* #undef HAVE_SPLASH */ - -/* - * Enable support for CMYK output. - */ -/* #undef SPLASH_CMYK */ - -#endif diff --git a/thirdparty/xpdf/xpdf-3.02/config.status b/thirdparty/xpdf/xpdf-3.02/config.status deleted file mode 100755 index 068f3a07..00000000 --- a/thirdparty/xpdf/xpdf-3.02/config.status +++ /dev/null @@ -1,967 +0,0 @@ -#! /bin/bash -# Generated by configure. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false -SHELL=${CONFIG_SHELL-/bin/bash} -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi -DUALCASE=1; export DUALCASE # for MKS sh - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -fi - - -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done - -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - - -# Name of the executable. -as_me=`$as_basename "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - - -# PATH needs CR, and LINENO needs CR and PATH. -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 -echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | - sed ' - N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, - t loop - s,-$,, - s,^['$as_cr_digits']*\n,, - ' >$as_me.lineno && - chmod +x $as_me.lineno || - { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 -echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno - # Exit status is that of the last command. - exit -} - - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; -esac - -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - -rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else - as_ln_s='ln -s' - fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln -else - as_ln_s='cp -p' -fi -rm -f conf$$ conf$$.exe conf$$.file - -if mkdir -p . 2>/dev/null; then - as_mkdir_p=: -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_executable_p="test -f" - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - -exec 6>&1 - -# Open the log real soon, to keep \$[0] and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. Logging --version etc. is OK. -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX -} >&5 -cat >&5 <<_CSEOF - -This file was extended by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 -config_files=" Makefile goo/Makefile fofi/Makefile splash/Makefile xpdf/Makefile" -config_headers=" aconf.h" - -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTIONS] [FILE]... - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Report bugs to ." -ac_cs_version="\ -config.status -configured by ./configure, generated by GNU Autoconf 2.59, - with options \"\" - -Copyright (C) 2003 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." -srcdir=. -INSTALL="/usr/bin/install -c" -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=*) - ac_option=`expr "x$1" : 'x\([^=]*\)='` - ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` - ac_shift=: - ;; - -*) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - *) # This is not an option, so the user has probably given explicit - # arguments. - ac_option=$1 - ac_need_defaults=false;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --vers* | -V ) - echo "$ac_cs_version"; exit 0 ;; - --he | --h) - # Conflict between --help and --header - { { echo "$as_me:$LINENO: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" - ac_need_defaults=false;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; } ;; - - *) ac_config_targets="$ac_config_targets $1" ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -if $ac_cs_recheck; then - echo "running /bin/bash ./configure " $ac_configure_extra_args " --no-create --no-recursion" >&6 - exec /bin/bash ./configure $ac_configure_extra_args --no-create --no-recursion -fi - -for ac_config_target in $ac_config_targets -do - case "$ac_config_target" in - # Handling of arguments. - "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "goo/Makefile" ) CONFIG_FILES="$CONFIG_FILES goo/Makefile" ;; - "fofi/Makefile" ) CONFIG_FILES="$CONFIG_FILES fofi/Makefile" ;; - "splash/Makefile" ) CONFIG_FILES="$CONFIG_FILES splash/Makefile" ;; - "xpdf/Makefile" ) CONFIG_FILES="$CONFIG_FILES xpdf/Makefile" ;; - "aconf.h" ) CONFIG_HEADERS="$CONFIG_HEADERS aconf.h" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - esac -done - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason to put it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Create a temporary directory, and hook for its removal unless debugging. -$debug || -{ - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} - -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) -} || -{ - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - - -# -# CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "$CONFIG_FILES"; then - # Protect against being on the right side of a sed subst in config.status. - sed 's/,@/@@/; s/@,/@@/; s/,;t t$/@;t t/; /@;t t$/s/[\\&,]/\\&/g; - s/@@/,@/; s/@@/@,/; s/@;t t$/,;t t/' >$tmp/subs.sed <<\CEOF -s,@SHELL@,/bin/bash,;t t -s,@PATH_SEPARATOR@,:,;t t -s,@PACKAGE_NAME@,,;t t -s,@PACKAGE_TARNAME@,,;t t -s,@PACKAGE_VERSION@,,;t t -s,@PACKAGE_STRING@,,;t t -s,@PACKAGE_BUGREPORT@,,;t t -s,@exec_prefix@,${prefix},;t t -s,@prefix@,/usr/local,;t t -s,@program_transform_name@,s,x,x,,;t t -s,@bindir@,${exec_prefix}/bin,;t t -s,@sbindir@,${exec_prefix}/sbin,;t t -s,@libexecdir@,${exec_prefix}/libexec,;t t -s,@datadir@,${prefix}/share,;t t -s,@sysconfdir@,${prefix}/etc,;t t -s,@sharedstatedir@,${prefix}/com,;t t -s,@localstatedir@,${prefix}/var,;t t -s,@libdir@,${exec_prefix}/lib,;t t -s,@includedir@,${prefix}/include,;t t -s,@oldincludedir@,/usr/include,;t t -s,@infodir@,${prefix}/info,;t t -s,@mandir@,${prefix}/man,;t t -s,@build_alias@,,;t t -s,@host_alias@,,;t t -s,@target_alias@,,;t t -s,@DEFS@,-DHAVE_CONFIG_H,;t t -s,@ECHO_C@,,;t t -s,@ECHO_N@,-n,;t t -s,@ECHO_T@,,;t t -s,@LIBS@,,;t t -s,@CC@,gcc,;t t -s,@CFLAGS@,-g -O2,;t t -s,@LDFLAGS@,,;t t -s,@CPPFLAGS@,,;t t -s,@ac_ct_CC@,gcc,;t t -s,@EXEEXT@,,;t t -s,@OBJEXT@,o,;t t -s,@CXX@,g++,;t t -s,@CXXFLAGS@,-g -O2,;t t -s,@ac_ct_CXX@,g++,;t t -s,@INSTALL_PROGRAM@,${INSTALL},;t t -s,@INSTALL_SCRIPT@,${INSTALL},;t t -s,@INSTALL_DATA@,${INSTALL} -m 644,;t t -s,@RANLIB@,ranlib,;t t -s,@ac_ct_RANLIB@,ranlib,;t t -s,@EXE@,,;t t -s,@LIBPREFIX@,lib,;t t -s,@AR@,ar rc,;t t -s,@UP_DIR@,,;t t -s,@CPP@,gcc -E,;t t -s,@X_CFLAGS@,,;t t -s,@X_PRE_LIBS@, -lSM -lICE,;t t -s,@X_LIBS@,,;t t -s,@X_EXTRA_LIBS@,,;t t -s,@EGREP@,grep -E,;t t -s,@Xpm_LIBS@,-lXpm,;t t -s,@Xpm_CFLAGS@,,;t t -s,@Xext_LIBS@,-lXext,;t t -s,@Xext_CFLAGS@,,;t t -s,@Xp_LIBS@,-lXp,;t t -s,@Xp_CFLAGS@,,;t t -s,@Xt_LIBS@,-lXt,;t t -s,@Xt_CFLAGS@,,;t t -s,@Xm_LIBS@,,;t t -s,@Xm_CFLAGS@,,;t t -s,@Sgm_LIBS@,,;t t -s,@Sgm_CFLAGS@,,;t t -s,@t1_LIBS@,,;t t -s,@t1_CFLAGS@,,;t t -s,@freetype2_LIBS@,,;t t -s,@freetype2_CFLAGS@,,;t t -s,@libpaper_LIBS@,,;t t -s,@libpaper_CFLAGS@,,;t t -s,@X@,#,;t t -s,@XPDF_TARGET@,all-no-x,;t t -s,@LIBOBJS@,,;t t -s,@LTLIBOBJS@,,;t t -CEOF - - # Split the substitutions into bite-sized pieces for seds with - # small command number limits, like on Digital OSF/1 and HP-UX. - ac_max_sed_lines=48 - ac_sed_frag=1 # Number of current file. - ac_beg=1 # First line for current file. - ac_end=$ac_max_sed_lines # Line after last line for current file. - ac_more_lines=: - ac_sed_cmds= - while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - else - sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - fi - if test ! -s $tmp/subs.frag; then - ac_more_lines=false - else - # The purpose of the label and of the branching condition is to - # speed up the sed processing (if there are no `@' at all, there - # is no need to browse any of the substitutions). - # These are the two extra sed commands mentioned above. - (echo ':t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" - else - ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" - fi - ac_sed_frag=`expr $ac_sed_frag + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_lines` - fi - done - if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat - fi -fi # test -n "$CONFIG_FILES" - -for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_builddir$INSTALL ;; - esac - - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - configure_input= - else - configure_input="$ac_file. " - fi - configure_input=$configure_input"Generated from `echo $ac_file_in | - sed 's,.*/,,'` by configure." - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } - sed "/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/; -s/:*\${srcdir}:*/:/; -s/:*@srcdir@:*/:/; -s/^\([^=]*=[ ]*\):*/\1/; -s/:*$//; -s/^[^=]*=[ ]*$//; -} - -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s,@configure_input@,$configure_input,;t t -s,@srcdir@,$ac_srcdir,;t t -s,@abs_srcdir@,$ac_abs_srcdir,;t t -s,@top_srcdir@,$ac_top_srcdir,;t t -s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t -s,@builddir@,$ac_builddir,;t t -s,@abs_builddir@,$ac_abs_builddir,;t t -s,@top_builddir@,$ac_top_builddir,;t t -s,@abs_top_builddir@,$ac_abs_top_builddir,;t t -s,@INSTALL@,$ac_INSTALL,;t t -" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out - rm -f $tmp/stdin - if test x"$ac_file" != x-; then - mv $tmp/out $ac_file - else - cat $tmp/out - rm -f $tmp/out - fi - -done - -# -# CONFIG_HEADER section. -# - -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='[ ].*$,\1#\2' -ac_dC=' ' -ac_dD=',;t' -# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='$,\1#\2define\3' -ac_uC=' ' -ac_uD=',;t' - -for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - - test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - # Do quote $f, to prevent DOS paths from being IFS'd. - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } - # Remove the trailing spaces. - sed 's/[ ]*$//' $ac_file_inputs >$tmp/in - - # Handle all the #define templates only if necessary. - if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then - # If there are no defines, we may have an empty if/fi - : - cat >$tmp/defines.sed <$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in - - fi # grep - - # Handle all the #undef templates - cat >$tmp/undefs.sed <$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - echo "/* Generated by configure. */" >$tmp/config.h - else - echo "/* $ac_file. Generated by configure. */" >$tmp/config.h - fi - cat $tmp/in >>$tmp/config.h - rm -f $tmp/in - if test x"$ac_file" != x-; then - if diff $ac_file $tmp/config.h >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} - else - ac_dir=`(dirname "$ac_file") 2>/dev/null || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - rm -f $ac_file - mv $tmp/config.h $ac_file - fi - else - cat $tmp/config.h - rm -f $tmp/config.h - fi -done - -{ (exit 0); exit 0; } diff --git a/thirdparty/xpdf/xpdf-3.02/fofi/FoFiType1.cc b/thirdparty/xpdf/xpdf-3.02/fofi/FoFiType1.cc index 8a53b4ca..efad5ee4 100644 --- a/thirdparty/xpdf/xpdf-3.02/fofi/FoFiType1.cc +++ b/thirdparty/xpdf/xpdf-3.02/fofi/FoFiType1.cc @@ -224,7 +224,7 @@ void FoFiType1::parse() { code = code * 8 + (*p2 - '0'); } } - if (code >= 0 && code < 256) { + if (code < 256) { for (p = p2; *p == ' ' || *p == '\t'; ++p) ; if (*p == '/') { ++p; diff --git a/thirdparty/xpdf/xpdf-3.02/goo/gfile.cc b/thirdparty/xpdf/xpdf-3.02/goo/gfile.cc index 4f3cdbe0..54a7be3d 100644 --- a/thirdparty/xpdf/xpdf-3.02/goo/gfile.cc +++ b/thirdparty/xpdf/xpdf-3.02/goo/gfile.cc @@ -118,7 +118,7 @@ GString *appendToPath(GString *path, char *fileName) { if (*p1 == ']') { for (p2 = p1; p2 > p0 && *p2 != '.' && *p2 != '['; --p2) ; if (*p2 == '[') - ++p2; + ++p2; path->del(p2 - p0, p1 - p2); } else if (*p1 == ':') { path->append("[-]"); @@ -206,21 +206,21 @@ GString *appendToPath(GString *path, char *fileName) { if (!strcmp(fileName, "..")) { for (i = path->getLength() - 2; i >= 0; --i) { if (path->getChar(i) == '/' || path->getChar(i) == '\\' || - path->getChar(i) == ':') - break; + path->getChar(i) == ':') + break; } if (i <= 0) { if (path->getChar(0) == '/' || path->getChar(0) == '\\') { - path->del(1, path->getLength() - 1); + path->del(1, path->getLength() - 1); } else if (path->getLength() >= 2 && path->getChar(1) == ':') { - path->del(2, path->getLength() - 2); + path->del(2, path->getLength() - 2); } else { - path->clear(); - path->append(".."); + path->clear(); + path->append(".."); } } else { if (path->getChar(i-1) == ':') - ++i; + ++i; path->del(i, path->getLength() - i); } return path; @@ -246,14 +246,14 @@ GString *appendToPath(GString *path, char *fileName) { if (!strcmp(fileName, "..")) { for (i = path->getLength() - 2; i >= 0; --i) { if (path->getChar(i) == '/') - break; + break; } if (i <= 0) { if (path->getChar(0) == '/') { - path->del(1, path->getLength() - 1); + path->del(1, path->getLength() - 1); } else { - path->clear(); - path->append(".."); + path->clear(); + path->append(".."); } } else { path->del(i, path->getLength() - i); @@ -323,7 +323,7 @@ GBool isAbsolutePath(char *path) { #ifdef VMS //---------- VMS ---------- return strchr(path, ':') || - (path[0] == '[' && path[1] != '.' && path[1] != '-'); + (path[0] == '[' && path[1] != '.' && path[1] != '-'); #elif defined(__EMX__) || defined(WIN32) //---------- OS/2+EMX and Win32 ---------- @@ -390,9 +390,9 @@ GString *makePathAbsolute(GString *path) { if (path->getChar(0) == '~') { if (path->getChar(1) == '/' || #ifdef __EMX__ - path->getChar(1) == '\\' || + path->getChar(1) == '\\' || #endif - path->getLength() == 1) { + path->getLength() == 1) { path->del(0, 1); s = getHomeDir(); path->insert(0, s); @@ -405,12 +405,12 @@ GString *makePathAbsolute(GString *path) { for (p2 = p1; *p2 && *p2 != '/'; ++p2) ; #endif if ((n = p2 - p1) > PATH_MAX) - n = PATH_MAX; + n = PATH_MAX; strncpy(buf, p1, n); buf[n] = '\0'; if ((pw = getpwnam(buf))) { - path->del(0, p2 - p1 + 1); - path->insert(0, pw->pw_dir); + path->del(0, p2 - p1 + 1); + path->insert(0, pw->pw_dir); } } } else if (!isAbsolutePath(path->getCString())) { @@ -467,9 +467,9 @@ GBool openTempFile(GString **name, FILE **f, char *mode, char *ext) { } if (!(f2 = fopen(s2->getCString(), "r"))) { if (!(f2 = fopen(s2->getCString(), mode))) { - delete s2; - delete s; - return gFalse; + delete s2; + delete s; + return gFalse; } *name = s2; *f = f2; @@ -571,9 +571,9 @@ char *getLine(char *buf, int size, FILE *f) { if (c == '\x0d') { c = fgetc(f); if (c == '\x0a' && i < size - 1) { - buf[i++] = (char)c; + buf[i++] = (char)c; } else if (c != EOF) { - ungetc(c, f); + ungetc(c, f); } break; } @@ -606,7 +606,7 @@ GDirEntry::GDirEntry(char *dirPath, char *nameA, GBool doStat) { if (doStat) { #ifdef VMS if (!strcmp(nameA, "-") || - ((p = strrchr(nameA, '.')) && !strncmp(p, ".DIR;", 5))) + ((p = strrchr(nameA, '.')) && !strncmp(p, ".DIR;", 5))) dir = gTrue; #elif defined(ACORN) #else diff --git a/thirdparty/xpdf/xpdf-3.02/goo/gmem.cc b/thirdparty/xpdf/xpdf-3.02/goo/gmem.cc index 8384cef2..6b13b38d 100644 --- a/thirdparty/xpdf/xpdf-3.02/goo/gmem.cc +++ b/thirdparty/xpdf/xpdf-3.02/goo/gmem.cc @@ -55,15 +55,7 @@ void *gmalloc(int size) GMEM_EXCEP { void *data; unsigned long *trl, *p; - if (size < 0) { -#if USE_EXCEPTIONS - throw GMemException(); -#else - fprintf(stderr, "Invalid memory allocation size\n"); - exit(1); -#endif - } - if (size == 0) { + if (size <= 0) { return NULL; } size1 = gMemDataSize(size); @@ -99,15 +91,7 @@ void *gmalloc(int size) GMEM_EXCEP { #else void *p; - if (size < 0) { -#if USE_EXCEPTIONS - throw GMemException(); -#else - fprintf(stderr, "Invalid memory allocation size\n"); - exit(1); -#endif - } - if (size == 0) { + if (size <= 0) { return NULL; } if (!(p = malloc(size))) { @@ -128,15 +112,7 @@ void *grealloc(void *p, int size) GMEM_EXCEP { void *q; int oldSize; - if (size < 0) { -#if USE_EXCEPTIONS - throw GMemException(); -#else - fprintf(stderr, "Invalid memory allocation size\n"); - exit(1); -#endif - } - if (size == 0) { + if (size <= 0) { if (p) { gfree(p); } @@ -155,15 +131,7 @@ void *grealloc(void *p, int size) GMEM_EXCEP { #else void *q; - if (size < 0) { -#if USE_EXCEPTIONS - throw GMemException(); -#else - fprintf(stderr, "Invalid memory allocation size\n"); - exit(1); -#endif - } - if (size == 0) { + if (size <= 0) { if (p) { free(p); } diff --git a/thirdparty/xpdf/xpdf-3.02/splash/Splash.cc b/thirdparty/xpdf/xpdf-3.02/splash/Splash.cc index e1482171..537ee1a7 100644 --- a/thirdparty/xpdf/xpdf-3.02/splash/Splash.cc +++ b/thirdparty/xpdf/xpdf-3.02/splash/Splash.cc @@ -12,7 +12,6 @@ #include #include -#include #include "gmem.h" #include "SplashErrorCodes.h" #include "SplashMath.h" @@ -1913,10 +1912,7 @@ SplashError Splash::fillImageMask(SplashImageMaskSource src, void *srcData, xq = w % scaledWidth; // allocate pixel buffer - if (yp < 0 || yp > INT_MAX - 1) { - return splashErrBadArg; - } - pixBuf = (SplashColorPtr)gmallocn(yp + 1, w); + pixBuf = (SplashColorPtr)gmalloc((yp + 1) * w); // initialize the pixel pipe pipeInit(&pipe, 0, 0, state->fillPattern, NULL, state->fillAlpha, @@ -2212,12 +2208,9 @@ SplashError Splash::drawImage(SplashImageSource src, void *srcData, xq = w % scaledWidth; // allocate pixel buffers - if (yp < 0 || yp > INT_MAX - 1 || w > INT_MAX / nComps) { - return splashErrBadArg; - } - colorBuf = (SplashColorPtr)gmallocn(yp + 1, w * nComps); + colorBuf = (SplashColorPtr)gmalloc((yp + 1) * w * nComps); if (srcAlpha) { - alphaBuf = (Guchar *)gmallocn(yp + 1, w); + alphaBuf = (Guchar *)gmalloc((yp + 1) * w); } else { alphaBuf = NULL; } diff --git a/thirdparty/xpdf/xpdf-3.02/splash/SplashBitmap.cc b/thirdparty/xpdf/xpdf-3.02/splash/SplashBitmap.cc index 62bbd8e8..0cb1a752 100644 --- a/thirdparty/xpdf/xpdf-3.02/splash/SplashBitmap.cc +++ b/thirdparty/xpdf/xpdf-3.02/splash/SplashBitmap.cc @@ -11,7 +11,6 @@ #endif #include -#include #include "gmem.h" #include "SplashErrorCodes.h" #include "SplashBitmap.h" @@ -28,48 +27,30 @@ SplashBitmap::SplashBitmap(int widthA, int heightA, int rowPad, mode = modeA; switch (mode) { case splashModeMono1: - if (width > 0) { - rowSize = (width + 7) >> 3; - } else { - rowSize = -1; - } + rowSize = (width + 7) >> 3; break; case splashModeMono8: - if (width > 0) { - rowSize = width; - } else { - rowSize = -1; - } + rowSize = width; break; case splashModeRGB8: case splashModeBGR8: - if (width > 0 && width <= INT_MAX / 3) { - rowSize = width * 3; - } else { - rowSize = -1; - } + rowSize = width * 3; break; #if SPLASH_CMYK case splashModeCMYK8: - if (width > 0 && width <= INT_MAX / 4) { - rowSize = width * 4; - } else { - rowSize = -1; - } + rowSize = width * 4; break; #endif } - if (rowSize > 0) { - rowSize += rowPad - 1; - rowSize -= rowSize % rowPad; - } - data = (SplashColorPtr)gmallocn(height, rowSize); + rowSize += rowPad - 1; + rowSize -= rowSize % rowPad; + data = (SplashColorPtr)gmalloc(rowSize * height); if (!topDown) { data += (height - 1) * rowSize; rowSize = -rowSize; } if (alphaA) { - alpha = (Guchar *)gmallocn(width, height); + alpha = (Guchar *)gmalloc(width * height); } else { alpha = NULL; } diff --git a/thirdparty/xpdf/xpdf-3.02/splash/SplashErrorCodes.h b/thirdparty/xpdf/xpdf-3.02/splash/SplashErrorCodes.h index 7bdaf14e..2a70d4b7 100644 --- a/thirdparty/xpdf/xpdf-3.02/splash/SplashErrorCodes.h +++ b/thirdparty/xpdf/xpdf-3.02/splash/SplashErrorCodes.h @@ -29,6 +29,4 @@ #define splashErrSingularMatrix 8 // matrix is singular -#define splashErrBadArg 9 // bad argument - #endif diff --git a/thirdparty/xpdf/xpdf-3.02/xpdf/Gfx.cc b/thirdparty/xpdf/xpdf-3.02/xpdf/Gfx.cc index b7a1afce..b7655b62 100644 --- a/thirdparty/xpdf/xpdf-3.02/xpdf/Gfx.cc +++ b/thirdparty/xpdf/xpdf-3.02/xpdf/Gfx.cc @@ -461,7 +461,6 @@ Gfx::Gfx(XRef *xrefA, OutputDev *outA, int pageNum, Dict *resDict, baseMatrix[i] = state->getCTM()[i]; } formDepth = 0; - parser = NULL; abortCheckCbk = abortCheckCbkA; abortCheckCbkData = abortCheckCbkDataA; @@ -501,7 +500,6 @@ Gfx::Gfx(XRef *xrefA, OutputDev *outA, Dict *resDict, baseMatrix[i] = state->getCTM()[i]; } formDepth = 0; - parser = NULL; abortCheckCbk = abortCheckCbkA; abortCheckCbkData = abortCheckCbkDataA; diff --git a/thirdparty/xpdf/xpdf-3.02/xpdf/JBIG2Stream.cc b/thirdparty/xpdf/xpdf-3.02/xpdf/JBIG2Stream.cc index 23b94d4a..a4f1b6ea 100644 --- a/thirdparty/xpdf/xpdf-3.02/xpdf/JBIG2Stream.cc +++ b/thirdparty/xpdf/xpdf-3.02/xpdf/JBIG2Stream.cc @@ -422,14 +422,12 @@ void JBIG2HuffmanDecoder::buildTable(JBIG2HuffmanTable *table, Guint len) { table[i] = table[len]; // assign prefixes - if (table[0].rangeLen != jbig2HuffmanEOT) { - i = 0; - prefix = 0; - table[i++].prefix = prefix++; - for (; table[i].rangeLen != jbig2HuffmanEOT; ++i) { - prefix <<= table[i].prefixLen - table[i-1].prefixLen; - table[i].prefix = prefix++; - } + i = 0; + prefix = 0; + table[i++].prefix = prefix++; + for (; table[i].rangeLen != jbig2HuffmanEOT; ++i) { + prefix <<= table[i].prefixLen - table[i-1].prefixLen; + table[i].prefix = prefix++; } } @@ -493,7 +491,7 @@ int JBIG2MMRDecoder::get2DCode() { } if (p->bits < 0) { error(str->getPos(), "Bad two dim code in JBIG2 MMR stream"); - return EOF; + return 0; } bufLen -= p->bits; return p->n; @@ -509,7 +507,7 @@ int JBIG2MMRDecoder::getWhiteCode() { ++nBytesRead; } while (1) { - if (bufLen >= 11 && ((buf >> (bufLen - 7)) & 0x7f) == 0) { + if (bufLen >= 7 && ((buf >> (bufLen - 7)) & 0x7f) == 0) { if (bufLen <= 12) { code = buf << (12 - bufLen); } else { @@ -552,15 +550,14 @@ int JBIG2MMRDecoder::getBlackCode() { ++nBytesRead; } while (1) { - if (bufLen >= 10 && ((buf >> (bufLen - 6)) & 0x3f) == 0) { + if (bufLen >= 6 && ((buf >> (bufLen - 6)) & 0x3f) == 0) { if (bufLen <= 13) { code = buf << (13 - bufLen); } else { code = buf >> (bufLen - 13); } p = &blackTab1[code & 0x7f]; - } else if (bufLen >= 7 && ((buf >> (bufLen - 4)) & 0x0f) == 0 && - ((buf >> (bufLen - 6)) & 0x03) != 0) { + } else if (bufLen >= 4 && ((buf >> (bufLen - 4)) & 0x0f) == 0) { if (bufLen <= 12) { code = buf << (12 - bufLen); } else { @@ -686,9 +683,8 @@ JBIG2Bitmap::JBIG2Bitmap(Guint segNumA, int wA, int hA): h = hA; line = (wA + 7) >> 3; if (w <= 0 || h <= 0 || line <= 0 || h >= (INT_MAX - 1) / line) { - // force a call to gmalloc(-1), which will throw an exception - h = -1; - line = 2; + data = NULL; + return; } // need to allocate one extra guard byte for use in combine() data = (Guchar *)gmalloc(h * line + 1); @@ -702,9 +698,8 @@ JBIG2Bitmap::JBIG2Bitmap(Guint segNumA, JBIG2Bitmap *bitmap): h = bitmap->h; line = bitmap->line; if (w <= 0 || h <= 0 || line <= 0 || h >= (INT_MAX - 1) / line) { - // force a call to gmalloc(-1), which will throw an exception - h = -1; - line = 2; + data = NULL; + return; } // need to allocate one extra guard byte for use in combine() data = (Guchar *)gmalloc(h * line + 1); @@ -759,8 +754,6 @@ void JBIG2Bitmap::clearToOne() { inline void JBIG2Bitmap::getPixelPtr(int x, int y, JBIG2BitmapPtr *ptr) { if (y < 0 || y >= h || x >= w) { ptr->p = NULL; - ptr->shift = 0; // make gcc happy - ptr->x = 0; // make gcc happy } else if (x < 0) { ptr->p = &data[y * line]; ptr->shift = 7; @@ -805,10 +798,6 @@ void JBIG2Bitmap::combine(JBIG2Bitmap *bitmap, int x, int y, Guint src0, src1, src, dest, s1, s2, m1, m2, m3; GBool oneByte; - // check for the pathological case where y = -2^31 - if (y < -0x7fffffff) { - return; - } if (y < 0) { y0 = -y; } else { @@ -1022,13 +1011,8 @@ private: JBIG2SymbolDict::JBIG2SymbolDict(Guint segNumA, Guint sizeA): JBIG2Segment(segNumA) { - Guint i; - size = sizeA; bitmaps = (JBIG2Bitmap **)gmallocn(size, sizeof(JBIG2Bitmap *)); - for (i = 0; i < size; ++i) { - bitmaps[i] = NULL; - } genericRegionStats = NULL; refinementRegionStats = NULL; } @@ -1037,9 +1021,7 @@ JBIG2SymbolDict::~JBIG2SymbolDict() { Guint i; for (i = 0; i < size; ++i) { - if (bitmaps[i]) { - delete bitmaps[i]; - } + delete bitmaps[i]; } gfree(bitmaps); if (genericRegionStats) { @@ -1314,13 +1296,6 @@ void JBIG2Stream::readSegments() { goto eofError2; } - // check for missing page information segment - if (!pageBitmap && ((segType >= 4 && segType <= 7) || - (segType >= 20 && segType <= 43))) { - error(getPos(), "First JBIG2 segment associated with a page must be a page information segment"); - goto syntaxError; - } - // read the segment data switch (segType) { case 0: @@ -1436,8 +1411,6 @@ GBool JBIG2Stream::readSymbolDictSeg(Guint segNum, Guint length, Guint i, j, k; Guchar *p; - symWidths = NULL; - // symbol dictionary flags if (!readUWord(&flags)) { goto eofError; @@ -1493,32 +1466,20 @@ GBool JBIG2Stream::readSymbolDictSeg(Guint segNum, Guint length, codeTables = new GList(); numInputSyms = 0; for (i = 0; i < nRefSegs; ++i) { - if ((seg = findSegment(refSegs[i]))) { - if (seg->getType() == jbig2SegSymbolDict) { - j = ((JBIG2SymbolDict *)seg)->getSize(); - if (numInputSyms > UINT_MAX - j) { - error(getPos(), "Too many input symbols in JBIG2 symbol dictionary"); - delete codeTables; - goto eofError; - } - numInputSyms += j; - } else if (seg->getType() == jbig2SegCodeTable) { - codeTables->append(seg); - } + seg = findSegment(refSegs[i]); + if (seg->getType() == jbig2SegSymbolDict) { + numInputSyms += ((JBIG2SymbolDict *)seg)->getSize(); + } else if (seg->getType() == jbig2SegCodeTable) { + codeTables->append(seg); } } - if (numInputSyms > UINT_MAX - numNewSyms) { - error(getPos(), "Too many input symbols in JBIG2 symbol dictionary"); - delete codeTables; - goto eofError; - } // compute symbol code length - symCodeLen = 1; - i = (numInputSyms + numNewSyms) >> 1; - while (i) { + symCodeLen = 0; + i = 1; + while (i < numInputSyms + numNewSyms) { ++symCodeLen; - i >>= 1; + i <<= 1; } // get the input symbol bitmaps @@ -1530,12 +1491,11 @@ GBool JBIG2Stream::readSymbolDictSeg(Guint segNum, Guint length, k = 0; inputSymbolDict = NULL; for (i = 0; i < nRefSegs; ++i) { - if ((seg = findSegment(refSegs[i]))) { - if (seg->getType() == jbig2SegSymbolDict) { - inputSymbolDict = (JBIG2SymbolDict *)seg; - for (j = 0; j < inputSymbolDict->getSize(); ++j) { - bitmaps[k++] = inputSymbolDict->getBitmap(j); - } + seg = findSegment(refSegs[i]); + if (seg->getType() == jbig2SegSymbolDict) { + inputSymbolDict = (JBIG2SymbolDict *)seg; + for (j = 0; j < inputSymbolDict->getSize(); ++j) { + bitmaps[k++] = inputSymbolDict->getBitmap(j); } } } @@ -1550,9 +1510,6 @@ GBool JBIG2Stream::readSymbolDictSeg(Guint segNum, Guint length, } else if (huffDH == 1) { huffDHTable = huffTableE; } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } huffDHTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); } if (huffDW == 0) { @@ -1560,26 +1517,17 @@ GBool JBIG2Stream::readSymbolDictSeg(Guint segNum, Guint length, } else if (huffDW == 1) { huffDWTable = huffTableC; } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } huffDWTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); } if (huffBMSize == 0) { huffBMSizeTable = huffTableA; } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } huffBMSizeTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); } if (huffAggInst == 0) { huffAggInstTable = huffTableA; } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } huffAggInstTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); } @@ -1612,6 +1560,7 @@ GBool JBIG2Stream::readSymbolDictSeg(Guint segNum, Guint length, } // allocate symbol widths storage + symWidths = NULL; if (huff && !refAgg) { symWidths = (Guint *)gmallocn(numNewSyms, sizeof(Guint)); } @@ -1653,10 +1602,6 @@ GBool JBIG2Stream::readSymbolDictSeg(Guint segNum, Guint length, goto syntaxError; } symWidth += dw; - if (i >= numNewSyms) { - error(getPos(), "Too many symbols in JBIG2 symbol dictionary"); - goto syntaxError; - } // using a collective bitmap, so don't read a bitmap here if (huff && !refAgg) { @@ -1693,10 +1638,6 @@ GBool JBIG2Stream::readSymbolDictSeg(Guint segNum, Guint length, arithDecoder->decodeInt(&refDX, iardxStats); arithDecoder->decodeInt(&refDY, iardyStats); } - if (symID >= numInputSyms + i) { - error(getPos(), "Invalid symbol ID in JBIG2 symbol dictionary"); - goto syntaxError; - } refBitmap = bitmaps[symID]; bitmaps[numInputSyms + i] = readGenericRefinementRegion(symWidth, symHeight, @@ -1763,12 +1704,6 @@ GBool JBIG2Stream::readSymbolDictSeg(Guint segNum, Guint length, } else { arithDecoder->decodeInt(&run, iaexStats); } - if (i + run > numInputSyms + numNewSyms || - (ex && j + run > numExSyms)) { - error(getPos(), "Too many exported symbols in JBIG2 symbol dictionary"); - delete symbolDict; - goto syntaxError; - } if (ex) { for (cnt = 0; cnt < run; ++cnt) { symbolDict->setBitmap(j++, bitmaps[i++]->copy()); @@ -1778,11 +1713,6 @@ GBool JBIG2Stream::readSymbolDictSeg(Guint segNum, Guint length, } ex = !ex; } - if (j != numExSyms) { - error(getPos(), "Too few symbols in JBIG2 symbol dictionary"); - delete symbolDict; - goto syntaxError; - } for (i = 0; i < numNewSyms; ++i) { delete bitmaps[numInputSyms + i]; @@ -1805,10 +1735,6 @@ GBool JBIG2Stream::readSymbolDictSeg(Guint segNum, Guint length, return gTrue; - codeTableError: - error(getPos(), "Missing code table in JBIG2 symbol dictionary"); - delete codeTables; - syntaxError: for (i = 0; i < numNewSyms; ++i) { if (bitmaps[numInputSyms + i]) { @@ -1911,8 +1837,6 @@ void JBIG2Stream::readTextRegionSeg(Guint segNum, GBool imm, } } else { error(getPos(), "Invalid segment reference in JBIG2 text region"); - delete codeTables; - return; } } symCodeLen = 0; @@ -1947,9 +1871,6 @@ void JBIG2Stream::readTextRegionSeg(Guint segNum, GBool imm, } else if (huffFS == 1) { huffFSTable = huffTableG; } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } huffFSTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); } if (huffDS == 0) { @@ -1959,9 +1880,6 @@ void JBIG2Stream::readTextRegionSeg(Guint segNum, GBool imm, } else if (huffDS == 2) { huffDSTable = huffTableJ; } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } huffDSTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); } if (huffDT == 0) { @@ -1971,9 +1889,6 @@ void JBIG2Stream::readTextRegionSeg(Guint segNum, GBool imm, } else if (huffDT == 2) { huffDTTable = huffTableM; } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } huffDTTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); } if (huffRDW == 0) { @@ -1981,9 +1896,6 @@ void JBIG2Stream::readTextRegionSeg(Guint segNum, GBool imm, } else if (huffRDW == 1) { huffRDWTable = huffTableO; } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } huffRDWTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); } if (huffRDH == 0) { @@ -1991,9 +1903,6 @@ void JBIG2Stream::readTextRegionSeg(Guint segNum, GBool imm, } else if (huffRDH == 1) { huffRDHTable = huffTableO; } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } huffRDHTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); } if (huffRDX == 0) { @@ -2001,9 +1910,6 @@ void JBIG2Stream::readTextRegionSeg(Guint segNum, GBool imm, } else if (huffRDX == 1) { huffRDXTable = huffTableO; } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } huffRDXTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); } if (huffRDY == 0) { @@ -2011,17 +1917,11 @@ void JBIG2Stream::readTextRegionSeg(Guint segNum, GBool imm, } else if (huffRDY == 1) { huffRDYTable = huffTableO; } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } huffRDYTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); } if (huffRSize == 0) { huffRSizeTable = huffTableA; } else { - if (i >= (Guint)codeTables->getLength()) { - goto codeTableError; - } huffRSizeTable = ((JBIG2CodeTable *)codeTables->get(i++))->getHuffTable(); } @@ -2116,15 +2016,8 @@ void JBIG2Stream::readTextRegionSeg(Guint segNum, GBool imm, return; - codeTableError: - error(getPos(), "Missing code table in JBIG2 text region"); - gfree(codeTables); - delete syms; - return; - eofError: error(getPos(), "Unexpected EOF in JBIG2 stream"); - return; } JBIG2Bitmap *JBIG2Stream::readTextRegion(GBool huff, GBool refine, @@ -2431,8 +2324,8 @@ void JBIG2Stream::readHalftoneRegionSeg(Guint segNum, GBool imm, error(getPos(), "Bad symbol dictionary reference in JBIG2 halftone segment"); return; } - if (!(seg = findSegment(refSegs[0])) || - seg->getType() != jbig2SegPatternDict) { + seg = findSegment(refSegs[0]); + if (seg->getType() != jbig2SegPatternDict) { error(getPos(), "Bad symbol dictionary reference in JBIG2 halftone segment"); return; } @@ -2590,7 +2483,7 @@ void JBIG2Stream::readGenericRegionSeg(Guint segNum, GBool imm, // read the bitmap bitmap = readGenericBitmap(mmr, w, h, templ, tpgdOn, gFalse, - NULL, atx, aty, mmr ? length - 18 : 0); + NULL, atx, aty, mmr ? 0 : length - 18); // combine the region bitmap into the page bitmap if (imm) { @@ -2612,43 +2505,6 @@ void JBIG2Stream::readGenericRegionSeg(Guint segNum, GBool imm, error(getPos(), "Unexpected EOF in JBIG2 stream"); } -inline void JBIG2Stream::mmrAddPixels(int a1, int blackPixels, - int *codingLine, int *a0i, int w) { - if (a1 > codingLine[*a0i]) { - if (a1 > w) { - error(getPos(), "JBIG2 MMR row is wrong length ({0:d})", a1); - a1 = w; - } - if ((*a0i & 1) ^ blackPixels) { - ++*a0i; - } - codingLine[*a0i] = a1; - } -} - -inline void JBIG2Stream::mmrAddPixelsNeg(int a1, int blackPixels, - int *codingLine, int *a0i, int w) { - if (a1 > codingLine[*a0i]) { - if (a1 > w) { - error(getPos(), "JBIG2 MMR row is wrong length ({0:d})", a1); - a1 = w; - } - if ((*a0i & 1) ^ blackPixels) { - ++*a0i; - } - codingLine[*a0i] = a1; - } else if (a1 < codingLine[*a0i]) { - if (a1 < 0) { - error(getPos(), "Invalid JBIG2 MMR code"); - a1 = 0; - } - while (*a0i > 0 && a1 <= codingLine[*a0i - 1]) { - --*a0i; - } - codingLine[*a0i] = a1; - } -} - JBIG2Bitmap *JBIG2Stream::readGenericBitmap(GBool mmr, int w, int h, int templ, GBool tpgdOn, GBool useSkip, JBIG2Bitmap *skip, @@ -2661,7 +2517,7 @@ JBIG2Bitmap *JBIG2Stream::readGenericBitmap(GBool mmr, int w, int h, JBIG2BitmapPtr atPtr0, atPtr1, atPtr2, atPtr3; int *refLine, *codingLine; int code1, code2, code3; - int x, y, a0i, b1i, blackPixels, pix, i; + int x, y, a0, pix, i, refI, codingI; bitmap = new JBIG2Bitmap(0, w, h); bitmap->clearToZero(); @@ -2671,18 +2527,9 @@ JBIG2Bitmap *JBIG2Stream::readGenericBitmap(GBool mmr, int w, int h, if (mmr) { mmrDecoder->reset(); - if (w > INT_MAX - 2) { - error(getPos(), "Bad width in JBIG2 generic bitmap"); - // force a call to gmalloc(-1), which will throw an exception - w = -3; - } - // 0 <= codingLine[0] < codingLine[1] < ... < codingLine[n] = w - // ---> max codingLine size = w + 1 - // refLine has one extra guard entry at the end - // ---> max refLine size = w + 2 - codingLine = (int *)gmallocn(w + 1, sizeof(int)); refLine = (int *)gmallocn(w + 2, sizeof(int)); - codingLine[0] = w; + codingLine = (int *)gmallocn(w + 2, sizeof(int)); + codingLine[0] = codingLine[1] = w; for (y = 0; y < h; ++y) { @@ -2690,157 +2537,128 @@ JBIG2Bitmap *JBIG2Stream::readGenericBitmap(GBool mmr, int w, int h, for (i = 0; codingLine[i] < w; ++i) { refLine[i] = codingLine[i]; } - refLine[i++] = w; - refLine[i] = w; + refLine[i] = refLine[i + 1] = w; // decode a line - codingLine[0] = 0; - a0i = 0; - b1i = 0; - blackPixels = 0; - // invariant: - // refLine[b1i-1] <= codingLine[a0i] < refLine[b1i] < refLine[b1i+1] <= w - // exception at left edge: - // codingLine[a0i = 0] = refLine[b1i = 0] = 0 is possible - // exception at right edge: - // refLine[b1i] = refLine[b1i+1] = w is possible - while (codingLine[a0i] < w) { + refI = 0; // b1 = refLine[refI] + codingI = 0; // a1 = codingLine[codingI] + a0 = 0; + do { code1 = mmrDecoder->get2DCode(); switch (code1) { case twoDimPass: - mmrAddPixels(refLine[b1i + 1], blackPixels, codingLine, &a0i, w); - if (refLine[b1i + 1] < w) { - b1i += 2; - } - break; + if (refLine[refI] < w) { + a0 = refLine[refI + 1]; + refI += 2; + } + break; case twoDimHoriz: - code1 = code2 = 0; - if (blackPixels) { - do { - code1 += code3 = mmrDecoder->getBlackCode(); - } while (code3 >= 64); - do { - code2 += code3 = mmrDecoder->getWhiteCode(); - } while (code3 >= 64); - } else { - do { - code1 += code3 = mmrDecoder->getWhiteCode(); - } while (code3 >= 64); - do { - code2 += code3 = mmrDecoder->getBlackCode(); - } while (code3 >= 64); - } - mmrAddPixels(codingLine[a0i] + code1, blackPixels, - codingLine, &a0i, w); - if (codingLine[a0i] < w) { - mmrAddPixels(codingLine[a0i] + code2, blackPixels ^ 1, - codingLine, &a0i, w); - } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - break; - case twoDimVertR3: - mmrAddPixels(refLine[b1i] + 3, blackPixels, codingLine, &a0i, w); - blackPixels ^= 1; - if (codingLine[a0i] < w) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - } - break; - case twoDimVertR2: - mmrAddPixels(refLine[b1i] + 2, blackPixels, codingLine, &a0i, w); - blackPixels ^= 1; - if (codingLine[a0i] < w) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - } - break; - case twoDimVertR1: - mmrAddPixels(refLine[b1i] + 1, blackPixels, codingLine, &a0i, w); - blackPixels ^= 1; - if (codingLine[a0i] < w) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - } - break; + if (codingI & 1) { + code1 = 0; + do { + code1 += code3 = mmrDecoder->getBlackCode(); + } while (code3 >= 64); + code2 = 0; + do { + code2 += code3 = mmrDecoder->getWhiteCode(); + } while (code3 >= 64); + } else { + code1 = 0; + do { + code1 += code3 = mmrDecoder->getWhiteCode(); + } while (code3 >= 64); + code2 = 0; + do { + code2 += code3 = mmrDecoder->getBlackCode(); + } while (code3 >= 64); + } + if (code1 > 0 || code2 > 0) { + a0 = codingLine[codingI++] = a0 + code1; + a0 = codingLine[codingI++] = a0 + code2; + while (refLine[refI] <= a0 && refLine[refI] < w) { + refI += 2; + } + } + break; case twoDimVert0: - mmrAddPixels(refLine[b1i], blackPixels, codingLine, &a0i, w); - blackPixels ^= 1; - if (codingLine[a0i] < w) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - } - break; - case twoDimVertL3: - mmrAddPixelsNeg(refLine[b1i] - 3, blackPixels, codingLine, &a0i, w); - blackPixels ^= 1; - if (codingLine[a0i] < w) { - if (b1i > 0) { - --b1i; - } else { - ++b1i; - } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - } - break; - case twoDimVertL2: - mmrAddPixelsNeg(refLine[b1i] - 2, blackPixels, codingLine, &a0i, w); - blackPixels ^= 1; - if (codingLine[a0i] < w) { - if (b1i > 0) { - --b1i; - } else { - ++b1i; - } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - } - break; + a0 = codingLine[codingI++] = refLine[refI]; + if (refLine[refI] < w) { + ++refI; + } + break; + case twoDimVertR1: + a0 = codingLine[codingI++] = refLine[refI] + 1; + if (refLine[refI] < w) { + ++refI; + while (refLine[refI] <= a0 && refLine[refI] < w) { + refI += 2; + } + } + break; + case twoDimVertR2: + a0 = codingLine[codingI++] = refLine[refI] + 2; + if (refLine[refI] < w) { + ++refI; + while (refLine[refI] <= a0 && refLine[refI] < w) { + refI += 2; + } + } + break; + case twoDimVertR3: + a0 = codingLine[codingI++] = refLine[refI] + 3; + if (refLine[refI] < w) { + ++refI; + while (refLine[refI] <= a0 && refLine[refI] < w) { + refI += 2; + } + } + break; case twoDimVertL1: - mmrAddPixelsNeg(refLine[b1i] - 1, blackPixels, codingLine, &a0i, w); - blackPixels ^= 1; - if (codingLine[a0i] < w) { - if (b1i > 0) { - --b1i; - } else { - ++b1i; - } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < w) { - b1i += 2; - } - } - break; - case EOF: - mmrAddPixels(w, 0, codingLine, &a0i, w); - break; + a0 = codingLine[codingI++] = refLine[refI] - 1; + if (refI > 0) { + --refI; + } else { + ++refI; + } + while (refLine[refI] <= a0 && refLine[refI] < w) { + refI += 2; + } + break; + case twoDimVertL2: + a0 = codingLine[codingI++] = refLine[refI] - 2; + if (refI > 0) { + --refI; + } else { + ++refI; + } + while (refLine[refI] <= a0 && refLine[refI] < w) { + refI += 2; + } + break; + case twoDimVertL3: + a0 = codingLine[codingI++] = refLine[refI] - 3; + if (refI > 0) { + --refI; + } else { + ++refI; + } + while (refLine[refI] <= a0 && refLine[refI] < w) { + refI += 2; + } + break; default: error(getPos(), "Illegal code in JBIG2 MMR bitmap data"); - mmrAddPixels(w, 0, codingLine, &a0i, w); break; } - } + } while (a0 < w); + codingLine[codingI++] = w; // convert the run lengths to a bitmap line i = 0; - while (1) { + while (codingLine[i] < w) { for (x = codingLine[i]; x < codingLine[i+1]; ++x) { bitmap->setPixel(x, y); } - if (codingLine[i+1] >= w || codingLine[i+2] >= w) { - break; - } i += 2; } } @@ -2888,9 +2706,7 @@ JBIG2Bitmap *JBIG2Stream::readGenericBitmap(GBool mmr, int w, int h, ltp = !ltp; } if (ltp) { - if (y > 0) { - bitmap->duplicateRow(y, y-1); - } + bitmap->duplicateRow(y, y-1); continue; } } @@ -3093,8 +2909,8 @@ void JBIG2Stream::readGenericRefinementRegionSeg(Guint segNum, GBool imm, return; } if (nRefSegs == 1) { - if (!(seg = findSegment(refSegs[0])) || - seg->getType() != jbig2SegBitmap) { + seg = findSegment(refSegs[0]); + if (seg->getType() != jbig2SegBitmap) { error(getPos(), "Bad bitmap reference in JBIG2 generic refinement segment"); return; } @@ -3188,10 +3004,6 @@ JBIG2Bitmap *JBIG2Stream::readGenericRefinementRegion(int w, int h, tpgrCX2 = refBitmap->nextPixel(&tpgrCXPtr2); tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); - } else { - tpgrCXPtr0.p = tpgrCXPtr1.p = tpgrCXPtr2.p = NULL; // make gcc happy - tpgrCXPtr0.shift = tpgrCXPtr1.shift = tpgrCXPtr2.shift = 0; - tpgrCXPtr0.x = tpgrCXPtr1.x = tpgrCXPtr2.x = 0; } for (x = 0; x < w; ++x) { @@ -3263,10 +3075,6 @@ JBIG2Bitmap *JBIG2Stream::readGenericRefinementRegion(int w, int h, tpgrCX2 = refBitmap->nextPixel(&tpgrCXPtr2); tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); tpgrCX2 = (tpgrCX2 << 1) | refBitmap->nextPixel(&tpgrCXPtr2); - } else { - tpgrCXPtr0.p = tpgrCXPtr1.p = tpgrCXPtr2.p = NULL; // make gcc happy - tpgrCXPtr0.shift = tpgrCXPtr1.shift = tpgrCXPtr2.shift = 0; - tpgrCXPtr0.x = tpgrCXPtr1.x = tpgrCXPtr2.x = 0; } for (x = 0; x < w; ++x) { diff --git a/thirdparty/xpdf/xpdf-3.02/xpdf/JBIG2Stream.h b/thirdparty/xpdf/xpdf-3.02/xpdf/JBIG2Stream.h index f3443b3d..210d927a 100644 --- a/thirdparty/xpdf/xpdf-3.02/xpdf/JBIG2Stream.h +++ b/thirdparty/xpdf/xpdf-3.02/xpdf/JBIG2Stream.h @@ -78,10 +78,6 @@ private: Guint *refSegs, Guint nRefSegs); void readGenericRegionSeg(Guint segNum, GBool imm, GBool lossless, Guint length); - void mmrAddPixels(int a1, int blackPixels, - int *codingLine, int *a0i, int w); - void mmrAddPixelsNeg(int a1, int blackPixels, - int *codingLine, int *a0i, int w); JBIG2Bitmap *readGenericBitmap(GBool mmr, int w, int h, int templ, GBool tpgdOn, GBool useSkip, JBIG2Bitmap *skip, diff --git a/thirdparty/xpdf/xpdf-3.02/xpdf/PSOutputDev.cc b/thirdparty/xpdf/xpdf-3.02/xpdf/PSOutputDev.cc index d5970aeb..8a1a9e9a 100644 --- a/thirdparty/xpdf/xpdf-3.02/xpdf/PSOutputDev.cc +++ b/thirdparty/xpdf/xpdf-3.02/xpdf/PSOutputDev.cc @@ -4301,7 +4301,7 @@ void PSOutputDev::doImageL1Sep(GfxImageColorMap *colorMap, width, -height, height); // allocate a line buffer - lineBuf = (Guchar *)gmallocn(width, 4); + lineBuf = (Guchar *)gmalloc(4 * width); // set up to process the data stream imgStr = new ImageStream(str, width, colorMap->getNumPixelComps(), diff --git a/thirdparty/xpdf/xpdf-3.02/xpdf/Stream.cc b/thirdparty/xpdf/xpdf-3.02/xpdf/Stream.cc index 368eddba..68abafa7 100644 --- a/thirdparty/xpdf/xpdf-3.02/xpdf/Stream.cc +++ b/thirdparty/xpdf/xpdf-3.02/xpdf/Stream.cc @@ -323,10 +323,6 @@ ImageStream::ImageStream(Stream *strA, int widthA, int nCompsA, int nBitsA) { } else { imgLineSize = nVals; } - if (width > INT_MAX / nComps) { - // force a call to gmallocn(-1,...), which will throw an exception - imgLineSize = -1; - } imgLine = (Guchar *)gmallocn(imgLineSize, sizeof(Guchar)); imgIdx = nVals; } @@ -414,13 +410,15 @@ StreamPredictor::StreamPredictor(Stream *strA, int predictorA, ok = gFalse; nVals = width * nComps; + if (width <= 0 || nComps <= 0 || nBits <= 0 || + nComps >= INT_MAX / nBits || + width >= INT_MAX / nComps / nBits || + nVals * nBits + 7 < 0) { + return; + } pixBytes = (nComps * nBits + 7) >> 3; rowBytes = ((nVals * nBits + 7) >> 3) + pixBytes; - if (width <= 0 || nComps <= 0 || nBits <= 0 || - nComps > gfxColorMaxComps || - nBits > 16 || - width >= INT_MAX / nComps || // check for overflow in nVals - nVals >= (INT_MAX - 7) / nBits) { // check for overflow in rowBytes + if (rowBytes <= 0) { return; } predLine = (Guchar *)gmalloc(rowBytes); @@ -1247,26 +1245,23 @@ CCITTFaxStream::CCITTFaxStream(Stream *strA, int encodingA, GBool endOfLineA, columns = columnsA; if (columns < 1) { columns = 1; - } else if (columns > INT_MAX - 2) { - columns = INT_MAX - 2; + } + if (columns + 4 <= 0) { + columns = INT_MAX - 4; } rows = rowsA; endOfBlock = endOfBlockA; black = blackA; - // 0 <= codingLine[0] < codingLine[1] < ... < codingLine[n] = columns - // ---> max codingLine size = columns + 1 - // refLine has one extra guard entry at the end - // ---> max refLine size = columns + 2 - codingLine = (int *)gmallocn(columns + 1, sizeof(int)); - refLine = (int *)gmallocn(columns + 2, sizeof(int)); + refLine = (short *)gmallocn(columns + 3, sizeof(short)); + codingLine = (short *)gmallocn(columns + 2, sizeof(short)); eof = gFalse; row = 0; nextLine2D = encoding < 0; inputBits = 0; - codingLine[0] = columns; - a0i = 0; - outputBits = 0; + codingLine[0] = 0; + codingLine[1] = refLine[2] = columns; + a0 = 1; buf = EOF; } @@ -1285,9 +1280,9 @@ void CCITTFaxStream::reset() { row = 0; nextLine2D = encoding < 0; inputBits = 0; - codingLine[0] = columns; - a0i = 0; - outputBits = 0; + codingLine[0] = 0; + codingLine[1] = columns; + a0 = 1; buf = EOF; // skip any initial zero bits and end-of-line marker, and get the 2D @@ -1304,228 +1299,209 @@ void CCITTFaxStream::reset() { } } -inline void CCITTFaxStream::addPixels(int a1, int blackPixels) { - if (a1 > codingLine[a0i]) { - if (a1 > columns) { - error(getPos(), "CCITTFax row is wrong length (%d)", a1); - err = gTrue; - a1 = columns; - } - if ((a0i & 1) ^ blackPixels) { - ++a0i; - } - codingLine[a0i] = a1; - } -} - -inline void CCITTFaxStream::addPixelsNeg(int a1, int blackPixels) { - if (a1 > codingLine[a0i]) { - if (a1 > columns) { - error(getPos(), "CCITTFax row is wrong length (%d)", a1); - err = gTrue; - a1 = columns; - } - if ((a0i & 1) ^ blackPixels) { - ++a0i; - } - codingLine[a0i] = a1; - } else if (a1 < codingLine[a0i]) { - if (a1 < 0) { - error(getPos(), "Invalid CCITTFax code"); - err = gTrue; - a1 = 0; - } - while (a0i > 0 && a1 <= codingLine[a0i - 1]) { - --a0i; - } - codingLine[a0i] = a1; - } -} - int CCITTFaxStream::lookChar() { short code1, code2, code3; - int b1i, blackPixels, i, bits; - GBool gotEOL; + int a0New; + GBool err, gotEOL; + int ret; + int bits, i; - if (buf != EOF) { - return buf; + // if at eof just return EOF + if (eof && codingLine[a0] >= columns) { + return EOF; } // read the next row - if (outputBits == 0) { - - // if at eof just return EOF - if (eof) { - return EOF; - } - - err = gFalse; + err = gFalse; + if (codingLine[a0] >= columns) { // 2-D encoding if (nextLine2D) { + // state: + // a0New = current position in coding line (0 <= a0New <= columns) + // codingLine[a0] = last change in coding line + // (black-to-white if a0 is even, + // white-to-black if a0 is odd) + // refLine[b1] = next change in reference line of opposite color + // to a0 + // invariants: + // 0 <= codingLine[a0] <= a0New + // <= refLine[b1] <= refLine[b1+1] <= columns + // 0 <= a0 <= columns+1 + // refLine[0] = 0 + // refLine[n] = refLine[n+1] = columns + // -- for some 1 <= n <= columns+1 + // end condition: + // 0 = codingLine[0] <= codingLine[1] < codingLine[2] < ... + // < codingLine[n-1] < codingLine[n] = columns + // -- where 1 <= n <= columns+1 for (i = 0; codingLine[i] < columns; ++i) { refLine[i] = codingLine[i]; } - refLine[i++] = columns; - refLine[i] = columns; - codingLine[0] = 0; - a0i = 0; - b1i = 0; - blackPixels = 0; - // invariant: - // refLine[b1i-1] <= codingLine[a0i] < refLine[b1i] < refLine[b1i+1] - // <= columns - // exception at left edge: - // codingLine[a0i = 0] = refLine[b1i = 0] = 0 is possible - // exception at right edge: - // refLine[b1i] = refLine[b1i+1] = columns is possible - while (codingLine[a0i] < columns) { + refLine[i] = refLine[i + 1] = columns; + b1 = 1; + a0New = codingLine[a0 = 0] = 0; + do { code1 = getTwoDimCode(); switch (code1) { case twoDimPass: - addPixels(refLine[b1i + 1], blackPixels); - if (refLine[b1i + 1] < columns) { - b1i += 2; + if (refLine[b1] < columns) { + a0New = refLine[b1 + 1]; + b1 += 2; } break; case twoDimHoriz: - code1 = code2 = 0; - if (blackPixels) { + if ((a0 & 1) == 0) { + code1 = code2 = 0; do { - code1 += code3 = getBlackCode(); + code1 += code3 = getWhiteCode(); } while (code3 >= 64); do { - code2 += code3 = getWhiteCode(); + code2 += code3 = getBlackCode(); } while (code3 >= 64); } else { + code1 = code2 = 0; do { - code1 += code3 = getWhiteCode(); + code1 += code3 = getBlackCode(); } while (code3 >= 64); do { - code2 += code3 = getBlackCode(); + code2 += code3 = getWhiteCode(); } while (code3 >= 64); } - addPixels(codingLine[a0i] + code1, blackPixels); - if (codingLine[a0i] < columns) { - addPixels(codingLine[a0i] + code2, blackPixels ^ 1); - } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; - } - break; - case twoDimVertR3: - addPixels(refLine[b1i] + 3, blackPixels); - blackPixels ^= 1; - if (codingLine[a0i] < columns) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; + if (code1 > 0 || code2 > 0) { + if (a0New + code1 <= columns) { + codingLine[a0 + 1] = a0New + code1; + } else { + codingLine[a0 + 1] = columns; + } + ++a0; + if (codingLine[a0] + code2 <= columns) { + codingLine[a0 + 1] = codingLine[a0] + code2; + } else { + codingLine[a0 + 1] = columns; + } + ++a0; + a0New = codingLine[a0]; + while (refLine[b1] <= a0New && refLine[b1] < columns) { + b1 += 2; } } break; - case twoDimVertR2: - addPixels(refLine[b1i] + 2, blackPixels); - blackPixels ^= 1; - if (codingLine[a0i] < columns) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; + case twoDimVert0: + if (refLine[b1] < columns) { + a0New = codingLine[++a0] = refLine[b1]; + ++b1; + while (refLine[b1] <= a0New && refLine[b1] < columns) { + b1 += 2; } + } else { + a0New = codingLine[++a0] = columns; } break; case twoDimVertR1: - addPixels(refLine[b1i] + 1, blackPixels); - blackPixels ^= 1; - if (codingLine[a0i] < columns) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; + if (refLine[b1] + 1 < columns) { + a0New = codingLine[++a0] = refLine[b1] + 1; + ++b1; + while (refLine[b1] <= a0New && refLine[b1] < columns) { + b1 += 2; } + } else { + a0New = codingLine[++a0] = columns; } break; - case twoDimVert0: - addPixels(refLine[b1i], blackPixels); - blackPixels ^= 1; - if (codingLine[a0i] < columns) { - ++b1i; - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; + case twoDimVertL1: + if (refLine[b1] - 1 > a0New || (a0 == 0 && refLine[b1] == 1)) { + a0New = codingLine[++a0] = refLine[b1] - 1; + --b1; + while (refLine[b1] <= a0New && refLine[b1] < columns) { + b1 += 2; } } break; - case twoDimVertL3: - addPixelsNeg(refLine[b1i] - 3, blackPixels); - blackPixels ^= 1; - if (codingLine[a0i] < columns) { - if (b1i > 0) { - --b1i; - } else { - ++b1i; - } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; + case twoDimVertR2: + if (refLine[b1] + 2 < columns) { + a0New = codingLine[++a0] = refLine[b1] + 2; + ++b1; + while (refLine[b1] <= a0New && refLine[b1] < columns) { + b1 += 2; } + } else { + a0New = codingLine[++a0] = columns; } break; case twoDimVertL2: - addPixelsNeg(refLine[b1i] - 2, blackPixels); - blackPixels ^= 1; - if (codingLine[a0i] < columns) { - if (b1i > 0) { - --b1i; - } else { - ++b1i; - } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; + if (refLine[b1] - 2 > a0New || (a0 == 0 && refLine[b1] == 2)) { + a0New = codingLine[++a0] = refLine[b1] - 2; + --b1; + while (refLine[b1] <= a0New && refLine[b1] < columns) { + b1 += 2; } } break; - case twoDimVertL1: - addPixelsNeg(refLine[b1i] - 1, blackPixels); - blackPixels ^= 1; - if (codingLine[a0i] < columns) { - if (b1i > 0) { - --b1i; - } else { - ++b1i; + case twoDimVertR3: + if (refLine[b1] + 3 < columns) { + a0New = codingLine[++a0] = refLine[b1] + 3; + ++b1; + while (refLine[b1] <= a0New && refLine[b1] < columns) { + b1 += 2; } - while (refLine[b1i] <= codingLine[a0i] && refLine[b1i] < columns) { - b1i += 2; + } else { + a0New = codingLine[++a0] = columns; + } + break; + case twoDimVertL3: + if (refLine[b1] - 3 > a0New || (a0 == 0 && refLine[b1] == 3)) { + a0New = codingLine[++a0] = refLine[b1] - 3; + --b1; + while (refLine[b1] <= a0New && refLine[b1] < columns) { + b1 += 2; } } break; case EOF: - addPixels(columns, 0); eof = gTrue; - break; + codingLine[a0 = 0] = columns; + return EOF; default: error(getPos(), "Bad 2D code %04x in CCITTFax stream", code1); - addPixels(columns, 0); err = gTrue; break; } - } + } while (codingLine[a0] < columns); // 1-D encoding } else { - codingLine[0] = 0; - a0i = 0; - blackPixels = 0; - while (codingLine[a0i] < columns) { + codingLine[a0 = 0] = 0; + while (1) { code1 = 0; - if (blackPixels) { - do { - code1 += code3 = getBlackCode(); - } while (code3 >= 64); - } else { - do { - code1 += code3 = getWhiteCode(); - } while (code3 >= 64); + do { + code1 += code3 = getWhiteCode(); + } while (code3 >= 64); + codingLine[a0+1] = codingLine[a0] + code1; + ++a0; + if (codingLine[a0] >= columns) { + break; } - addPixels(codingLine[a0i] + code1, blackPixels); - blackPixels ^= 1; + code2 = 0; + do { + code2 += code3 = getBlackCode(); + } while (code3 >= 64); + codingLine[a0+1] = codingLine[a0] + code2; + ++a0; + if (codingLine[a0] >= columns) { + break; + } + } + } + + if (codingLine[a0] != columns) { + error(getPos(), "CCITTFax row is wrong length (%d)", codingLine[a0]); + // force the row to be the correct length + while (codingLine[a0] > columns) { + --a0; } + codingLine[++a0] = columns; + err = gTrue; } // byte-align the row @@ -1586,17 +1562,14 @@ int CCITTFaxStream::lookChar() { // this if we know the stream contains end-of-line markers because // the "just plow on" technique tends to work better otherwise } else if (err && endOfLine) { - while (1) { - code1 = lookBits(13); + do { if (code1 == EOF) { eof = gTrue; return EOF; } - if ((code1 >> 1) == 0x001) { - break; - } eatBits(1); - } + code1 = lookBits(13); + } while ((code1 >> 1) != 0x001); eatBits(12); if (encoding > 0) { eatBits(1); @@ -1604,11 +1577,11 @@ int CCITTFaxStream::lookChar() { } } - // set up for output - if (codingLine[0] > 0) { - outputBits = codingLine[a0i = 0]; - } else { - outputBits = codingLine[a0i = 1]; + a0 = 0; + outputBits = codingLine[1] - codingLine[0]; + if (outputBits == 0) { + a0 = 1; + outputBits = codingLine[2] - codingLine[1]; } ++row; @@ -1616,43 +1589,39 @@ int CCITTFaxStream::lookChar() { // get a byte if (outputBits >= 8) { - buf = (a0i & 1) ? 0x00 : 0xff; - outputBits -= 8; - if (outputBits == 0 && codingLine[a0i] < columns) { - ++a0i; - outputBits = codingLine[a0i] - codingLine[a0i - 1]; + ret = ((a0 & 1) == 0) ? 0xff : 0x00; + if ((outputBits -= 8) == 0) { + ++a0; + if (codingLine[a0] < columns) { + outputBits = codingLine[a0 + 1] - codingLine[a0]; + } } } else { bits = 8; - buf = 0; + ret = 0; do { if (outputBits > bits) { - buf <<= bits; - if (!(a0i & 1)) { - buf |= 0xff >> (8 - bits); - } - outputBits -= bits; + i = bits; bits = 0; - } else { - buf <<= outputBits; - if (!(a0i & 1)) { - buf |= 0xff >> (8 - outputBits); + if ((a0 & 1) == 0) { + ret |= 0xff >> (8 - i); } + outputBits -= i; + } else { + i = outputBits; bits -= outputBits; + if ((a0 & 1) == 0) { + ret |= (0xff >> (8 - i)) << bits; + } outputBits = 0; - if (codingLine[a0i] < columns) { - ++a0i; - outputBits = codingLine[a0i] - codingLine[a0i - 1]; - } else if (bits > 0) { - buf <<= bits; - bits = 0; + ++a0; + if (codingLine[a0] < columns) { + outputBits = codingLine[a0 + 1] - codingLine[a0]; } } - } while (bits); - } - if (black) { - buf ^= 0xff; + } while (bits > 0 && codingLine[a0] < columns); } + buf = black ? (ret ^ 0xff) : ret; return buf; } @@ -1694,9 +1663,6 @@ short CCITTFaxStream::getWhiteCode() { code = 0; // make gcc happy if (endOfBlock) { code = lookBits(12); - if (code == EOF) { - return 1; - } if ((code >> 5) == 0) { p = &whiteTab1[code]; } else { @@ -1709,9 +1675,6 @@ short CCITTFaxStream::getWhiteCode() { } else { for (n = 1; n <= 9; ++n) { code = lookBits(n); - if (code == EOF) { - return 1; - } if (n < 9) { code <<= 9 - n; } @@ -1723,9 +1686,6 @@ short CCITTFaxStream::getWhiteCode() { } for (n = 11; n <= 12; ++n) { code = lookBits(n); - if (code == EOF) { - return 1; - } if (n < 12) { code <<= 12 - n; } @@ -1751,12 +1711,9 @@ short CCITTFaxStream::getBlackCode() { code = 0; // make gcc happy if (endOfBlock) { code = lookBits(13); - if (code == EOF) { - return 1; - } if ((code >> 7) == 0) { p = &blackTab1[code]; - } else if ((code >> 9) == 0 && (code >> 7) != 0) { + } else if ((code >> 9) == 0) { p = &blackTab2[(code >> 1) - 64]; } else { p = &blackTab3[code >> 7]; @@ -1768,9 +1725,6 @@ short CCITTFaxStream::getBlackCode() { } else { for (n = 2; n <= 6; ++n) { code = lookBits(n); - if (code == EOF) { - return 1; - } if (n < 6) { code <<= 6 - n; } @@ -1782,9 +1736,6 @@ short CCITTFaxStream::getBlackCode() { } for (n = 7; n <= 12; ++n) { code = lookBits(n); - if (code == EOF) { - return 1; - } if (n < 12) { code <<= 12 - n; } @@ -1798,9 +1749,6 @@ short CCITTFaxStream::getBlackCode() { } for (n = 10; n <= 13; ++n) { code = lookBits(n); - if (code == EOF) { - return 1; - } if (n < 13) { code <<= 13 - n; } @@ -2015,12 +1963,6 @@ void DCTStream::reset() { // allocate a buffer for the whole image bufWidth = ((width + mcuWidth - 1) / mcuWidth) * mcuWidth; bufHeight = ((height + mcuHeight - 1) / mcuHeight) * mcuHeight; - if (bufWidth <= 0 || bufHeight <= 0 || - bufWidth > INT_MAX / bufWidth / (int)sizeof(int)) { - error(getPos(), "Invalid image size in DCT stream"); - y = height; - return; - } for (i = 0; i < numComps; ++i) { frameBuf[i] = (int *)gmallocn(bufWidth * bufHeight, sizeof(int)); memset(frameBuf[i], 0, bufWidth * bufHeight * sizeof(int)); @@ -3096,11 +3038,6 @@ GBool DCTStream::readScanInfo() { } scanInfo.firstCoeff = str->getChar(); scanInfo.lastCoeff = str->getChar(); - if (scanInfo.firstCoeff < 0 || scanInfo.lastCoeff > 63 || - scanInfo.firstCoeff > scanInfo.lastCoeff) { - error(getPos(), "Bad DCT coefficient numbers in scan info block"); - return gFalse; - } c = str->getChar(); scanInfo.ah = (c >> 4) & 0x0f; scanInfo.al = c & 0x0f; diff --git a/thirdparty/xpdf/xpdf-3.02/xpdf/Stream.h b/thirdparty/xpdf/xpdf-3.02/xpdf/Stream.h index 0bf79110..85a84691 100644 --- a/thirdparty/xpdf/xpdf-3.02/xpdf/Stream.h +++ b/thirdparty/xpdf/xpdf-3.02/xpdf/Stream.h @@ -528,15 +528,13 @@ private: int row; // current row int inputBuf; // input buffer int inputBits; // number of bits in input buffer - int *codingLine; // coding line changing elements - int *refLine; // reference line changing elements - int a0i; // index into codingLine - GBool err; // error on current line + short *refLine; // reference line changing elements + int b1; // index into refLine + short *codingLine; // coding line changing elements + int a0; // index into codingLine int outputBits; // remaining ouput bits int buf; // character buffer - void addPixels(int a1, int black); - void addPixelsNeg(int a1, int black); short getTwoDimCode(); short getWhiteCode(); short getBlackCode(); diff --git a/thirdparty/xpdf/xpdf-3.02/xpdf/XRef.cc b/thirdparty/xpdf/xpdf-3.02/xpdf/XRef.cc index 1f399e9a..6a5b6c83 100644 --- a/thirdparty/xpdf/xpdf-3.02/xpdf/XRef.cc +++ b/thirdparty/xpdf/xpdf-3.02/xpdf/XRef.cc @@ -52,8 +52,6 @@ public: // generation 0. ObjectStream(XRef *xref, int objStrNumA); - GBool isOk() { return ok; } - ~ObjectStream(); // Return the object number of this object stream. @@ -69,7 +67,6 @@ private: int nObjects; // number of objects in the stream Object *objs; // the objects (length = nObjects) int *objNums; // the object numbers (length = nObjects) - GBool ok; }; ObjectStream::ObjectStream(XRef *xref, int objStrNumA) { @@ -83,7 +80,6 @@ ObjectStream::ObjectStream(XRef *xref, int objStrNumA) { nObjects = 0; objs = NULL; objNums = NULL; - ok = gFalse; if (!xref->fetch(objStrNum, 0, &objStr)->isStream()) { goto err1; @@ -109,13 +105,6 @@ ObjectStream::ObjectStream(XRef *xref, int objStrNumA) { goto err1; } - // this is an arbitrary limit to avoid integer overflow problems - // in the 'new Object[nObjects]' call (Acrobat apparently limits - // object streams to 100-200 objects) - if (nObjects > 1000000) { - error(-1, "Too many objects in an object stream"); - goto err1; - } objs = new Object[nObjects]; objNums = (int *)gmallocn(nObjects, sizeof(int)); offsets = (int *)gmallocn(nObjects, sizeof(int)); @@ -172,10 +161,10 @@ ObjectStream::ObjectStream(XRef *xref, int objStrNumA) { } gfree(offsets); - ok = gTrue; err1: objStr.free(); + return; } ObjectStream::~ObjectStream() { @@ -848,11 +837,6 @@ Object *XRef::fetch(int num, int gen, Object *obj) { delete objStr; } objStr = new ObjectStream(this, e->offset); - if (!objStr->isOk()) { - delete objStr; - objStr = NULL; - goto err; - } } objStr->getObject(e->gen, num, obj); break;