ImageMagick-7.0.8-37差分

ImageMagick-7.0.8-37差分

http://www.imagemagick.org/script/download.php
The latest release of ImageMagick is version 7.0.8-37

6 系同時リリースは ImageMagick-6.9.10-37

まとめ

(調査中)

気になる事

差分

ChangeLog にない差分

(調査中)

ChangeLog

2019-04-03  7.0.8-37 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 7.0.8-37, GIT revision 15470:477216fd7:20190403

2019-04-03  7.0.8-37 Cristy  <quetzlzacatenango@image...>
  * Fixed -virtual-pixel option (reference
    https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=35789).

ImageMagick-7.0.8-36差分

ImageMagick-7.0.8-36差分

http://www.imagemagick.org/script/download.php
The latest release of ImageMagick is version 7.0.8-36

6 系同時リリースは ImageMagick-6.9.10-36

差分

ChangeLog にない差分

(調査中)

ChangeLog

2019-03-31  7.0.8-36 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 7.0.8-36, GIT revision 15464:3a928224d:20190331

2019-03-27  7.0.8-36 Cristy  <quetzlzacatenango@image...>
  * Fixed a number of issues (reference
    https://github.com/ImageMagick/ImageMagick/issues).

ImageMagick-7.0.8-35差分

ImageMagick-7.0.8-35差分

http://www.imagemagick.org/script/download.php
The latest release of ImageMagick is version 7.0.8-35

6 系同時リリースは ImageMagick-6.9.10-35

まとめ

  • -draw "image DstOver 〜" で composite operator の DstOver 相当の結果にならない不具合修正
    • draw が DstOver に対応してない問題なので、-compose dstover で回避できる
  • その他 issue 消化
気になる事

差分

-

ChangeLog にない差分

  • MagickCore/cache.c
    • SetPixelCacheNexusPixels の引数に magick_restrict 修飾子(?)がついた
138,140c138,141
<   *SetPixelCacheNexusPixels(const CacheInfo *,const MapMode,const ssize_t,
<     const ssize_t,const size_t,const size_t,const MagickBooleanType,
<     NexusInfo *,ExceptionInfo *) magick_hot_spot;
---
>   *SetPixelCacheNexusPixels(const CacheInfo *magick_restrict,const MapMode,
>     const ssize_t,const ssize_t,const size_t,const size_t,
>     const MagickBooleanType,NexusInfo *magick_restrict,ExceptionInfo *)
>     magick_hot_spot;
  • coders/ps.c
    • CVE-2019-9956: PSファイル PopHexPixel 脆弱性の修正
                q=PopHexPixel(hex_digits,(size_t) MagickMin(length,0xff),q);
                  MagickMin(length,0xff),q);	                if ((q-pixels+6) >= 80)
                  {
                    *q++='\n';
                    (void) WriteBlob(image,q-pixels,pixels);
                    q=pixels;
                  }

ChangeLog

2019-03-24  7.0.8-35 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 7.0.8-35, GIT revision 15440:4a0a88e41:20190324

