GraphicsMagick: ReadJP2Image(): Switch back to using jas_image_d...
GraphicsMagick Commits <[email protected]>
| Newsgroups | gmane.comp.video.graphicsmagick.cvs |
|---|---|
| Message-ID | <mailman.9498.1643572126.1940.graphicsmagick-commit@lists.sourceforge.net> |
changeset 523c681ea873 in /hg/GraphicsMagick details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=523c681ea873 summary: ReadJP2Image(): Switch back to using jas_image_decode() diffstat: ChangeLog | 6 ++ VisualMagick/installer/inc/version.isx | 4 +- coders/jp2.c | 88 +++++++++++++++---------------- configure | 93 ++++++++++++++++++++++++++++++++- configure.ac | 4 +- magick/magick_config.h.in | 9 --- magick/version.h | 4 +- www/Changelog.html | 5 + 8 files changed, 149 insertions(+), 64 deletions(-) diffs (351 lines): diff -r f364bc76becf -r 523c681ea873 ChangeLog --- a/ChangeLog Fri Jan 28 14:26:25 2022 -0600 +++ b/ChangeLog Sun Jan 30 13:48:31 2022 -0600 @@ -1,3 +1,9 @@ +2022-01-30 Bob Friesenhahn <[email protected]> + + * coders/jp2.c (ReadJP2Image): Jasper 3.0.0 hid the functions we + were using so switch back to using jas_image_decode(), but in a + more secure way than before. + 2022-01-28 Bob Friesenhahn <[email protected]> * www/download.rst: Document how to retrieve the PGP signing key diff -r f364bc76becf -r 523c681ea873 VisualMagick/installer/inc/version.isx --- a/VisualMagick/installer/inc/version.isx Fri Jan 28 14:26:25 2022 -0600 +++ b/VisualMagick/installer/inc/version.isx Sun Jan 30 13:48:31 2022 -0600 @@ -10,5 +10,5 @@ #define public MagickPackageName "GraphicsMagick" #define public MagickPackageVersion "1.4" -#define public MagickPackageVersionAddendum ".020220128" -#define public MagickPackageReleaseDate "snapshot-20220128" +#define public MagickPackageVersionAddendum ".020220130" +#define public MagickPackageReleaseDate "snapshot-20220130" diff -r f364bc76becf -r 523c681ea873 coders/jp2.c --- a/coders/jp2.c Fri Jan 28 14:26:25 2022 -0600 +++ b/coders/jp2.c Sun Jan 30 13:48:31 2022 -0600 @@ -834,46 +834,43 @@ "JP2 options = \"%s\"", options); } - /* JP2, JPC, PGX (J2C is an alias for JPC) */ -#if HAVE_JP2_DECODE - /* JPEG-2000 JP2 File Format Syntax */ - if (jp2_hdr) - { - /* jas_image_t *jp2_decode(jas_stream_t *in, const char *optstr); */ - (void) LogMagickEvent(CoderEvent,GetMagickModule(), - "Decoding JP2..."); - jp2_image=jp2_decode(jp2_stream,options); - } -#endif /* if HAVE_JP2_DECODE */ -#if HAVE_JPC_DECODE - /* JPEG-2000 Code Stream Syntax */ - if (jpc_hdr) - { - /* jas_image_t *jpc_decode(jas_stream_t *in, const char *optstr); */ - (void) LogMagickEvent(CoderEvent,GetMagickModule(), - "Decoding JPC..."); - jp2_image=jpc_decode(jp2_stream,options); - } -#endif /* if HAVE_JPC_DECODE */ -#if HAVE_PGX_DECODE - /* JPEG-2000 VM Format */ - if (pgx_hdr) - { - /* jas_image_t *pgx_decode(jas_stream_t *in, const char *optstr); */ - (void) LogMagickEvent(CoderEvent,GetMagickModule(), - "Decoding PGX..."); - jp2_image=pgx_decode(jp2_stream,options); - } -#endif /* if HAVE_PGX_DECODE */ + /* + Decode + */ + { + int + jas_fmt = -1; + + const char * + jas_fmt_str = NULL; + + if (jp2_hdr) + jas_fmt_str = "jp2"; + else if (jpc_hdr) + jas_fmt_str = "jpc"; + else if (pgx_hdr) + jas_fmt_str = "pgx"; + + if (jas_fmt_str != (const char *) NULL) + { + jas_fmt = jas_image_strtofmt(jas_fmt_str); + if (-1 != jas_fmt) + { + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + "Decoding %s...", jas_fmt_str); + jp2_image=jas_image_decode(jp2_stream,jas_fmt,options); + } + else + { + (void) LogMagickEvent(CoderEvent,GetMagickModule(), + "JasPer does not support format %s!", + jas_fmt_str); + } + } + } MagickFreeMemory(options); - /* - Using jas_image_decode() makes us subject to Jasper's own format - determination, which may include file formats we don't want to - support via Jasper. - */ - /* jp2_image=jas_image_decode(jp2_stream,-1,options); */ if (jp2_image == (jas_image_t *) NULL) ThrowJP2ReaderException(DelegateError,UnableToDecodeImageFile,image); @@ -1195,7 +1192,7 @@ (void) strlcpy(version,"JasPer ",sizeof(version)); (void) strlcat(version,jas_getversion(),sizeof(version)); -#if HAVE_JPC_DECODE +#if !defined(EXCLUDE_JP2_SUPPORT) || defined(JAS_ENABLE_JP2_CODEC) entry=SetMagickInfo("J2C"); entry->description="JPEG-2000 Code Stream Syntax"; entry->version=version; @@ -1208,9 +1205,9 @@ entry->encoder=(EncoderHandler) WriteJP2Image; entry->coder_class=StableCoderClass; (void) RegisterMagickInfo(entry); -#endif /* if HAVE_JPC_DECODE */ +#endif /* !defined(EXCLUDE_JP2_SUPPORT) || defined(JAS_ENABLE_JP2_CODEC) */ -#if HAVE_JP2_DECODE +#if !defined(EXCLUDE_JP2_SUPPORT) || defined(JAS_ENABLE_JP2_CODEC) entry=SetMagickInfo("JP2"); entry->description="JPEG-2000 JP2 File Format Syntax"; entry->version=version; @@ -1223,9 +1220,9 @@ entry->encoder=(EncoderHandler) WriteJP2Image; entry->coder_class=StableCoderClass; (void) RegisterMagickInfo(entry); -#endif /* HAVE_JP2_DECODE */ +#endif /* !defined(EXCLUDE_JP2_SUPPORT) || defined(JAS_ENABLE_JP2_CODEC) */ -#if HAVE_JPC_DECODE +#if !defined(EXCLUDE_JPC_SUPPORT) || defined(JAS_ENABLE_JPC_CODEC) entry=SetMagickInfo("JPC"); entry->description="JPEG-2000 Code Stream Syntax"; entry->version=version; @@ -1238,9 +1235,9 @@ entry->encoder=(EncoderHandler) WriteJP2Image; entry->coder_class=StableCoderClass; (void) RegisterMagickInfo(entry); -#endif /* if HAVE_JPC_DECODE */ +#endif /* !defined(EXCLUDE_JPC_SUPPORT) || defined(JAS_ENABLE_JPC_CODEC) */ -#if HAVE_PGX_DECODE +#if !defined(EXCLUDE_PGX_SUPPORT) || defined(JAS_ENABLE_PGX_CODEC) entry=SetMagickInfo("PGX"); entry->description="JPEG-2000 VM Format"; entry->version=version; @@ -1253,7 +1250,8 @@ entry->encoder=(EncoderHandler) WriteJP2Image; entry->coder_class=UnstableCoderClass; (void) RegisterMagickInfo(entry); -#endif /* if HAVE_PGX_DECODE */ +#endif /* !defined(EXCLUDE_PGX_SUPPORT) || defined(JAS_ENABLE_PGX_CODEC) */ + #endif /* if defined(HasJP2) */ } diff -r f364bc76becf -r 523c681ea873 configure --- a/configure Fri Jan 28 14:26:25 2022 -0600 +++ b/configure Sun Jan 30 13:48:31 2022 -0600 @@ -26159,6 +26159,90 @@ failed=`expr $failed + 1` fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jas_image_strtofmt in -ljasper" >&5 +$as_echo_n "checking for jas_image_strtofmt in -ljasper... " >&6; } +if ${ac_cv_lib_jasper_jas_image_strtofmt+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ljasper $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char jas_image_strtofmt (); +int +main () +{ +return jas_image_strtofmt (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_jasper_jas_image_strtofmt=yes +else + ac_cv_lib_jasper_jas_image_strtofmt=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jasper_jas_image_strtofmt" >&5 +$as_echo "$ac_cv_lib_jasper_jas_image_strtofmt" >&6; } +if test "x$ac_cv_lib_jasper_jas_image_strtofmt" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jas_image_decode in -ljasper" >&5 +$as_echo_n "checking for jas_image_decode in -ljasper... " >&6; } +if ${ac_cv_lib_jasper_jas_image_decode+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ljasper $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char jas_image_decode (); +int +main () +{ +return jas_image_decode (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_jasper_jas_image_decode=yes +else + ac_cv_lib_jasper_jas_image_decode=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jasper_jas_image_decode" >&5 +$as_echo "$ac_cv_lib_jasper_jas_image_decode" >&6; } +if test "x$ac_cv_lib_jasper_jas_image_decode" = xyes; then : + passed=`expr $passed + 1` +else + failed=`expr $failed + 1` +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if JPEG version 2 support package is complete" >&5 $as_echo_n "checking if JPEG version 2 support package is complete... " >&6; } if test $passed -gt 0 @@ -26177,13 +26261,12 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_jp2='yes' - for ac_func in jas_init_library jp2_decode jpc_decode pgx_decode + for ac_func in jas_init_library do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + ac_fn_c_check_func "$LINENO" "jas_init_library" "ac_cv_func_jas_init_library" +if test "x$ac_cv_func_jas_init_library" = xyes; then : cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_JAS_INIT_LIBRARY 1 _ACEOF fi diff -r f364bc76becf -r 523c681ea873 configure.ac --- a/configure.ac Fri Jan 28 14:26:25 2022 -0600 +++ b/configure.ac Sun Jan 30 13:48:31 2022 -0600 @@ -2241,6 +2241,8 @@ passed=0 AC_CHECK_HEADER([jasper/jasper.h],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`]) AC_CHECK_LIB([jasper],[jas_stream_fopen],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],) + AC_CHECK_LIB([jasper],[jas_image_strtofmt],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],) + AC_CHECK_LIB([jasper],[jas_image_decode],[passed=`expr $passed + 1`],[failed=`expr $failed + 1`],) AC_MSG_CHECKING([if JPEG version 2 support package is complete]) if test $passed -gt 0 then @@ -2254,7 +2256,7 @@ AC_DEFINE([HasJP2],[1],[Define if you have JPEG version 2 "Jasper" library]) AC_MSG_RESULT([yes]) have_jp2='yes' - AC_CHECK_FUNCS([jas_init_library jp2_decode jpc_decode pgx_decode]) + AC_CHECK_FUNCS([jas_init_library]) fi else AC_MSG_RESULT([no]) diff -r f364bc76becf -r 523c681ea873 magick/magick_config.h.in --- a/magick/magick_config.h.in Fri Jan 28 14:26:25 2022 -0600 +++ b/magick/magick_config.h.in Sun Jan 30 13:48:31 2022 -0600 @@ -149,12 +149,6 @@ /* Define to 1 if you have the `jas_init_library' function. */ #undef HAVE_JAS_INIT_LIBRARY -/* Define to 1 if you have the `jp2_decode' function. */ -#undef HAVE_JP2_DECODE - -/* Define to 1 if you have the `jpc_decode' function. */ -#undef HAVE_JPC_DECODE - /* Define if you have the <lcms2.h> header file. */ #undef HAVE_LCMS2_H @@ -211,9 +205,6 @@ /* Define to 1 if you have the `pclose' function. */ #undef HAVE_PCLOSE -/* Define to 1 if you have the `pgx_decode' function. */ -#undef HAVE_PGX_DECODE - /* Define to 1 if you have the `poll' function. */ #undef HAVE_POLL diff -r f364bc76becf -r 523c681ea873 magick/version.h --- a/magick/version.h Fri Jan 28 14:26:25 2022 -0600 +++ b/magick/version.h Sun Jan 30 13:48:31 2022 -0600 @@ -38,8 +38,8 @@ #define MagickLibVersion 0x262300 #define MagickLibVersionText "1.4" #define MagickLibVersionNumber 26,23,0 -#define MagickChangeDate "20220128" -#define MagickReleaseDate "snapshot-20220128" +#define MagickChangeDate "20220130" +#define MagickReleaseDate "snapshot-20220130" /* The MagickLibInterfaceNewest and MagickLibInterfaceOldest defines diff -r f364bc76becf -r 523c681ea873 www/Changelog.html --- a/www/Changelog.html Fri Jan 28 14:26:25 2022 -0600 +++ b/www/Changelog.html Sun Jan 30 13:48:31 2022 -0600 @@ -35,6 +35,11 @@ <div class="document"> +<p>2022-01-30 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p> +<blockquote> +* coders/jp2.c (ReadJP2Image): Jasper 3.0.0 hid the functions we +were using so switch back to using jas_image_decode(), but in a +more secure way than before.</blockquote> <p>2022-01-28 Bob Friesenhahn <<a class="reference external" href="mailto:bfriesen%40simple.dallas.tx.us">bfriesen<span>@</span>simple<span>.</span>dallas<span>.</span>tx<span>.</span>us</a>></p> <blockquote> * www/download.rst: Document how to retrieve the PGP signing key