summaryrefslogtreecommitdiff
path: root/MagickCore/constitute.c
diff options
context:
space:
mode:
Diffstat (limited to 'MagickCore/constitute.c')
-rw-r--r--MagickCore/constitute.c44
1 files changed, 32 insertions, 12 deletions
diff --git a/MagickCore/constitute.c b/MagickCore/constitute.c
index a9e9ee483..5ae318e7e 100644
--- a/MagickCore/constitute.c
+++ b/MagickCore/constitute.c
@@ -17,7 +17,7 @@
% October 1998 %
% %
% %
-% Copyright 1999-2020 ImageMagick Studio LLC, a non-profit organization %
+% Copyright 1999-2021 ImageMagick Studio LLC, a non-profit organization %
% dedicated to making software imaging solutions freely available. %
% %
% You may not use this file except in compliance with the License. You may %
@@ -140,7 +140,7 @@ MagickExport Image *ConstituteImage(const size_t columns,const size_t rows,
MagickBooleanType
status;
- register ssize_t
+ ssize_t
i;
size_t
@@ -680,7 +680,7 @@ MagickExport Image *ReadImage(const ImageInfo *image_info,
next->taint=MagickFalse;
GetPathComponent(magick_filename,MagickPath,magick_path);
- if (*magick_path == '\0' && *next->magick == '\0')
+ if ((*magick_path == '\0') && (*next->magick == '\0'))
(void) CopyMagickString(next->magick,magick,MagickPathExtent);
(void) CopyMagickString(next->magick_filename,magick_filename,
MagickPathExtent);
@@ -834,12 +834,14 @@ MagickExport Image *ReadImage(const ImageInfo *image_info,
if ((flags & LessValue) != 0)
{
if (next->delay < (size_t) floor(geometry_info.rho+0.5))
- next->ticks_per_second=(ssize_t) floor(geometry_info.sigma+0.5);
+ next->ticks_per_second=CastDoubleToLong(floor(
+ geometry_info.sigma+0.5));
}
else
next->delay=(size_t) floor(geometry_info.rho+0.5);
if ((flags & SigmaValue) != 0)
- next->ticks_per_second=(ssize_t) floor(geometry_info.sigma+0.5);
+ next->ticks_per_second=CastDoubleToLong(floor(
+ geometry_info.sigma+0.5));
}
option=GetImageOption(image_info,"dispose");
if (option != (const char *) NULL)
@@ -1000,7 +1002,7 @@ MagickExport Image *ReadInlineImage(const ImageInfo *image_info,
size_t
length;
- register const char
+ const char
*p;
/*
@@ -1010,9 +1012,7 @@ MagickExport Image *ReadInlineImage(const ImageInfo *image_info,
for (p=content; (*p != ',') && (*p != '\0'); p++) ;
if (*p == '\0')
ThrowReaderException(CorruptImageError,"CorruptImage");
- p++;
- length=0;
- blob=Base64Decode(p,&length);
+ blob=Base64Decode(++p,&length);
if (length == 0)
{
blob=(unsigned char *) RelinquishMagickMemory(blob);
@@ -1023,6 +1023,26 @@ MagickExport Image *ReadInlineImage(const ImageInfo *image_info,
(void *) NULL);
*read_info->filename='\0';
*read_info->magick='\0';
+ for (p=content; (*p != '/') && (*p != '\0'); p++) ;
+ if (*p != '\0')
+ {
+ char
+ *q;
+
+ ssize_t
+ i;
+
+ /*
+ Extract media type.
+ */
+ if (LocaleNCompare(++p,"x-",2) == 0)
+ p+=2;
+ (void) strcpy(read_info->filename,"data.");
+ q=read_info->filename+5;
+ for (i=0; (*p != ';') && (*p != '\0') && (i < (MagickPathExtent-6)); i++)
+ *q++=(*p++);
+ *q++='\0';
+ }
image=BlobToImage(read_info,blob,length,exception);
blob=(unsigned char *) RelinquishMagickMemory(blob);
read_info=DestroyImageInfo(read_info);
@@ -1356,7 +1376,7 @@ MagickExport MagickBooleanType WriteImages(const ImageInfo *image_info,
MagickStatusType
status;
- register Image
+ Image
*p;
assert(image_info != (const ImageInfo *) NULL);
@@ -1383,7 +1403,7 @@ MagickExport MagickBooleanType WriteImages(const ImageInfo *image_info,
p=images;
for ( ; GetNextImageInList(p) != (Image *) NULL; p=GetNextImageInList(p))
{
- register Image
+ Image
*next;
next=GetNextImageInList(p);
@@ -1391,7 +1411,7 @@ MagickExport MagickBooleanType WriteImages(const ImageInfo *image_info,
break;
if (p->scene >= next->scene)
{
- register ssize_t
+ ssize_t
i;
/*