2019-03-23  7.0.8-35 Cristy  <quetzlzacatenango@image...>
  * -draw image DstOver is now responsive to the composite operator (reference
    https://imagemagick.org/discourse-server/viewtopic.php?f=1&t=35650).
  * Fixed a number of issues (reference
    https://github.com/ImageMagick/ImageMagick/issues).

ImageMagick-7.0.8-34差分

ImageMagick-7.0.8-34差分

http://www.imagemagick.org/script/download.php
The latest release of ImageMagick is version 7.0.8-34

6 系同時リリースは ImageMagick-6.9.10-34

まとめ

  • Fuzzing 修正。そう ChangeLog にあるが実は -33 で入ってる => coders/mat.c のファイル終了チェック追加
  • ピクセルキャッシュとリソースセマフォ管理で性能改善
気になる事
  • PixelCache の縦横サイズに ResourceLimit を有効にした

差分

  • 各リソースひとつひとつにロックを割り当てる。それらが競合しないように。
    • MagickCore/resource.c
73a74,75
> #define NumberOfResourceTypes  \
>   (sizeof(resource_semaphore)/sizeof(*resource_semaphore))
141c143,156
<   *resource_semaphore = (SemaphoreInfo *) NULL;
---
>   *resource_semaphore[] = {
>      (SemaphoreInfo *) NULL,
>      (SemaphoreInfo *) NULL,
>      (SemaphoreInfo *) NULL,
>      (SemaphoreInfo *) NULL,
>      (SemaphoreInfo *) NULL,
>      (SemaphoreInfo *) NULL,
>      (SemaphoreInfo *) NULL,
>      (SemaphoreInfo *) NULL,
>      (SemaphoreInfo *) NULL,
>      (SemaphoreInfo *) NULL,
>      (SemaphoreInfo *) NULL,
>      (SemaphoreInfo *) NULL
>   };
  • TIFF がうまく開けなかった時の例外レポート
1331a1332,1337
>   if (exception->severity > ErrorException)
>     {
>       TIFFClose(tiff);
>       image=DestroyImageList(image);
>       return((Image *) NULL);
>     }
  • 沢山の修正。未初期化値、整数オーバーフロー、メモリ溢れ、タイムアウト。(OSS Fuzz の貢献)
    • -33 の coders/mat.c 修正がそれ。ファイルの終了判定を増やしてる。

ChangeLog にない差分

  • MagickCore/cache.c
    • PixelCache の縦横サイズに ResourceLimit が有効にした
224a225,226
>   cache_info->width_limit=GetMagickResourceLimit(WidthResource);
>   cache_info->height_limit=GetMagickResourceLimit(HeightResource);

ChangeLog

2019-03-11  7.0.8-34 Cristy  <quetzlzacatenango@image...>
  * Associate one lock with each resource.
  * Report exception if opening TIFF did not work out.
  * Fixed numerous use of uninitialized values, integer overflow, memory
    exceeded, and timeouts (credit to OSS Fuzz).

ImageMagick-7.0.8-33差分

ImageMagick-7.0.8-33差分

http://www.imagemagick.org/script/download.php
The latest release of ImageMagick is version 7.0.8-33

6 系同時リリースは ImageMagick-6.9.10-33

まとめ

  • JPEG の DCT メソッドデフォルトが以前はQuality:1〜90 の時(つまり殆どの場合) IFACT だったのが、元々の ISLOW に戻った。
気になる事
  • JPEG で DCT メソッド未指定で普通に使う(q:1〜90)とき以前は IDCT だったのをやめた。JDCT_ISLOW のまま。
  • draw.c で NegateImage を呼ぶのをやめてる箇所

差分

  • リサイズした後、primitive drawing structure を初期化。
    • MagickCore/draw.c
2262a2263,2264
>           for (i=mvg_info->offset+1; i < (ssize_t) extent; i++)
>             (*mvg_info->primitive_info)[i].primitive=UndefinedPrimitive;

ChangeLog にない差分

  • MagickCore/draw.c
    • NegateImage を単純にやめてる?????
1597,1599d1596
<       status=NegateImage(clip_mask,MagickFalse,exception);
<       if (status == MagickFalse)
<         clip_mask=DestroyImage(clip_mask);
2261a2259,2261
>           register ssize_t
>             i;
    • MVGMacroCompare の追加
2280a2283,2293
> MagickExport int MVGMacroCompare(const void *target,const void *source)
> {
>   const char
>     *p,
>     *q;
>
>   p=(const char *) target;
>   q=(const char *) source;
>   return(strcmp(p,q));
> }
>
2301c2314
<   macros=NewSplayTree(CompareSplayTreeString,RelinquishMagickMemory,
---
>   macros=NewSplayTree(MVGMacroCompare,RelinquishMagickMemory,
2493c2506
<         return(status);
---
>         return(MagickFalse);
  • coders/dpx.c
    • dpx.file.creator に GetMagickHomeURL でなく MagickAuthoritativeURL を入れる。
1464,1466d1463
<   char
<     *url;
<
1598,1600c1595,1596
<   url=GetMagickHomeURL();
<   (void) strncpy(dpx.file.creator,url,sizeof(dpx.file.creator)-1);
<   url=DestroyString(url);
---
>   (void) strncpy(dpx.file.creator,MagickAuthoritativeURL,
>     sizeof(dpx.file.creator)-1);
  • coders/gif.c
    • 優先度に合わせてかっこを正しくつける。
1099c1099
<               if (((ssize_t) count+offset+MagickPathExtent) >= (ssize_t) extent)
---
>               if ((ssize_t) (count+offset+MagickPathExtent) >= (ssize_t) extent)
  • coders/heic.c
    • キャストを追加。かっこの見直し
272c272
<       exif_buffer=RelinquishMagickMemory(exif_buffer);
---
>       exif_buffer=(unsigned char *) RelinquishMagickMemory(exif_buffer);
592c592
<   (void) WriteBlob(image,size,data);
---
>   (void) WriteBlob(image,size,(const unsigned char *) data);
713c713
<               if (x+1 < (long) image->columns)
---
>               if ((x+1) < (ssize_t) image->columns)
  • coders/jpeg.c
    • DCTメソッド指定なしで quality が 1〜90 の時に IFAST にする処理を取りやめ。
1384,1386d1383
<   if ((dct_method == (const char *) NULL) && (image->quality > 0) &&
<       (image->quality <= 90))
<     jpeg_info.dct_method=JDCT_IFAST;
  • coders/mat.c
    • 終了条件のチェックを増やした (OSS-Fuzz の指摘で脆弱性対応。-34 の ChangeLog のやつ)
1311c1311,1312
<
---
>     if (i != (long) MATLAB_HDR.SizeY)
>       goto END_OF_READING;
1327a1329,1330
>           if (EOFBlob(image) != MagickFalse)
>             break;
1335a1339,1340
>           if (EOFBlob(image) != MagickFalse)
>             break;
  • coders/pdb.c
    • pdb_info.name 文字列最大長制限
75a76
> #include "MagickCore/utility.h"
741a743,745
>   char
>     filename[MagickPathExtent];
>
810,811c814,815
<   (void) CopyMagickString(pdb_info.name,image_info->filename,
<     sizeof(pdb_info.name));
---
>   GetPathComponent(image_info->filename,TailPath,filename);
>   (void) CopyMagickString(pdb_info.name,filename,sizeof(pdb_info.name));
  • coders/psd.c
    • マスク画像のリセット。
1385a1386
>           (void) ResetImagePixels(mask,exception);
  • coders/tiff.c
    • 未使用の変数をコードから削除
715d714
<     length,

ChangeLog

2019-03-08  7.0.8-33 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 7.0.8-33, GIT revision 15399:716ec522c:20190309

2019-03-06  7.0.8-33 Cristy  <quetzlzacatenango@image...>
  * Fix SVG conversion infinite loop (reference
    https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=35591).
  * Initialize primitive drawing structure after resizing.

ImageMagick-7.0.8-32差分

ImageMagick-7.0.8-32差分

http://www.imagemagick.org/script/download.php
The latest release of ImageMagick is version 7.0.8-32

6 系同時リリースは ImageMagick-6.9.10-32

まとめ

  • LocaleLowerCase() で範囲外(アクセス)の修正 (脆弱性)
気になる事

(特に無し)

差分

1523a1524,1525
>   if (c == EOF)
>     return(c);
1526c1528
<     return(tolower_l(c,c_locale));
---
>     return(tolower_l((int) ((unsigned char) c),c_locale));
1528c1530
<   return(tolower(c));
---
>   return(tolower((int) ((unsigned char) c)));
1661a1664,1665
>   if (c == EOF)
>     return(c);
1664c1668
<     return(toupper_l(c,c_locale));
---
>     return(toupper_l((int) ((unsigned char) c),c_locale));
1666c1670
<   return(toupper(c));
---
>   return(toupper((int) ((unsigned char) c)));

第一引数の c を 0〜255 の範囲に閉じ込めてる。

ChangeLog にない差分

(なし)

ChangeLog

2019-03-05  7.0.8-32 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 7.0.8-32, GIT revision ...

2019-03-05  7.0.8-32 Cristy  <quetzlzacatenango@image...>
  * Fix out-of-boundary LocaleLowerCase() @
    https://github.com/ImageMagick/ImageMagick/issues/1495

ImageMagick-7.0.8-29差分

ImageMagick-7.0.8-29差分

http://www.imagemagick.org/script/download.php
The latest release of ImageMagick is version 7.0.8-29

6 系同時リリースは ImageMagick-6.9.10-29

まとめ

  • OSS Fuzz の指摘対応とその他。
気になる事
  • -trim に -define trim:blend=(0〜100) を追加。 GetImageBoundingBox がだいぶ改造されてる。
  • -draw で dash(点線) の間隔に比べて描画線が短い時の処理が変更されてる。
  • cms の ContextID の使い方が怪しい。。
  • length を extent に変えてるけど、これ後悔しないかな。。 extent は意味がぶれるので。

差分

ChangeLog にない差分

  • MagickCore/attribute.c
91a92
> #include "MagickCore/string-private.h"
125,126c126,138
< MagickExport RectangleInfo GetImageBoundingBox(const Image *image,
<   ExceptionInfo *exception)
---
>
> typedef struct _EdgeInfo
> {
>   double
>     left,
>     right,
>     top,
>     bottom;
> } EdgeInfo;
>
> static double GetEdgeBlendFactor(const Image *image,const CacheView *image_view,
>   const GravityType gravity,const size_t width,const size_t height,
>   const ssize_t x_offset,const ssize_t y_offset,ExceptionInfo *exception)
129c141
(大量の差分)
  • MagickCore/draw.c
    • 点線のひとつひとつの長さに満たない線を処理する時の変更。
1810
     if (fabs(length) < MagickEpsilon)
       {
>       if (fabs(draw_info->dash_pattern[n]) >= MagickEpsilon)
>          n++;
         if (fabs(draw_info->dash_pattern[n]) < MagickEpsilon)
           n=0;
         length=scale*draw_info->dash_pattern[n];
       }
1842a1845
       if (fabs(draw_info->dash_pattern[n]) >= MagickEpsilon)
         n++;
  • MagickCore/magick-baseconfig.h
    • MAGICKCORE_FONTCONFIG_DELEGATE が undefined の時の対処。デフォルト 1 扱い。
84,86c84
< #ifndef MAGICKCORE_FONTCONFIG_DELEGATE
< #define MAGICKCORE_FONTCONFIG_DELEGATE 1
< #endif
  • MagickCore/profile.c
    • Context ID にスタック変数のポインタ渡してるように見えるけど、大丈夫だっけ。。?
433c433,434
<   const int intent,const cmsUInt32Number flags)
---
>   const int intent,const cmsUInt32Number flags,
>   CMSExceptionInfo *cms_exception)
452,453c453,454
<     transform[i]=cmsCreateTransformTHR((cmsContext) image,source_profile,
<       source_type,target_profile,target_type,intent,flags);
---
>     transform[i]=cmsCreateTransformTHR((cmsContext) cms_exception,
>       source_profile,source_type,target_profile,target_type,intent,flags);
1136c1137,1138
<               source_type,target_profile,target_type,intent,flags);
---
>               source_type,target_profile,target_type,intent,flags,
>             &cms_exception);
  • coders/jp2.c
    • デコードエリアの指定。変数名 length => extent 変更。
