yoyaのメモ

2016/06/13(Mon) ImageMagick-6.9.4-9差分

[]ImageMagick-6.9.4-9差分

ImageMagick-6.9.4-8差分 - yoyaのメモの続き

The latest release of ImageMagick is version 6.9.4-9

まとめ

- 有限精度 ε (epsilon) を 1.0e-15 から 1.0e-12 に変更

差分

ChangeLog の分

2016-06-09 6.9.4-9 Cristy <quetzlzacatenango@image...>

139c139
< #define MagickEpsilon  (1.0e-15)
---
> #define MagickEpsilon  (1.0e-12)
ChangeLogにない差分
  • magick/cache.c
    • info->buffer が NULL の時にリリース処理を行わない。
193a194,195
>   if (info->buffer != (cl_mem) NULL)
>   {
195a198
>   }
  • magick/effect.c
    • LocalContrastImage で異常系の処理
>   status=MagickTrue;
2586a2591,2592
>       if (status == MagickFalse)
>         continue;
2591a2598,2602
>       if (p == (const PixelPacket *) NULL)
>         {
>           status=MagickFalse;
>           continue;
>         }
2660a2672,2673
>       if (status == MagickFalse)
>         continue;
2666a2680,2684
>       if ((p == (const PixelPacket *) NULL) || (q == (PixelPacket *) NULL))
>         {
>           status=MagickFalse;
>           continue;
>         }
2699a2718,2719
>       if (SyncCacheViewAuthenticPixels(contrast_view,exception) == MagickFalse)
>         status=MagickFalse;
2705a2726,2727
>   if (status == MagickFalse)
>     contrast_image=DestroyImage(contrast_image);
  • magick/magick-baseconfig.h
    • 幾つかの 1 define を削除。
381,383c381
< #ifndef MAGICKCORE_HAVE_LCMS2_H
< #define MAGICKCORE_HAVE_LCMS2_H 1
< #endif
---
> /* #undef HAVE_LCMS2_H */
1131,1133c1129
< #ifndef MAGICKCORE_JPEG_DELEGATE
< #define MAGICKCORE_JPEG_DELEGATE 1
< #endif
---
> /* #undef JPEG_DELEGATE */
1136,1138c1132
< #ifndef MAGICKCORE_LCMS_DELEGATE
< #define MAGICKCORE_LCMS_DELEGATE 1
< #endif
---
> /* #undef LCMS_DELEGATE */

ChangeLog

