ImageMagick-6.9.10-27差分

ImageMagick-6.9.10-27差分

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

7 系同時リリースは ImageMagick-7.0.8-27

まとめ

  • image.gif[2-3] のような scene geometry の処理を修正。

https://imagemagick.org/discourse-server/viewtopic.php?f=3&t=35435

  • BMP 読み込みで ICC プロファイルを解釈するようになった。BMPv5 の機能。
気になる事

珍しく PerlMagick/t/input.fits に大量の差分がある。

差分

  • subimage レンジ適切に扱う変更パッチ。 (例. image.gif[2-3]).

ChangeLog にない差分

  • PerlMagick/t/input.fits
1,76c1
< SIMPLE  =
(よく分からないバイナリが大量に)
  • coders/bmp.c
    • BMP 読み込みで ICC プロファイルを解釈できるようにした。
526a527,528
>     profile_data,
>     profile_size,
630a633,634
>     profile_data=0;
>     profile_size=0;
829,830c833,834
<             (void) ReadBlobLSBLong(image);  /* Profile data */
<             (void) ReadBlobLSBLong(image);  /* Profile size */
---
>             profile_data=(MagickOffsetType) ReadBlobLSBLong(image);
>             profile_size=(MagickOffsetType) ReadBlobLSBLong(image);
1451a1456,1497
>       Read embeded ICC profile
>     */
>     if ((bmp_info.colorspace == 0x4D424544L) && (profile_data > 0) &&
>         (profile_size > 0))
>       {
>         StringInfo
>           *profile;
>
>         unsigned char
>           *datum;
>
>         offset=start_position+14+profile_data;
>         if ((offset < TellBlob(image)) ||
>             (SeekBlob(image,offset,SEEK_SET) != offset) ||
>             (GetBlobSize(image) < (MagickSizeType) (offset+profile_size)))
>           ThrowReaderException(CorruptImageError,"ImproperImageHeader");
>         profile=AcquireStringInfo((size_t) profile_size);
>         if (profile == (StringInfo *) NULL)
>           ThrowReaderException(CorruptImageError,"MemoryAllocationFailed");
>         datum=GetStringInfoDatum(profile);
>         if (ReadBlob(image,(size_t) profile_size,datum) == (ssize_t) profile_size)
>           {
>             MagickOffsetType
>               profile_size_orig;
>
>             /*
>              Trimming padded bytes.
>             */
>             profile_size_orig=(MagickOffsetType) datum[0] << 24;
>             profile_size_orig|=(MagickOffsetType) datum[1] << 16;
>             profile_size_orig|=(MagickOffsetType) datum[2] << 8;
>             profile_size_orig|=(MagickOffsetType) datum[3];
>             if (profile_size_orig < profile_size)
>               SetStringInfoLength(profile,(size_t) profile_size_orig);
>             if (image->debug != MagickFalse)
>               (void) LogMagickEvent(CoderEvent,GetMagickModule(),
>                 "Profile: ICC, %u bytes",(unsigned int) profile_size_orig);
>             (void) SetImageProfile(image,"icc",profile);
>           }
>         profile=DestroyStringInfo(profile);
>       }
>     /*

ChangeLog

2019-02-09  6.9.10-27 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 6.9.10-27, GIT revision 14197:4e00248f4:20190209

2019-02-09  6.9.10-27 Cristy  <quetzlzacatenango@image...>
  * Mod patch to properly handle subimage ranges (e.g. image.gif[2-3]).

 

ImageMagick-6.9.10-26差分

ImageMagick-6.9.10-26差分

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

7 系同時リリースは ImageMagick-7.0.8-26

まとめ

  • issue の解決
気になる事
  • BMP形式の ICCプロファイル書き込み対応した。(というか僕がコミットした)
  • libwebp 0.6.0 から -define webp:use-sharp-yuv=1 が使える。はずがミスってて実際は動かない。

差分

ChangeLog にない差分

  • coders/bmp.c
    • BMPICC プロファイル出力対応
1646a1647
>     profile_data,
>     profile_size,
>     profile_size_pad;
>
2197a2203,2213
>     profile_data=0;
>     profile_size=0;
>     profile_size_pad=0;
>     if (profile) {
>       profile_data=(MagickOffsetType) bmp_info.file_size-14;  /* from head of BMP info header */
>       profile_size=(MagickOffsetType) GetStringInfoLength(profile);
>       if (profile_size%4) {
>         profile_size_pad=4-(profile_size%4);
>       }
>       bmp_info.file_size+=profile_size+profile_size_pad;
>     }
2239a2256,2258
>         if (profile) {
>           (void) WriteBlobLSBLong(image,0x4D424544U);  /* PROFILE_EMBEDDED */
>         } else {
2240a2260
>         }
2303,2304c2323,2325
<             (void) WriteBlobLSBLong(image,0x00);  /* dummy profile data */
<             (void) WriteBlobLSBLong(image,0x00);  /* dummy profile length */
---
>             (void) WriteBlobLSBLong(image,(unsigned int) profile_data);
>             (void) WriteBlobLSBLong(image,(unsigned int) (profile_size+
>               profile_size_pad));
2354a2376,2385
>     if (profile) {
>       if (image->debug != MagickFalse)
>         (void) LogMagickEvent(CoderEvent,GetMagickModule(),
>           "  Profile:  %g bytes",(double) profile_size+profile_size_pad);
>       (void) WriteBlob(image,(size_t) profile_size,GetStringInfoDatum(profile));
>       if (profile_size_pad) {  /* padding for 4 bytes multiple */
>         (void) WriteBlob(image,(size_t) profile_size_pad,(unsigned char *)
>           "\0\0\0");
>       }
>     }
3784c3784,3791
<                (void) SetImageProperty(image,text[i].key,value);
---
>               {
>                 char
>                   key[MaxTextExtent];
>
>                 (void) FormatLocaleString(key,MaxTextExtent,"png:%s",
>                   text[i].key);
>                 (void) SetImageProperty(image,key,value);
>               }
(略)
3854c3910
<   value=strtol(point,&p,10);
---
>   value=(ssize_t) strtol(point,&p,10);
(略)
268a274,356
> static Image *RenderSVGImage(const ImageInfo *image_info,Image *image,
>   ExceptionInfo *exception)
  • coders/tiff.c
    • WRITE 処理での PHOTOMETRIC_SEPARATED の考慮漏れの修正