380a381,383
>         jp2_status=opj_set_decode_area(jp2_codec,jp2_image,0,0,
>           jp2_image->comps[0].w-1,jp2_image->comps[0].h-1);
>         if (jp2_status != 0)
diff -rwB ImageMagick-7.0.8-28/coders/miff.c ImageMagick-7.0.8-29/coders/miff.c
1143c1143
<         length=MagickPathExtent;
---
>         extent=MagickPathExtent;
1145a1146
>         length=0;
1149c1150
<           if ((strlen(image->directory)+MagickPathExtent) >= length)
---
>           if ((length+MagickPathExtent) >= extent)
1154c1155
<               length<<=1;
---
>               extent<<=1;
1156c1157
<                 length+MagickPathExtent,sizeof(*image->directory));
---
>                 extent+MagickPathExtent,sizeof(*image->directory));
1159c1160
<               p=image->directory+strlen(image->directory);
---
>               p=image->directory+length;
1164a1166
>           length++;
  • coders/mpc.c
    • 変数名変更 length=>extent
181a182
>     extent,
812c813
<         length=MagickPathExtent;
---
>         extent=MagickPathExtent;
814a816
>         length=0;
818c820
<           if ((strlen(image->directory)+MagickPathExtent) >= length)
---
>           if ((length+MagickPathExtent) >= extent)
823c825
<               length<<=1;
---
>               extent<<=1;
825c827
<                 length+MagickPathExtent,sizeof(*image->directory));
---
>                 extent+MagickPathExtent,sizeof(*image->directory));
833c835
<               p=image->directory+strlen(image->directory);
---
>               p=image->directory+length;
838a841
>           length++;
  • coders/pango.c
    • pango:align の実装
