diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2021-06-08 22:22:19 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2021-06-08 22:22:19 +0000 |
commit | 57fbf7422b87c19c0458531f042aef0250d42aea (patch) | |
tree | 7b8b7a91691efb61c4cda67e7746c8aa8fe91d9f /Build/source/texk/dvipdfm-x | |
parent | d555686463897ab048255c1cd733b133cf76d0b6 (diff) |
Replace the changes in rev.59429 for the problem causing segmentation fault (S. Hirata).
git-svn-id: svn://tug.org/texlive/trunk@59525 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/dvipdfm-x')
-rw-r--r-- | Build/source/texk/dvipdfm-x/ChangeLog | 11 | ||||
-rwxr-xr-x | Build/source/texk/dvipdfm-x/configure | 22 | ||||
-rw-r--r-- | Build/source/texk/dvipdfm-x/configure.ac | 2 | ||||
-rw-r--r-- | Build/source/texk/dvipdfm-x/pdfencoding.c | 130 |
4 files changed, 78 insertions, 87 deletions
diff --git a/Build/source/texk/dvipdfm-x/ChangeLog b/Build/source/texk/dvipdfm-x/ChangeLog index d73eb487ebc..2126228791b 100644 --- a/Build/source/texk/dvipdfm-x/ChangeLog +++ b/Build/source/texk/dvipdfm-x/ChangeLog @@ -1,3 +1,14 @@ +2021-06-09 Shunsaku Hirata <shunsaku.hirata74@gmail.com> + + * pdfencoding.c: Replace the changes made on 2021-06-02. The + segmentation fault problem was introduced by the changes in + rev.7557 which were not just problematic but also making it + unclear that it's not possible to freely choose which + encodings to use as the base encoding. Remove useless base + encoding entry which was causing the problem from the + pdf_encoding struct. + * configure.ac: Version 20210609. + 2021-06-05 Shunsaku Hirata <shunsaku.hirata74@gmail.com> * pdfximage.c: Improved error messages when PDF/PS inclusion diff --git a/Build/source/texk/dvipdfm-x/configure b/Build/source/texk/dvipdfm-x/configure index 44e188f1265..a9883238369 100755 --- a/Build/source/texk/dvipdfm-x/configure +++ b/Build/source/texk/dvipdfm-x/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for dvipdfm-x (TeX Live) 20210605. +# Generated by GNU Autoconf 2.69 for dvipdfm-x (TeX Live) 20210609. # # Report bugs to <dvipdfmx@tug.org>. # @@ -590,8 +590,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='dvipdfm-x (TeX Live)' PACKAGE_TARNAME='dvipdfm-x--tex-live-' -PACKAGE_VERSION='20210605' -PACKAGE_STRING='dvipdfm-x (TeX Live) 20210605' +PACKAGE_VERSION='20210609' +PACKAGE_STRING='dvipdfm-x (TeX Live) 20210609' PACKAGE_BUGREPORT='dvipdfmx@tug.org' PACKAGE_URL='' @@ -1350,7 +1350,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures dvipdfm-x (TeX Live) 20210605 to adapt to many kinds of systems. +\`configure' configures dvipdfm-x (TeX Live) 20210609 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1421,7 +1421,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of dvipdfm-x (TeX Live) 20210605:";; + short | recursive ) echo "Configuration of dvipdfm-x (TeX Live) 20210609:";; esac cat <<\_ACEOF @@ -1551,7 +1551,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -dvipdfm-x (TeX Live) configure 20210605 +dvipdfm-x (TeX Live) configure 20210609 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2390,7 +2390,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by dvipdfm-x (TeX Live) $as_me 20210605, which was +It was created by dvipdfm-x (TeX Live) $as_me 20210609, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -8072,7 +8072,7 @@ fi # Define the identity of the package. PACKAGE='dvipdfm-x--tex-live-' - VERSION='20210605' + VERSION='20210609' cat >>confdefs.h <<_ACEOF @@ -14741,7 +14741,7 @@ Usage: $0 [OPTIONS] Report bugs to <bug-libtool@gnu.org>." lt_cl_version="\ -dvipdfm-x (TeX Live) config.lt 20210605 +dvipdfm-x (TeX Live) config.lt 20210609 configured by $0, generated by GNU Autoconf 2.69. Copyright (C) 2011 Free Software Foundation, Inc. @@ -16631,7 +16631,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by dvipdfm-x (TeX Live) $as_me 20210605, which was +This file was extended by dvipdfm-x (TeX Live) $as_me 20210609, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -16701,7 +16701,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -dvipdfm-x (TeX Live) config.status 20210605 +dvipdfm-x (TeX Live) config.status 20210609 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/Build/source/texk/dvipdfm-x/configure.ac b/Build/source/texk/dvipdfm-x/configure.ac index 84414848454..0e104125cf2 100644 --- a/Build/source/texk/dvipdfm-x/configure.ac +++ b/Build/source/texk/dvipdfm-x/configure.ac @@ -8,7 +8,7 @@ dnl This file is free software; the copyright holder dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl -AC_INIT([dvipdfm-x (TeX Live)], [20210605], [dvipdfmx@tug.org]) +AC_INIT([dvipdfm-x (TeX Live)], [20210609], [dvipdfmx@tug.org]) AC_PREREQ([2.65]) AC_CONFIG_SRCDIR([agl.c]) AC_CONFIG_AUX_DIR([../../build-aux]) diff --git a/Build/source/texk/dvipdfm-x/pdfencoding.c b/Build/source/texk/dvipdfm-x/pdfencoding.c index f1206aeb8f8..5714dfe4858 100644 --- a/Build/source/texk/dvipdfm-x/pdfencoding.c +++ b/Build/source/texk/dvipdfm-x/pdfencoding.c @@ -1,6 +1,6 @@ /* This is dvipdfmx, an eXtended version of dvipdfm by Mark A. Wicks. - Copyright (C) 2002-2020 by Jin-Hwan Cho, Matthias Franz, and Shunsaku Hirata, + Copyright (C) 2002-2021 by Jin-Hwan Cho, Matthias Franz, and Shunsaku Hirata, the dvipdfmx project team. Copyright (C) 1998, 1999 by Mark A. Wicks <mwicks@kettering.edu> @@ -40,8 +40,7 @@ #include "pdfencoding.h" static int is_similar_charset (char **encoding, const char **encoding2); -static pdf_obj *make_encoding_differences (char **encoding, char **baseenc, - const char *is_used); +static pdf_obj *make_encoding_differences (char **encoding, const char **baseenc, const char *is_used); static const char *MacRomanEncoding[256]; static const char *MacExpertEncoding[256]; @@ -67,24 +66,19 @@ static const char *ISOLatin1Encoding[256]; typedef struct pdf_encoding { - char *ident; + char *ident; - char *enc_name; - int flags; - char *glyphs[256]; /* ".notdef" must be represented as NULL */ - char is_used[256]; + char *enc_name; + int flags; + char *glyphs[256]; /* ".notdef" must be represented as NULL */ + char is_used[256]; - int baseenc_id; - pdf_obj *tounicode; + pdf_obj *tounicode; - pdf_obj *resource; + pdf_obj *resource; } pdf_encoding; -static int pdf_encoding_new_encoding (const char *enc_name, - const char *ident, - const char **encoding_vec, - const char *baseenc_name, - int flags); +static int pdf_encoding_new_encoding (const char *enc_name, const char *ident, const char **encoding_vec, int flags); static void pdf_init_encoding_struct (pdf_encoding *encoding) @@ -98,35 +92,36 @@ pdf_init_encoding_struct (pdf_encoding *encoding) memset(encoding->glyphs, 0, 256*sizeof(char *)); memset(encoding->is_used, 0, 256); - encoding->tounicode = NULL; + encoding->tounicode = NULL; - encoding->baseenc_id= -1; - encoding->resource = NULL; + encoding->resource = NULL; - encoding->flags = 0; + encoding->flags = 0; return; } -/* Creates the PDF Encoding entry for the encoding. - * If baseenc is non-null, it is used as BaseEncoding entry. - */ +/* Creates the PDF Encoding entry for the encoding. */ static pdf_obj * -create_encoding_resource (pdf_encoding *encoding, pdf_encoding *baseenc) +create_encoding_resource (char **enc_vec, const char *baseenc_name, const char **baseenc_vec, char *is_used) { pdf_obj *differences; - ASSERT(encoding); - ASSERT(!encoding->resource); - differences = make_encoding_differences(encoding->glyphs, - baseenc ? baseenc->glyphs : NULL, - encoding->is_used); - + ASSERT(enc_vec); + + if (baseenc_name) { + if (strcmp(baseenc_name, "MacRomanEncoding") && + strcmp(baseenc_name, "MacExpertEncoding") && + strcmp(baseenc_name, "WinAnsiEncoding")) { + ERROR("Invalid encoding name for BaseEncoding: %s", baseenc_name); + } + } + + differences = make_encoding_differences(enc_vec, baseenc_vec, is_used); if (differences) { pdf_obj *resource = pdf_new_dict(); - if (baseenc) - pdf_add_dict(resource, pdf_new_name("BaseEncoding"), - pdf_link_obj(baseenc->resource)); + if (baseenc_name) + pdf_add_dict(resource, pdf_new_name("BaseEncoding"), pdf_new_name(baseenc_name)); pdf_add_dict(resource, pdf_new_name("Differences"), differences); return resource; } else { @@ -141,7 +136,7 @@ create_encoding_resource (pdf_encoding *encoding, pdf_encoding *baseenc) * * Actually these fonts will be ignored in pdffont.c. */ - return baseenc ? pdf_link_obj(baseenc->resource) : NULL; + return baseenc_name ? pdf_new_name(baseenc_name) : NULL; } } @@ -212,8 +207,7 @@ is_similar_charset (char **enc_vec, const char **enc_vec2) int code, same = 0; for (code = 0; code < 256; code++) - if (!(enc_vec[code] && strcmp(enc_vec[code], enc_vec2[code])) - && ++same >= 64) + if (!(enc_vec[code] && strcmp(enc_vec[code], enc_vec2[code])) && ++same >= 64) /* is 64 a good level? */ return 1; @@ -225,7 +219,7 @@ is_similar_charset (char **enc_vec, const char **enc_vec2) * are actually used in the document are considered. */ static pdf_obj * -make_encoding_differences (char **enc_vec, char **baseenc, const char *is_used) +make_encoding_differences (char **enc_vec, const char **baseenc, const char *is_used) { pdf_obj *differences = NULL; int code, count = 0; @@ -329,8 +323,7 @@ load_encoding_file (const char *filename) for (code = 0; code < 256; code++) { enc_vec[code] = pdf_name_value(pdf_get_array(encoding_array, code)); } - enc_id = pdf_encoding_new_encoding(enc_name ? pdf_name_value(enc_name) : NULL, - filename, enc_vec, NULL, 0); + enc_id = pdf_encoding_new_encoding(enc_name ? pdf_name_value(enc_name) : NULL, filename, enc_vec, 0); if (enc_name) { if (dpx_conf.verbose_level > 1) @@ -370,12 +363,9 @@ pdf_init_encodings (void) /* * PDF Predefined Encodings */ - pdf_encoding_new_encoding("WinAnsiEncoding", "WinAnsiEncoding", - WinAnsiEncoding, NULL, FLAG_IS_PREDEFINED); - pdf_encoding_new_encoding("MacRomanEncoding", "MacRomanEncoding", - MacRomanEncoding, NULL, FLAG_IS_PREDEFINED); - pdf_encoding_new_encoding("MacExpertEncoding", "MacExpertEncoding", - MacExpertEncoding, NULL, FLAG_IS_PREDEFINED); + pdf_encoding_new_encoding("WinAnsiEncoding", "WinAnsiEncoding", WinAnsiEncoding, FLAG_IS_PREDEFINED); + pdf_encoding_new_encoding("MacRomanEncoding", "MacRomanEncoding", MacRomanEncoding, FLAG_IS_PREDEFINED); + pdf_encoding_new_encoding("MacExpertEncoding", "MacExpertEncoding", MacExpertEncoding, FLAG_IS_PREDEFINED); return; } @@ -394,12 +384,10 @@ pdf_init_encodings (void) */ static int -pdf_encoding_new_encoding (const char *enc_name, const char *ident, - const char **encoding_vec, - const char *baseenc_name, int flags) +pdf_encoding_new_encoding (const char *enc_name, const char *ident, const char **encoding_vec, int flags) { - int enc_id, code; - + int enc_id; + int code; pdf_encoding *encoding; enc_id = enc_cache.count; @@ -419,25 +407,11 @@ pdf_encoding_new_encoding (const char *enc_name, const char *ident, encoding->flags = flags; - for (code = 0; code < 256; code++) + for (code = 0; code < 256; code++) { if (encoding_vec[code] && strcmp(encoding_vec[code], ".notdef")) { encoding->glyphs[code] = NEW(strlen(encoding_vec[code])+1, char); strcpy(encoding->glyphs[code], encoding_vec[code]); } - - if (!baseenc_name && !(flags & FLAG_IS_PREDEFINED) - && is_similar_charset(encoding->glyphs, WinAnsiEncoding)) { - /* Dvipdfmx default setting. */ - baseenc_name = "WinAnsiEncoding"; - } - - /* TODO: make base encoding configurable */ - if (baseenc_name) { - int baseenc_id = pdf_encoding_findresource(baseenc_name); - if (baseenc_id < 0 || !pdf_encoding_is_predefined(baseenc_id)) - ERROR("Illegal base encoding %s for encoding %s\n", - baseenc_name, encoding->enc_name); - encoding->baseenc_id = baseenc_id; } if (flags & FLAG_IS_PREDEFINED) @@ -455,24 +429,30 @@ void pdf_encoding_complete (void) for (enc_id = 0; enc_id < enc_cache.count; enc_id++) { if (!pdf_encoding_is_predefined(enc_id)) { - pdf_encoding *encoding = &enc_cache.encodings[enc_id]; + pdf_encoding *encoding = &enc_cache.encodings[enc_id]; + const char *baseenc_name = NULL; + const char **baseenc_vec = NULL; /* Section 5.5.4 of the PDF 1.5 reference says that the encoding * of a Type 3 font must be completely described by a Differences * array, but implementation note 56 explains that this is rather * an incorrect implementation in Acrobat 4 and earlier. Hence, * we do use a base encodings for PDF versions >= 1.3. */ - int with_base = !(encoding->flags & FLAG_USED_BY_TYPE3) - || pdf_check_version(1, 4) >= 0; - pdf_encoding *baseenc = (encoding->baseenc_id < 0) ? - NULL : &enc_cache.encodings[encoding->baseenc_id]; + int with_base = (!(encoding->flags & FLAG_USED_BY_TYPE3) || pdf_check_version(1, 4) >= 0); + ASSERT(!encoding->resource); - encoding->resource = create_encoding_resource(encoding, - with_base ? baseenc : NULL); ASSERT(!encoding->tounicode); - encoding->tounicode = pdf_create_ToUnicode_CMap(encoding->enc_name, - encoding->glyphs, - encoding->is_used); + + /* Currently possible values are WinAnsiEncoding or NULL for BaseEncoding */ + if (!(encoding->flags & FLAG_IS_PREDEFINED) && with_base) { + if (is_similar_charset(encoding->glyphs, WinAnsiEncoding)) { + /* Dvipdfmx default setting. */ + baseenc_name = "WinAnsiEncoding"; + baseenc_vec = WinAnsiEncoding; + } + } + encoding->resource = create_encoding_resource(encoding->glyphs, baseenc_name, baseenc_vec, encoding->is_used); + encoding->tounicode = pdf_create_ToUnicode_CMap(encoding->enc_name, encoding->glyphs, encoding->is_used); } } } |