3652a3653
>              (photometric == PHOTOMETRIC_SEPARATED) ||
3674a3676
>              (photometric == PHOTOMETRIC_SEPARATED) ||
3688a3691
>              (photometric == PHOTOMETRIC_SEPARATED) ||
3699a3703
>              (photometric == PHOTOMETRIC_SEPARATED) ||
3714a3719
>              (photometric == PHOTOMETRIC_SEPARATED) ||
  • coders/webp.c
    • libweb-0.6.0 から追加された use_sharp_yuv を使えるようにするはずが。。。
      • 現状 DECODER_ABI は最新が 0208 だし、RGB=>YUV の encode 機能なので ENCODER_ABI (こちらは 0.6.0 から 020e)と間違えてるっぽい。あとで修正PR送っとく。
735a736,740
> #if WEBP_DECODER_ABI_VERSION >= 0x020e
>   value=GetImageOption(image_info,"webp:use-sharp-yuv");
>   if (value != (char *) NULL)
>     configure.use_sharp_yuv=StringToInteger(value);
  • magick/constitute.c
    • ReadImage で scene geometry なのに "%d-%d" 形式になってない場合だけ CloneImages で作り直す。
636a637,641
>       int
>         first_scene,
>         last_scene,
>         n;
>
639a645,647
>       n=sscanf(read_info->scenes,"%d-%d",&first_scene,&last_scene);
>       if (n != 2)
>         {
643c651,652
<           "SubimageSpecificationReturnsNoImages","`%s'",read_info->filename);
---
>               "SubimageSpecificationReturnsNoImages","`%s'",
>               read_info->filename);
649a659
>     }
diff -rBw ImageMagick-6.9.10-25/magick/draw.c ImageMagick-6.9.10-26/magick/draw.c
2462c2462
<         return(status == 0 ? MagickFalse : MagickTrue);
---
>         return(status);
  • magick/draw.c
    • シンプルにした。
2462c2462
<         return(status == 0 ? MagickFalse : MagickTrue);
---
>         return(status);
  • magick/locale.c
    • リファイン。nt-base.h とも絡む。