330a331,340
>   option=GetImageOption(image_info,"pango:align");
>   if (option != (const char *) NULL)
>     {
>       if (LocaleCompare(option,"center") == 0)
>         align=PANGO_ALIGN_CENTER;
>       if (LocaleCompare(option,"left") == 0)
>         align=PANGO_ALIGN_LEFT;
>       if (LocaleCompare(option,"right") == 0)
>         align=PANGO_ALIGN_RIGHT;
>     }
  • coders/pdf.c
    • CoderDecoderSeekableStreamFlag のフラグセット
921a922
>   entry->flags|=CoderDecoderSeekableStreamFlag;
929a931
>   entry->flags|=CoderDecoderSeekableStreamFlag;
937a940
>   entry->flags|=CoderDecoderSeekableStreamFlag;
  • coders/tiff.c
    • ファイルから tiff:tietz_offset の取り込み
718,720d717
<   unsigned long
<     *tietz;
<
795,800d791
<   if ((TIFFGetField(tiff,37706,&length,&tietz) == 1) &&
<       (tietz != (unsigned long *) NULL))
<     {
<       (void) FormatLocaleString(message,MagickPathExtent,"%lu",tietz[0]);
<       (void) SetImageProperty(image,"tiff:tietz_offset",message,exception);
<     }
  • coders/wpg.c
    • image->colors が小さい場合はカラーマップのコピーのサイズをそっちに合わせる
1265,1266c1265,1266
<                       (void) memcpy(image->colormap,colormap,colors*
<                         sizeof(*image->colormap));
---
>                       (void) memcpy(image->colormap,colormap,MagickMin(
>                         image->colors,colors)*sizeof(*image->colormap));

ChangeLog

2019-02-28  7.0.8-29 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 7.0.8-29, GIT revision 15368:5d8ed9f56:20190228

2019-02-28  7.0.8-29 Cristy  <quetzlzacatenango@image...>
  * Fixed a number of issues (reference
    https://github.com/ImageMagick/ImageMagick/issues).
  * Fixed numerous use of uninitialized values, integer overflow, memory
    exceeded, and timeouts (credit to OSS Fuzz).

(ImageMagick-7.0.8-30 の ChangeLog で追記)