#include "MagickCore/exception-private.h"
#include "MagickCore/cache.h"
#include "MagickCore/client.h"
+#include "MagickCore/coder-private.h"
#include "MagickCore/colorspace-private.h"
#include "MagickCore/constitute.h"
#include "MagickCore/constitute-private.h"
#include "MagickCore/transform.h"
#include "MagickCore/utility.h"
#include "MagickCore/utility-private.h"
-
-static MagickBooleanType IsCoderAuthorized(const MagickInfo *magick_info,
- const PolicyRights rights,const char *filename,ExceptionInfo *exception)
-{
- MagickBooleanType
- status;
-
- PolicyDomain
- domain;
-
- if (magick_info == (MagickInfo *) NULL)
- return(MagickTrue);
- domain=CoderPolicyDomain;
- status=IsRightsAuthorized(domain,rights,magick_info->module);
- if (status == MagickFalse)
- {
- errno=EPERM;
- (void) ThrowMagickException(exception,GetMagickModule(),PolicyError,
- "NotAuthorized","`%s'",filename);
- }
- return(status);
-}
\f
/*
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ImageInfo
*read_info;
+ MagickBooleanType
+ status;
+
MagickStatusType
flags;
sans_exception=DestroyExceptionInfo(sans_exception);
if (magick_info != (const MagickInfo *) NULL)
{
- if (IsCoderAuthorized(magick_info,ReadPolicyRights,read_info->filename,
- exception) == MagickFalse)
- {
- read_info=DestroyImageInfo(read_info);
- return((Image *) NULL);
- }
if (GetMagickEndianSupport(magick_info) == MagickFalse)
read_info->endian=UndefinedEndian;
else
(void) CopyMagickString(read_info->filename,filename,
MagickPathExtent);
magick_info=GetMagickInfo(read_info->magick,exception);
- if (IsCoderAuthorized(magick_info,ReadPolicyRights,
- read_info->filename,exception) == MagickFalse)
- {
- read_info=DestroyImageInfo(read_info);
- return((Image *) NULL);
- }
decoder=GetImageDecoder(magick_info);
}
}
if (decoder != (DecodeImageHandler *) NULL)
{
+ /*
+ Call appropriate image reader based on image type.
+ */
if (GetMagickDecoderThreadSupport(magick_info) == MagickFalse)
LockSemaphoreInfo(magick_info->semaphore);
- image=decoder(read_info,exception);
+ status=IsCoderAuthorized(magick_info->module,read_info->magick,
+ ReadPolicyRights,exception);
+ image=(Image *) NULL;
+ if (status != MagickFalse)
+ image=decoder(read_info,exception);
if (GetMagickDecoderThreadSupport(magick_info) == MagickFalse)
UnlockSemaphoreInfo(magick_info->semaphore);
}
read_info=DestroyImageInfo(read_info);
return((Image *) NULL);
}
- if (IsCoderAuthorized(magick_info,ReadPolicyRights,
- read_info->filename,exception) == MagickFalse)
- {
- read_info=DestroyImageInfo(read_info);
- return((Image *) NULL);
- }
+ /*
+ Call appropriate image reader based on image type.
+ */
if (GetMagickDecoderThreadSupport(magick_info) == MagickFalse)
LockSemaphoreInfo(magick_info->semaphore);
- image=decoder(read_info,exception);
+ status=IsCoderAuthorized(magick_info->module,read_info->magick,
+ ReadPolicyRights,exception);
+ image=(Image *) NULL;
+ if (status != MagickFalse)
+ image=(decoder)(read_info,exception);
if (GetMagickDecoderThreadSupport(magick_info) == MagickFalse)
UnlockSemaphoreInfo(magick_info->semaphore);
}
sans_exception=DestroyExceptionInfo(sans_exception);
if (magick_info != (const MagickInfo *) NULL)
{
- if (IsCoderAuthorized(magick_info,WritePolicyRights,filename,
- exception) == MagickFalse)
- {
- write_info=DestroyImageInfo(write_info);
- return(MagickFalse);
- }
if (GetMagickEndianSupport(magick_info) == MagickFalse)
image->endian=UndefinedEndian;
else
*/
if (GetMagickEncoderThreadSupport(magick_info) == MagickFalse)
LockSemaphoreInfo(magick_info->semaphore);
- status=encoder(write_info,image,exception);
+ status=IsCoderAuthorized(magick_info->module,write_info->magick,
+ WritePolicyRights,exception);
+ if (status != MagickFalse)
+ status=encoder(write_info,image,exception);
if (GetMagickEncoderThreadSupport(magick_info) == MagickFalse)
UnlockSemaphoreInfo(magick_info->semaphore);
}
"`%s'",write_info->magick);
}
if (encoder != (EncodeImageHandler *) NULL)
- status=IsCoderAuthorized(magick_info,WritePolicyRights,filename,
- exception);
- else
- status=MagickFalse;
- if (status != MagickFalse)
{
/*
Call appropriate image writer based on image type.
*/
if (GetMagickEncoderThreadSupport(magick_info) == MagickFalse)
LockSemaphoreInfo(magick_info->semaphore);
- status=encoder(write_info,image,exception);
+ status=IsCoderAuthorized(magick_info->module,write_info->magick,
+ WritePolicyRights,exception);
+ if (status != MagickFalse)
+ status=encoder(write_info,image,exception);
if (GetMagickEncoderThreadSupport(magick_info) == MagickFalse)
UnlockSemaphoreInfo(magick_info->semaphore);
}