ImageMagick-6.9.10-15差分

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

The latest release of ImageMagick is version 6.9.10-15

まとめ

  • DefaultSVGDensity を 90 から 96 に変更。
気になる事
  • GIF の長さチェックおかしかったの今まで大丈夫?
  • DICOM で Explicit VR のケアが増えた場所が LittleEndian 前提。BigEndian 無しでいいの?
  • magick_attribute で可変引数等で期待しない引数を渡された時の警告が入ってる。

差分

ChangeLog にない差分
  • coders/bmp.c
    • 長さチェックの間違いで7倍はみ出てそう
coders/bmp.c
968,969d967
<     if (((MagickSizeType) length/8) > GetBlobSize(image))
<       ThrowReaderException(CorruptImageError,"InsufficientImageDataInFile");
972a971,972
>         if ((MagickSizeType) length > GetBlobSize(image))
>           ThrowReaderException(CorruptImageError,"InsufficientImageDataInFile");

coders/dcm.c

    • Explicit VR (Transfer Syntax の一種) としての処理に OF, UT を追加。
3205,3208c3205,3210
<           if ((strncmp(explicit_vr,"OB",2) == 0) ||
<               (strncmp(explicit_vr,"UN",2) == 0) ||
<               (strncmp(explicit_vr,"OW",2) == 0) ||
<               (strncmp(explicit_vr,"SQ",2) == 0))
---
>           if ((strcmp(explicit_vr,"OB") == 0) ||
>               (strcmp(explicit_vr,"OW") == 0) ||
>               (strcmp(explicit_vr,"OF") == 0) ||
>               (strcmp(explicit_vr,"SQ") == 0) ||
>               (strcmp(explicit_vr,"UN") == 0) ||
>               (strcmp(explicit_vr,"UT") == 0))
  • coders/dib.c
    • 長さチェック
672a673,674
>   if ((MagickSizeType) length > (256*GetBlobSize(image)))
>     ThrowReaderException(CorruptImageError,"InsufficientImageDataInFile");
  • coders/fits.c
    • depth の計算ミス修正
730c730
<     image->depth > 8 ? GetFITSPixelRange(image->depth)/2.0 : 0.0);
---
>     image->depth > 8 ? (GetFITSPixelRange(image->depth)+1)/2.0 : 0.0);
  • coders/gif.c
1106c1106,1107
<               length;
---
>               extent,
>               offset;
1108,1110d1108
<             /*
<               Read comment extension.
<             */
1112c1110,1111
<             for (length=0; ; length+=count)
---
>             extent=MagickPathExtent;
>             for (offset=0; ; offset+=count)
1118c1117,1127
<               (void) ConcatenateString(&comments,(const char *) buffer);
---
>               if ((count+offset+MagickPathExtent) >= (ssize_t) extent)
>                 {
>                   extent<<=1;
>                   comments=(char *) ResizeQuantumMemory(comments,extent+
>                     MagickPathExtent,sizeof(*comments));
>                   if (comments == (char *) NULL)
>                     ThrowGIFException(ResourceLimitError,
>                       "MemoryAllocationFailed");
>                 }
>               (void) CopyMagickString(&comments[offset],(char *) buffer,extent-
>                 offset);
1739,1740c1748
<         if ((LocaleCompare(write_info->magick,"GIF87") != 0) &&
<             (value != (const char *) NULL))
---
>         if (value != (const char *) NULL)
  • coders/heic.c
218c218
<       void
---
>       unsigned char
229,230c229,230
<       exif_buffer=AcquireMagickMemory(exif_size);
<       if (exif_buffer != NULL)
---
>       exif_buffer=(unsigned char*) AcquireMagickMemory(exif_size);
>       if (exif_buffer != (unsigned char*) NULL)
239c239,243
<               profile=BlobToStringInfo(exif_buffer,exif_size);
---
>               // The first 4 byte should be skipped since they indicate the
>               // offset to the start of the TIFF header of the Exif data.
>               profile=(StringInfo*) NULL;
>               if (exif_size > 8)
>                 profile=BlobToStringInfo(exif_buffer+4,exif_size-4);
375,376c375,376
<         count=ReadBlob(image,length,png+16);
<         if (count != (ssize_t) length)
---
>         count=ReadBlob(image,length-16,png+16);
>         if (count != (ssize_t) (length-16))
  • coders/jpeg.c
    • option 変数の再利用を辞めて、場所毎に変数名を分けた。
    • dct-method 未指定で quality が 90 以下の場合 JDCT_IFAST を使う。
1034a1035
>     *dct_method,
1238,1241c1239,1241
<   jpeg_info.dct_method=JDCT_FLOAT;
<   option=GetImageOption(image_info,"jpeg:dct-method");
<   if (option != (const char *) NULL)
<     switch (*option)
---
>   dct_method=GetImageOption(image_info,"jpeg:dct-method");
>   if (dct_method != (const char *) NULL)
>     switch (*dct_method)
1246c1246
<         if (LocaleCompare(option,"default") == 0)
---
>         if (LocaleCompare(dct_method,"default") == 0)
<略>
>   if ((dct_method == (const char *) NULL) && (quality <= 90))
>     jpeg_info.dct_method=JDCT_IFAST;
  • coders/miff.c
    • 型指定の修正
183a184,186
>   magick_attribute((__malloc__));
>
> static void *AcquireBZIPMemory(void *context,int items,int size)
190a194,196
>   magick_attribute((__malloc__));
>
> static void *AcquireLZMAMemory(void *context,size_t items,size_t size)
197a204,206
>   unsigned int size) magick_attribute((__malloc__));
>
> static voidpf AcquireZIPMemory(voidpf context,unsigned int items,
  • coders/msl.c
    • MSDWarning と MSLError の attribute 指定(print書式を間違えると警告がでるのと同じ?)
7568a7569,7571
>   magick_attribute((__format__ (__printf__,2,3)));
>
> static void MSLWarning(void *context,const char *format,...)
7600a7604,7606
>   magick_attribute((__format__ (__printf__,2,3)));
>
> static void MSLError(void *context,const char *format,...)
|<<

** ChangeLog

>||
2018-12-01  6.9.10-15 Cristy  <quetzlzacatenango@image...>
  * Release ImageMagick version 6.9.10-15, GIT revision 14011:ddd5bd95d:20181201