2016-06-09  6.9.4-9 Cristy  <quetzlzacatenango@image...>
  * Backoff finite precision epsilon (reference
    https://github.com/ImageMagick/ImageMagick/issues/215).

[]MagickEpsilon の歴史

ImageMagick-6.9.4-9 で MagickEpsilon が変わったのが気になって、今までのバージョンを調べてみました。

バージョンによる推移

  • 4 系は grep Epsilon で引っかからず。NoiseEpsilon は別ものなので除外。
  • 5系は 5.2.6 〜 5.5.7 が手元にあったけど一部抜けあり。
バージョンQ8Q16以上ヘッダ
4系 (grepで見つからず)
5.2.6 〜 5.5.7 (1.0e-12) 同左 magick/studio.h
6.0.0 〜 6.2.2 (1.0e-6) (1.0e-10) magick/ImageMagick.h
6.2.3 〜 6.6.0-0 (1.0e-6) (1.0e-10) magick/magick-type.h
6.6.0-1 〜 6.6.0-9 (2.0*1.1920928955078125e-07) (2.0*2.2204460492503131e-16) 同上
6.6.0-10 〜 6.7.7-5 (1.0e-6) (1.0e-10) 同上
6.7.7-6 〜 6.7.7-9 (1.0e-7) (1.0e-16) 同上
6.7.7-10 (1.192093e-07) (2.220446e-16) 同上
6.7.8-0 〜 6.7.8-7 (2.220446e-16) 同左 同上
6.7.8-8 〜 6.8.0-2 (1.0e-16) 同左 同上
6.8.0-3 〜 6.9.4-8 (1.0e-15) 同左 同上
6.9.4-9 〜 (1.0e-16) 同左 同上
リスト
  • 4 系
    • (grep Epsilon で引っかからず。NoiseEpsilon は汎用的じゃないので除外)
  • 5系 (5.2.6 〜 5.5.7 のうち手元にある分) (magick/studio.h)
    • (1.0e-12)
  • 6.0.0 〜 6.2.2 (magick/ImageMagick.h)
    • Q8 だけ (1.0e-6)、Q16,32,64 は (1.0e-10)
  • 6.2.3 〜 6.6.0-0 (magick/magick-type.h)
    • Q8 だけ (1.0e-6)、Q16,32,64 は (1.0e-10)
  • 6.6.0-1 〜 6.6.0-9
    • Q8 だけ (2.0*1.1920928955078125e-07) 、Q16,32,64 は (2.0*2.2204460492503131e-16)
  • 6.6.0-10 〜 6.7.7-5
    • Q8 だけ (1.0e-6)、Q16,32,64 は (1.0e-10)
  • 6.7.7-6 〜 6.7.7-9
    • Q8 だけ (1.0e-7)、Q16,32,64 は (1.0e-16)
  • 6.7.7-10
    • Q8 だけ (1.192093e-07) 、Q16,32,64 は (2.220446e-16)
  • 6.7.8-0 〜 6.7.8-7
    • (2.220446e-16)
  • 6.7.8-8 〜 6.8.0-2
    • (1.0e-16)
  • 6.8.0-3 〜 6.9.4-8
    • (1.0e-15)
  • 6.9.4-9 〜
    • (1.0e-16)

2016/06/08(Wed) ImageMagick-6.9.4-8差分

[]ImageMagick-6.9.4-8差分

ImageMagick-6.9.4-7差分 - yoyaのメモの続き

The latest release of ImageMagick is version 6.9.4-8

まとめ

  • ヘッダ取り込みのべき等保証のマクロの先頭に _ をつけてたのを外しました。
    • (例) magick/magick-config.h
18,19c18,19
< #ifndef _MAGICKCORE_MAGICK_CONFIG_H
< #define _MAGICKCORE_MAGICK_CONFIG_H
---
> #ifndef MAGICKCORE_MAGICK_CONFIG_H
> #define MAGICKCORE_MAGICK_CONFIG_H

差分

ChangeLog の分
  • policy で indirect 読み込みの拒否、許可ポリシーを削除、例) convert caption:@mytext.txt ...
    • config/policy.xml
66d65
<       <!-- <policy domain="path" rights="none" pattern="@*" /> -->
67a67
>       <policy domain="path" rights="none" pattern="@*"/>  <!-- indirect reads
181d180
<     offset,
185a185
>     offset,
398c398,399
<           if (offset+((size_t) operand*number_planes) > pixel_info_length)
---
>           if ((offset < 0) ||
>               (offset+((size_t) operand*number_planes) > pixel_info_length))
429,430c430,431
<           p=pixels+offset;
<           if (offset+((size_t) operand*number_planes) > pixel_info_length)
---
>           if ((offset < 0) ||
>               (offset+((size_t) operand*number_planes) > pixel_info_length))
436a438
>           p=pixels+offset;

-- coders/pes.c

    • ブロックの中、使用する色パレットの残りの color も初期化