288d287
< #if defined(MAGICKCORE_HAVE_NEWLOCALE)
291,294d289
< #elif defined(MAGICKCORE_WINDOWS_SUPPORT) && !defined(__MINGW32__)
<   if (c_locale != (locale_t) NULL)
<     _free_locale(c_locale);
< #endif
1529,1530c1524,1525
<   if (c_locale == (locale_t) NULL)
<     return(tolower(c));
---
> #if defined(MAGICKCORE_LOCALE_SUPPORT)
>   if (c_locale != (locale_t) NULL)
1531a1527,1528
> #endif
>   return(tolower(c));
1665,1666c1662,1663
<   if (c_locale == (locale_t) NULL)
<     return(toupper(c));
---
> #if defined(MAGICKCORE_LOCALE_SUPPORT)
>   if (c_locale != (locale_t) NULL)
1667a1665,1666
> #endif
>   return(toupper(c));
  • magick/nt-base.h
    • Windows 用に define で freelocale に統一。
103a104,106
> #if !defined(freelocale)
> #  define freelocale  _free_locale
> #endif
  • magick/pixel-accessor.h
    • キャスト
114c114
<     return(0);
---
>     return((Quantum) 0);

ChangeLog

2019-02-03  6.9.10-27 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 6.9.10-27, GIT revision 14180:153da6bd6:20190203

