From 04ff99576f1ebccfbafd5ddc35af2675afe1ad2a Mon Sep 17 00:00:00 2001 From: Dirk Lemstra <dirk@git.imagemagick.org> Date: Fri, 3 Nov 2017 21:23:29 +0100 Subject: [PATCH] Added decrement of limit when a resource could not be acquired. --- MagickCore/resource.c | 63 +++++++++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/MagickCore/resource.c b/MagickCore/resource.c index 27a5f9d2a..fc8e03ddd 100644 --- a/MagickCore/resource.c +++ b/MagickCore/resource.c @@ -192,8 +192,8 @@ MagickExport MagickBooleanType AcquireMagickResource(const ResourceType type, { resource_info.area=(MagickOffsetType) size; limit=resource_info.area_limit; - status=(resource_info.area_limit == MagickResourceInfinity) || - (size < limit) ? MagickTrue : MagickFalse; + if ((limit == MagickResourceInfinity) || (size < limit)) + status=MagickTrue; if (logging != MagickFalse) { (void) FormatMagickSize(size,MagickFalse,(const char *) NULL, @@ -209,9 +209,11 @@ MagickExport MagickBooleanType AcquireMagickResource(const ResourceType type, { resource_info.memory+=(MagickOffsetType) size; limit=resource_info.memory_limit; - status=(resource_info.memory_limit == MagickResourceInfinity) || - ((MagickSizeType) resource_info.memory < limit) ? MagickTrue : - MagickFalse; + if ((limit == MagickResourceInfinity) || + ((MagickSizeType) resource_info.memory < limit)) + status=MagickTrue; + else + resource_info.memory-=(MagickOffsetType) size; if (logging != MagickFalse) { (void) FormatMagickSize(size,MagickTrue,"B",MagickFormatExtent, @@ -227,8 +229,11 @@ MagickExport MagickBooleanType AcquireMagickResource(const ResourceType type, { resource_info.map+=(MagickOffsetType) size; limit=resource_info.map_limit; - status=(resource_info.map_limit == MagickResourceInfinity) || - ((MagickSizeType) resource_info.map < limit) ? MagickTrue : MagickFalse; + if ((limit == MagickResourceInfinity) || + ((MagickSizeType) resource_info.map < limit)) + status=MagickTrue; + else + resource_info.map-=(MagickOffsetType) size; if (logging != MagickFalse) { (void) FormatMagickSize(size,MagickTrue,"B",MagickFormatExtent, @@ -244,9 +249,11 @@ MagickExport MagickBooleanType AcquireMagickResource(const ResourceType type, { resource_info.disk+=(MagickOffsetType) size; limit=resource_info.disk_limit; - status=(resource_info.disk_limit == MagickResourceInfinity) || - ((MagickSizeType) resource_info.disk < limit) ? MagickTrue : - MagickFalse; + if ((limit == MagickResourceInfinity) || + ((MagickSizeType) resource_info.disk < limit)) + status=MagickTrue; + else + resource_info.disk-=(MagickOffsetType) size; if (logging != MagickFalse) { (void) FormatMagickSize(size,MagickTrue,"B",MagickFormatExtent, @@ -262,9 +269,11 @@ MagickExport MagickBooleanType AcquireMagickResource(const ResourceType type, { resource_info.file+=(MagickOffsetType) size; limit=resource_info.file_limit; - status=(resource_info.file_limit == MagickResourceInfinity) || - ((MagickSizeType) resource_info.file < limit) ? - MagickTrue : MagickFalse; + if ((limit == MagickResourceInfinity) || + ((MagickSizeType) resource_info.file < limit)) + status=MagickTrue; + else + resource_info.file-=(MagickOffsetType) size; if (logging != MagickFalse) { (void) FormatMagickSize(size,MagickFalse,(const char *) NULL, @@ -281,8 +290,8 @@ MagickExport MagickBooleanType AcquireMagickResource(const ResourceType type, { resource_info.height=(MagickOffsetType) size; limit=resource_info.height_limit; - status=(resource_info.height_limit == MagickResourceInfinity) || - (size < limit) ? MagickTrue : MagickFalse; + if ((limit == MagickResourceInfinity) || (size < limit)) + status=MagickTrue; if (logging != MagickFalse) { (void) FormatMagickSize(size,MagickFalse,"P",MagickFormatExtent, @@ -297,9 +306,9 @@ MagickExport MagickBooleanType AcquireMagickResource(const ResourceType type, case ThreadResource: { limit=resource_info.thread_limit; - status=(resource_info.thread_limit == MagickResourceInfinity) || - ((MagickSizeType) resource_info.thread < limit) ? - MagickTrue : MagickFalse; + if ((limit == MagickResourceInfinity) || + ((MagickSizeType) resource_info.thread < limit)) + status=MagickTrue; if (logging != MagickFalse) { (void) FormatMagickSize(size,MagickFalse,(const char *) NULL, @@ -315,9 +324,9 @@ MagickExport MagickBooleanType AcquireMagickResource(const ResourceType type, case ThrottleResource: { limit=resource_info.throttle_limit; - status=(resource_info.throttle_limit == MagickResourceInfinity) || - ((MagickSizeType) resource_info.throttle < limit) ? - MagickTrue : MagickFalse; + if ((limit == MagickResourceInfinity) || + ((MagickSizeType) resource_info.throttle < limit)) + status=MagickTrue; if (logging != MagickFalse) { (void) FormatMagickSize(size,MagickFalse,(const char *) NULL, @@ -334,9 +343,11 @@ MagickExport MagickBooleanType AcquireMagickResource(const ResourceType type, { resource_info.time+=(MagickOffsetType) size; limit=resource_info.time_limit; - status=(resource_info.time_limit == MagickResourceInfinity) || - ((MagickSizeType) resource_info.time < limit) ? - MagickTrue : MagickFalse; + if ((limit == MagickResourceInfinity) || + ((MagickSizeType) resource_info.time < limit)) + status=MagickTrue; + else + resource_info.time-=(MagickOffsetType) size; if (logging != MagickFalse) { (void) FormatMagickSize(size,MagickFalse,(const char *) NULL, @@ -353,8 +364,8 @@ MagickExport MagickBooleanType AcquireMagickResource(const ResourceType type, { resource_info.width=(MagickOffsetType) size; limit=resource_info.width_limit; - status=(resource_info.width_limit == MagickResourceInfinity) || - (size < limit) ? MagickTrue : MagickFalse; + if ((limit == MagickResourceInfinity) || (size < limit)) + status=MagickTrue; if (logging != MagickFalse) { (void) FormatMagickSize(size,MagickFalse,"P",MagickFormatExtent, -- 2.40.0