512a513
>   {
513a515,516
>     blocks[i].color=PESColor;
> 
ChangeLogにない差分
  • coders/label.c
    • label がない時に必要ない処理をスルー
143,144c143,145
<     if (((image->columns == 0) || (image->rows == 0)) ||
<         (fabs(image_info->pointsize) < MagickEpsilon))
---
>     if ((strlen(label) > 0) &&
>         (((image->columns == 0) || (image->rows == 0)) ||
>          (fabs(image_info->pointsize) < MagickEpsilon)))
  • coders/pnm.c
    • パース途中で EOF が来た時の対処。
456a457,458
>             if (EOFBlob(image) != MagickFalse)
>               break;
469a472,473
>           if (EOFBlob(image) != MagickFalse)
>             break;
496a501,502
>             if (EOFBlob(image) != MagickFalse)
>               break;
510a517,518
>           if (EOFBlob(image) != MagickFalse)
>             break;
536a545,546
>             if (EOFBlob(image) != MagickFalse)
>               break;
552a563,564
>           if (EOFBlob(image) != MagickFalse)
>             break;
  • coders/tiff.c
    • 書き込みに失敗した時の異常系処理。
389a390
>   status=MagickTrue;
391c392,393
<     (void) fputc(c,file);
---
>     if (fputc(c,file) != c)
>       status=MagickFalse;
412a415,416
>   if (status == MagickFalse)
>     image=DestroyImage(image);

ChangeLog

2016-06-05  6.9.4-8 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 6.9.4-8, GIT revision 18406:ba4ad2d:20160607.

2016-06-04  6.9.4-8 Cristy  <quetzlzacatenango@image...>
  * Deny indirect reads by policy, remove policy to permit, e.g.,
          convert caption:@mytext.txt ...
  * RLE check for pixel offset less than 0 (heap overflow report from Craig
    Young).
  * Properly initialze PES blocks (reference
    https://github.com/ImageMagick/ImageMagick/issues/213).

2016/06/04(Sat) ImageMagick-6.9.4-7差分

[]ImageMagick-6.9.4-7差分

ImageMagick-6.9.4-6差分 - yoyaのメモの続き

The latest release of ImageMagick is version 6.9.4-7

まとめ

差分

ChangeLog の分
ChangeLogにない差分
  • /coders/psd.c
    • PDFQuantum に 12 を足してる
2545c2545,2549
<         if ((q+PSDQuantum(count)+12) < (datum+length-16))
---
>         ssize_t
>           quantum;
>
>         quantum=PSDQuantum(count)+12;
>         if ((quantum >= 12) && (q+quantum < (datum+length-16)))
2547,2549c2551,2552
<             (void) CopyMagickMemory(q,q+PSDQuantum(count)+12,length-
<               (PSDQuantum(count)+12)-(q-datum));
<             SetStringInfoLength(bim_profile,length-(PSDQuantum(count)+12));
---
>             (void) CopyMagickMemory(q,q+quantum,length-quantum-(q-datum));
>             SetStringInfoLength(bim_profile,length-quantum);
  • coders/sun.c
59a60
> #include "magick/memory-private.h"
266d266
<     data_length,
424a425,426
>     if (HeapOverflowSanityCheck(sun_info.width,sun_info.depth) != MagickFalse)
>       ThrowReaderException(CorruptImageError,"ImproperImageHeader");
<         while ((n=ReadBlob(image,MaxTextExtent,message)) != 0)
---
>         while ((n=ReadBlob(image,MaxTextExtent-1,message)) != 0)
2978a2979
>           message[n]='\0';
3201c3202,3203
<   n=ReadBlob(image,MaxTextExtent,message);
---
>   n=ReadBlob(image,MaxTextExtent-1,message);
>   message[n]='\0';
3206c3208
<       while ((n=ReadBlob(image,MaxTextExtent,message)) != 0)
---
>       while ((n=ReadBlob(image,MaxTextExtent-1,message)) != 0)
  • magick/draw.c
    • number_points が MagickSizeType に収まるかのチェック?
2895c2899,2900
<       if (primitive_info == (PrimitiveInfo *) NULL)
---
>       if ((primitive_info == (PrimitiveInfo *) NULL) ||
>           (number_points != (MagickSizeType) ((size_t) number_points)))
    • GetMagickInfo のエラー処理
>       magick_info=GetMagickInfo(magic,sans_exception);
>       if ((magick_info != (const MagickInfo *) NULL) &&
>           (IsMagickConflict(magic) == MagickFalse))
2829d2833
<   magick_info=GetMagickInfo(magic,sans_exception);
2833a2838,2839
    • affirm のエラーチェック
>   if (image_info->affirm != MagickFalse)
>     {
2835a2842
>     }
  • magick/module.c
    • GetMagickModulePath で / を許可しない
static MagickBooleanType GetMagickModulePath(const char *filename,
  MagickModuleType module_type,char *path,ExceptionInfo *exception)
<略>
>   if (strchr(filename,'/') != (char *) NULL)
>     return(MagickFalse);

-

    • InitOpenCLEnvInternal のエラー処理
1423d1422
<     status = MagickFalse;
2364a2364,2366
>   MagickBooleanType
>     status;
>
2397c2399
<   InitOpenCLEnvInternal(clEnv,exception);
---
>   status=InitOpenCLEnvInternal(clEnv,exception);
2401a2404
>   if (status != MagickFalse)
2451a2455
>           if (event_count > 0)
2474a2479,2480
>
>   if (status != MagickFalse)
2475a2482,2483
>   else
>     *(AccelerateScoreType*)device->score=42;

ChangeLog

2016-06-03  6.9.4-7 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 6.9.4-7, GIT revision 10847:339f803:20160602.

2016-06-02  6.9.4-7 Cristy  <quetzlzacatenango@image...>
  * Fix small memory leak (patch provided by Андрей Черный).
  * Coder path traversal is not authorized (bug report provided by
    Masaaki Chida).
  * Turn off alpha channel for the compare difference image (reference
    http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=29828).

2016/06/01(Wed) ImageMagick-6.9.4-6差分

[]ImageMagick-6.9.4-6差分

ImageMagick-6.9.4-5差分 - yoyaのメモの続き

The latest release of ImageMagick is version 6.9.4-6

まとめ

差分

ChangeLog の分

  • configure スクリプトで --enable-pipes をサポート。ファイル名に | でパイプが可能に。
  • configure スクリプトで --enable-indirect-readsをサポート。ファイル名に @ で インダイレクト読み込みが可能に。

ChangeLogにない差分

<   (void) SetEnvironmentVariable("DCR_CL_PLATFORM","");
<   (void) SetEnvironmentVariable("DCR_CL_DEVICE","");
---
>   (void) SetEnvironmentVariable("DCR_CL_PLATFORM",NULL);
>   (void) SetEnvironmentVariable("DCR_CL_DEVICE",NULL);
  • coders/ept.c
    • HEADER として30バイト存在しない場合のチェックをいれた。
218c218
<   if (offset < 0)
---
>   if (offset < 30)
225c225
<   if (offset < 0)
---
>   if (offset < 30)
  • coders/sun.c
    • data_length と pixels_lengths をローカル変数で処理 (高速化というよりリファインに見える)
265a266
>     data_length,
267c268,269
<     height;
---
>     height,
>     pixels_length;
    • たくさんあるので一例だけ
448,449c463
<       (void) DecodeImage(sun_data,sun_info.length,sun_pixels,bytes_per_line*
<          height);
---
>       (void) DecodeImage(sun_data,data_length,sun_pixels,pixels_length);

ChangeLog

2016-05-31  6.9.4-6 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 6.9.4-6, GIT revision 18334:97775b5:20160531.

2016-05-31  6.9.4-6 Cristy  <quetzlzacatenango@image...>
  * Support configure script --enable-pipes option to enable pipes (|) in
    filenames.
  * Support configure script --enable-indirect-reads option to enable
    indirect reads (@) in filenames.

2016/05/31(Tue) ImageMagick-6.9.4-5差分

[]ImageMagick-6.9.4-5差分

ImageMagick-6.9.4-4差分 - yoyaのメモの続き

The latest release of ImageMagick is version 6.9.4-5

まとめ

  • OpenCL の非同期化 (多分並列実行可能なルートが増えた)
  • TEXT coder のセキュリティ改善
  • -annotate の stroke オフセット問題の修正
  • DCM 読み出しの data の都合で失敗するのをチェックするの追加

差分

ChangeLog の分

ChangeLogにない差分

(調査中)

ChangeLog

2016-05-30  6.9.4-5 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 6.9.4-5, GIT revision 18321:5511ef5:20160530.

2016-05-28  6.9.4-5 Dirk Lemstra <dirk@lem.....org>
  * Most OpenCL operations are now executed asynchronous.

2016-05-25  6.9.4-5 Cristy  <quetzlzacatenango@image...>
  * Security improvements to TEXT coder broke it (reference
    https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=29754).
  * Fix stroke offset problem for -annotate (reference
    https://www.imagemagick.org/discourse-server/viewtopic.php?f=3&t=29626).
  * Add additional checks to DCM reader to prevent data-driven faults (bug
    report from Hanno B&#246;ck).