2019-02-02  6.9.10-26 Cristy  <quetzlzacatenango@image...>
  * Fixed a number of issues (reference
    https://github.com/ImageMagick/ImageMagick/issues).

 

ImageMagick-6.9.10-25差分

ImageMagick-6.9.10-25差分

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

7 系同時リリースは ImageMagick-7.0.8-25

まとめ

気になる事
  • tolower/toupper の代わりに Locale 関数の LocaleLowercase/LocaleUppercase を呼ぶようにした箇所が沢山ある。
    • これで大文字や小文字への変換が直感的になるケースがある?

You may not use this file except in compliance with the License.
obtain a copy of the License at

これを

You may not use this file except in compliance with the License. You may
obtain a copy of the License at

に書き換えてる。大量に。

差分

ChangeLog にない差分

  • coders/bmp.c
    • 画像が途中で途切れてないかのチェックの計算ミス。ここスルーしても別の箇所でエラーになるので恐らく実害ない。
    • bmp_colormap のメモリ確保に失敗した時に、pixel_info を解放してなかった。これも意図的には作るのは難しい。
967a968,969
>     if ((MagickSizeType) (length/256) > GetBlobSize(image))
>       ThrowReaderException(CorruptImageError,"InsufficientImageDataInFile");
971,972d972
<         if ((MagickSizeType) length > GetBlobSize(image))
<           ThrowReaderException(CorruptImageError,"InsufficientImageDataInFile");
2321a2322,2323
>           {
>             pixel_info=RelinquishVirtualMemory(pixel_info);
2322a2325
>           }
  • coders/dib.c
    • dib_colormap のメモリ確保出来ない時に、 pixels がメモリリークしてた。(カラーマップは固定でそんな大きくないので意図的に発生させるのは難しい。実害はなさそう)
1382a1383,1384
>             {
>               pixels=(unsigned char *) RelinquishMagickMemory(pixels);
1383a1386
>             }
  • coders/fits.c
    • tolower の代わりに Locale関数の方を呼ぶ
334c334
<         keyword[i]=tolower((int) ((unsigned char) keyword[i]));
---
>         keyword[i]=LocaleLowercase((int) ((unsigned char) keyword[i]));
  • coders/json.c
    • tolower の代わりに Locale関数の方を呼ぶ
1113c1113
<       *target=(char) toupper((int) ((unsigned char) *target));
---
>       *target=(char) LocaleUppercase((int) ((unsigned char) *target)); 
  • coders/meta.c

181c181< i=toupper(i);

    • -

> i=LocaleUppercase(i);
184c184< j=toupper(j);

    • -

> j=LocaleUppercase(j);
193c193< return(toupper*1;

    • -

> return(LocaleUppercase*2;
|

  • coders/psd.c
    • ReadPSDLayersInternal で top/left の右下に bottom/right がある事のチェックを追加。
1639,1640c1639,1642
<           x,
<           y;
---
>           top,
>           left,
>           bottom,
>           right;
1645,1650c1647,1660
<         layer_info[i].page.y=(ssize_t) ReadBlobSignedLong(image);
<         layer_info[i].page.x=(ssize_t) ReadBlobSignedLong(image);
<         y=(ssize_t) ReadBlobSignedLong(image);
<         x=(ssize_t) ReadBlobSignedLong(image);
<         layer_info[i].page.width=(size_t) (x-layer_info[i].page.x);
<         layer_info[i].page.height=(size_t) (y-layer_info[i].page.y);
---
>         top=(ssize_t) ReadBlobSignedLong(image);
>         left=(ssize_t) ReadBlobSignedLong(image);
>         bottom=(ssize_t) ReadBlobSignedLong(image);
>         right=(ssize_t) ReadBlobSignedLong(image);
>         if ((right < left) || (bottom < top))
>           {
>             layer_info=DestroyLayerInfo(layer_info,number_layers);
>             ThrowBinaryException(CorruptImageError,"ImproperImageHeader",
>               image->filename);
>           }
>         layer_info[i].page.y=top;
>         layer_info[i].page.x=left;
>         layer_info[i].page.width=(size_t) (right-left);
>         layer_info[i].page.height=(size_t) (bottom-top);
2707a2718,2719
>           compressed_pixels=(unsigned char *) RelinquishMagickMemory(
>             compressed_pixels);
  • coders/sixel.c
    • sixel_decode で失敗した時に sixel_pixels のメモリ解放を忘れてた。メモリリークになりそう?
1058a1059
>       sixel_pixels=(unsigned char *) RelinquishMagickMemory(sixel_pixels);
  • coders/tiff.c
    • 主に宣言型の整理。VMS で JPEGCompression を有効にした。(なんで VMS だけ?)
    • 動作に影響がないリファイン。ORIENTATION_TOPLEFT を初期値的に入れて image->orientation がある時に上書きしてたけど、image-orientation 処理の else 説で TOPLEFT を入れるようにした。
41a42,44
> #ifdef __VMS
> #define JPEG_SUPPORT 1
> #endif
90c93
< #  include "tiffconf.h"
---
> #  include <tiffconf.h>
92,93c95,96
< # include "tiff.h"
< # include "tiffio.h"
---
> # include <tiff.h>
> # include <tiffio.h>
230,231c233
<   /* Setting the mode to a value that won't change the colorspace */
<   info->mode=10;
---
>   info->mode=10; /* Set mode to a value that won't change the colorspace */
329c331
< static inline size_t WriteLSBLong(FILE *file,const size_t value)
---
> static inline size_t WriteLSBLong(FILE *file,const unsigned int value)
396a399,400
>   if (length != 10)
>     ThrowReaderException(CorruptImageError,"UnexpectedEndOfFile");
407c411
<   length=WriteLSBLong(file,(size_t) strip_offset);
---
>   length=WriteLSBLong(file,(unsigned int) strip_offset);
409c413
<   length=WriteLSBLong(file,(size_t) image_info->orientation);
---
>   length=WriteLSBLong(file,(unsigned int) image_info->orientation);
416c420
<   length=WriteLSBLong(file,(size_t) (strip_offset-8));
---
>   length=WriteLSBLong(file,(unsigned int) (strip_offset-8));
418c422
<   length=WriteLSBLong(file,(size_t) (strip_offset-8));
---
>   length=WriteLSBLong(file,(unsigned int) (strip_offset-8));
421c425
<   length=WriteLSBLong(file,(size_t) (image->x_resolution+0.5));
---
>   length=WriteLSBLong(file,(unsigned int) image->x_resolution);
1044c1048
< static void TIFFReadPhotoshopLayers(Image* image,const ImageInfo *image_info,
---
> static void TIFFReadPhotoshopLayers(const ImageInfo *image_info,Image *image,
1055a1060,1062
>   ImageInfo
>     *clone_info;
>
1096c1103,1106
<   (void) ReadPSDLayers(layers,image_info,&info,MagickFalse,exception);
---
   clone_info=CloneImageInfo(image_info);
>   clone_info->number_scenes=0;
>   (void) ReadPSDLayers(layers,clone_info,&info,MagickFalse,exception);
>   clone_info=DestroyImageInfo(clone_info);
2177c2187
<   TIFFReadPhotoshopLayers(image,image_info,exception);
---
>   TIFFReadPhotoshopLayers(image_info,image,exception);
3579d3588
<     (void) TIFFSetField(tiff,TIFFTAG_ORIENTATION,ORIENTATION_TOPLEFT);
3787a3797,3798
>     else
>       (void) TIFFSetField(tiff,TIFFTAG_ORIENTATION,ORIENTATION_TOPLEFT);
  • coders/ttf.c
    • 開発中の試行錯誤?
54a55
> #include "magick/resource_.h"
255c256,257
<   draw_info->font=AcquireString(image->filename);
---
>   draw_info->font=AcquireString("");
>   (void) ImageToFile(image,draw_info->font,exception);
289a292
>   (void) RelinquishUniqueFileResource(draw_info->font);
  • /magick/configure.c
    • AddConfigureKey で処理を整理。
(ごっそり変わってる)
  • magick/display.c
    • toupper で Locale 関数を使う。
14482c14482,14483
<   class_hints->res_class[0]=(char) toupper((int) class_hints->res_class[0]);
---
>   class_hints->res_class[0]=(char) LocaleUppercase((int)
>     class_hints->res_class[0]);
  • magick/fx.c
    • CharcoalImage で ClampImage をはじめに追加。あとエラーハンドリングを真面目にやる。(どれも失敗する事なさそうなメソッドだけど)
93a94
> #include "magick/threshold.h"
630a632,634
>   MagickBooleanType
>     status;
>
639a644,646
>   charcoal_image=(Image *) NULL;
>   status=ClampImage(edge_image);
>   if (status != MagickFalse)
644,646c651,657
<   (void) NormalizeImage(charcoal_image);
<   (void) NegateImage(charcoal_image,MagickFalse);
<   (void) GrayscaleImage(charcoal_image,image->intensity);
---
>   status=NormalizeImage(charcoal_image);
>   if (status != MagickFalse)
>     status=NegateImage(charcoal_image,MagickFalse);
>   if (status != MagickFalse)
>     status=GrayscaleImage(charcoal_image,image->intensity);
>   if (status == MagickFalse)
>     charcoal_image=DestroyImage(charcoal_image);
4631,4633c4642,4648
<   (void) NormalizeImage(dodge_image);
<   (void) NegateImage(dodge_image,MagickFalse);
<   (void) TransformImage(&dodge_image,(char *) NULL,"50%");
---
>   status=ClampImage(dodge_image);
>   if (status != MagickFalse)
>     status=NormalizeImage(dodge_image);
>   if (status != MagickFalse)
>     status=NegateImage(dodge_image,MagickFalse);
>   if (status != MagickFalse)
>     status=TransformImage(&dodge_image,(char *) NULL,"50%");

ChangeLog

2019-01-27  6.9.10-25 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 6.9.10-25, GIT revision 14167:183ec9d88:20190127

2019-01-19  6.9.10-25 Cristy  <quetzlzacatenango@image...>
  * Eliminate spurious font warning (reference
    https://github.com/ImageMagick/ImageMagick/issues/1458).
  * Support HEIC EXIF & XMP profiles.

 

*1:int) *p)-toupper((int) *q

*2:int) *p)-LocaleUppercase((int) *q

ImageMagick-6.9.10-24差分

ImageMagick-6.9.10-24差分

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

7 系同時リリースは ImageMagick-7.0.8-24

まとめ

気になる事

差分

ChangeLog にない差分

 

ChangeLog

2019-01-12  6.9.10-24 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 6.9.10-24, GIT revision 14130:70079ed45:20190112

2019-01-08  6.9.10-24 Cristy  <quetzlzacatenango@image...>
  * Support -clahe option real clip limit (reference
    https://imagemagick.org/discourse-server/viewtopic.php?f=2&t=35292).
  * ShadeImage() can return negative pixels, clamp to range (reference
    https://github.com/ImageMagick/ImageMagick/issues/1319).
  * Annotate with negative offsets no longer renders slanted text.

 

ImageMagick-6.9.10-23差分

ImageMagick-6.9.10-23差分

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

7 系同時リリースは ImageMagick-7.0.8-23

まとめ

気になる事

差分

  • CacheInfo destructor は DestroyPixelStream() で(バイト)境界が揃うべき。

ChangeLog にない差分

  • coders/bgr.c

 

 986,987c986,987
< image=DestroyImageList(image);
< return((Image *) NULL);
---
> status=MagickFalse;
> break;
diff ImageMagick-6.9.10-2/coders/bmp.c ImageMagick-6.9.10-3/coders/bmp.c
972,973c972,973
< pixel_info=AcquireVirtualMemory((size_t) image->rows,
< MagickMax(bytes_per_line,image->columns+256UL)*sizeof(*pixels));
---
> pixel_info=AcquireVirtualMemory(image->rows,MagickMax(bytes_per_line,
> image->columns+256UL)*sizeof(*pixels));
993,994c993,994
< pixel_info=AcquireVirtualMemory((size_t) image->rows,
< MagickMax(bytes_per_line,image->columns+256UL)*sizeof(*pixels));
---
> pixel_info=AcquireVirtualMemory(image->rows,MagickMax(bytes_per_line,
> image->columns+256UL)*sizeof(*pixels));
1860,1861c1860,1861
< pixel_info=AcquireVirtualMemory((size_t) bmp_info.image_size,
< sizeof(*pixels));
---
> pixel_info=AcquireVirtualMemory(image->rows,MagickMax(bytes_per_line,
> image->columns+256UL)*sizeof(*pixels));
diff ImageMagick-6.9.10-2/coders/cmyk.c ImageMagick-6.9.10-3/coders/cmyk.c
1144,1145c1144,1145
< image=DestroyImageList(image);
< return((Image *) NULL);
---
> status=MagickFalse;
> break;

 

ChangeLog

2019-01-01 6.9.10-23 Cristy <quetzlzacatenango@image...>
* Release ImageMagick version 6.9.10-23, GIT revision 14106:df6887c14:20190101

2019-01-01 6.9.10-23 Cristy <quetzlzacatenango@image...>
* CacheInfo destructor must be aligned in DestroyPixelStream().

 

ImageMagick-6.9.10-22差分

ImageMagick-6.9.10-21差分 - yoyaのメモの続き

The latest release of ImageMagick is version 6.9.10-22

まとめ

  • geometry で負の回転をサポート (例. -10x-10+10+10)
  • gravity つき crop のあとで 期待する canvas オフセットを返す
  • HEIC コーダーの(exception引数による)コンパイルエラーを修正 (6 系の -21 は heic 有効だとビルド出来なかった)
気になる事

差分

geometry で負の回転をサポート (例. -10x-10+10+10)

    • magick/geometry.c
1122c1122,1124
<       ((flags & PsiValue) == 0))
---
>       ((flags & XiNegative) != 0))
>     {
>       if ((flags & PsiValue) == 0)
1131a1134,1159
>       else
>         if ((flags & ChiValue) == 0)
>           {
>             /*
>               Support negative height values (e.g. 30x-20+10).
>             */
>             geometry_info->sigma=geometry_info->xi;
>             geometry_info->xi=geometry_info->psi;
>             flags|=SigmaValue;
>             flags|=XiValue;
>             flags&=(~PsiValue);
>           }
>         else
>           {
>             /*
>               Support negative height values (e.g. 30x-20+10+10).
>             */
>             geometry_info->sigma=geometry_info->xi;
>             geometry_info->xi=geometry_info->psi;
>             geometry_info->psi=geometry_info->chi;
>             flags|=SigmaValue;
>             flags|=XiValue;
>             flags|=PsiValue;
>             flags&=(~ChiValue);
>           }
>     }
  • gravity つき crop のあとで 期待する canvas オフセットを返す
  • HEIC コーダーの(exception引数による)コンパイルエラーを修正
    • coders/heic.c
320c320
<   SetImageProperty(image, "exif:Orientation", "1", exception);
---
>   SetImageProperty(image, "exif:Orientation", "1");
ChangeLog にない差分
  • coders/caption.c
169a170
>   (void) memset(&metrics,0,sizeof(metrics));
diff -rwb ImageMagick-6.9.10-21/coders/cut.c ImageMagick-6.9.10-22/coders/cut.c
432,435d431
<       if (palette != NULL)
<         palette=DestroyImage(palette);
<       if (clone_info != NULL)
<         clone_info=DestroyImageInfo(clone_info);

ChangeLog

2018-12-30  6.9.10-22 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 6.9.10-22, GIT revision 14098:7054d2569:20181230

2018-12-29  6.9.10-22 Cristy  <quetzlzacatenango@image...>
  * Support negative rotations in a geometry (e.g. -10x-10+10+10).
  * Return expected canvas offset after a crop with gravity.
  * Fix HEIC coder compile exception.

ImageMagick-6.9.10-21差分

ImageMagick-6.9.10-20差分 - yoya's diaryの続き

The latest release of ImageMagick is version 6.9.10-21

まとめ

  • SeekBlog を off_t が表現出来るオフセットとする
気になる事
  • メモリのアラインメントをとる処理が追加されてるので、もしかしたら高速化?

差分

  • Check to ensure SeekBlob() offset can be represented in an off_t.
    • magick/blob.c
276c276,277
<     count=write(file,(const char *) blob+i,MagickMin(length-i,SSIZE_MAX));
---
>     count=write(file,(const char *) blob+i,MagickMin(length-i,(size_t)
>       SSIZE_MAX));
1190c1191
<         count=read(file,blob+i,MagickMin(*length-i,SSIZE_MAX));
---
>         count=read(file,blob+i,MagickMin(*length-i,(size_t) SSIZE_MAX));
4297a4299,4304
>           if (((offset > 0) && (blob_info->offset > (SSIZE_MAX-offset))) ||
>               ((offset < 0) && (blob_info->offset < (-SSIZE_MAX-offset))))
>             {
>               errno=EOVERFLOW;
>               return(-1);
>             }
ChangeLog にない差分
  • coders/heic.c
    • Orientation 対応
coders/heic.c
314a315,320
>   /*
>     There is a discrepancy between EXIF data and the actual orientation of
>     image pixels. ReadImage processes "exif:Orientation" expecting pixels to b
e
>     oriented accordingly. However, in HEIF the pixels are NOT rotated.
>    */
>   SetImageProperty(image, "exif:Orientation", "1", exception);
||

- magick/cache.c 
-- メモリのアラインメント
>|c|
360c360,362
<   cache_info=(CacheInfo *) AcquireCriticalMemory(sizeof(*cache_info));
---
>   cache_info=(CacheInfo *) AcquireAlignedMemory(1,sizeof(*cache_info));
>   if (cache_info == (CacheInfo *) NULL)
>     ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
1196c1198
<   cache_info=(CacheInfo *) RelinquishMagickMemory(cache_info);
---
>   cache_info=(CacheInfo *) RelinquishAlignedMemory(cache_info);
5098,5099c5100,5101
<   const CacheInfo *magick_restrict cache_info,NexusInfo *nexus_info,
<   ExceptionInfo *exception)
---
>   const CacheInfo *magick_restrict cache_info,const MagickSizeType length,
>   NexusInfo *nexus_info,ExceptionInfo *exception)
5101c5103
<   if (nexus_info->length != (MagickSizeType) ((size_t) nexus_info->length))
---
>   if (length != (MagickSizeType) ((size_t) length))
5102a5105,5106
>   nexus_info->length=0;
>   nexus_info->mapped=MagickFalse;
<略>
  • magick/memory.c
    • メモリのアラインメント
246a247
> #define AlignedPowerOf2(x)  ((((x) - 1) & (x)) == 0)
273a275,285
>     if ((alignment == 0) || (alignment % sizeof(void *) != 0) ||
>         (AlignedPowerOf2(alignment/sizeof (void *)) == 0))
>       {
>         errno=EINVAL;
>         return((void *) NULL);
>       }
>     if (size > (SIZE_MAX-alignment-sizeof(void *)-1))
>       {
>         errno=ENOMEM;
>         return((void *) NULL);
>       }

ChangeLog

2018-12-27  6.9.10-21 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 6.9.10-21, GIT revision 14088:1961662c1:20181227

2018-12-27  6.9.10-21 Cristy  <quetzlzacatenango@image...>
  * Check to ensure SeekBlob() offset can be represented in an off_t.