[prev in list] [next in list] [prev in thread] [next in thread] 

List:       graphicsmagick-commit
Subject:    [GM-commit] GraphicsMagick: 2 new changesets
From:       GraphicsMagick Commits <graphicsmagick-commit () lists ! sourceforge ! net>
Date:       2020-12-20 16:00:34
Message-ID: mailman.247549.1608503216.1535.graphicsmagick-commit () lists ! sourceforge ! net
[Download RAW message or body]

changeset 90d824a10ed0 in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=90d824a10ed0
                
summary: _MagickReallocateResourceLimitedMemory(): Add a 'clear' parameter which \
indicates that freshly allocated memory should be zeroed.

changeset 90767e582d9a in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=90767e582d9a
                
summary: PICT: Use managed memory allocators.

diffstat:

 ChangeLog                              |  11 +++++++
 VisualMagick/installer/inc/version.isx |   4 +-
 coders/pict.c                          |  48 +++++++++++++++++-----------------
 magick/memory-private.h                |  36 ++++++++++++++----------
 magick/memory.c                        |  22 ++++++++++++---
 magick/version.h                       |   4 +-
 www/Changelog.html                     |  12 ++++++++
 www/api/memory.html                    |   4 +-
 8 files changed, 91 insertions(+), 50 deletions(-)

diffs (380 lines):

diff -r d0bec4b70329 -r 90767e582d9a ChangeLog
--- a/ChangeLog	Sat Dec 19 15:54:34 2020 -0600
+++ b/ChangeLog	Sun Dec 20 10:00:30 2020 -0600
@@ -1,3 +1,14 @@
+2020-12-20  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
+
+	* coders/pict.c (ReadPICTImage): Use managed memory allocators.
+	(WritePICTImage): Use managed memory allocators.
+
+	* magick/memory.c (_MagickReallocateResourceLimitedMemory): Add a
+	'clear' parameter which indicates that freshly allocated memory
+	should be zeroed.  Added "Cleared" versions of the private managed
+	memory macros and updated all managed memory macros to exclusively
+	use this function.
+
 2020-12-19  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>
 
 	* Update Automake to 1.16.3 and bootstrap to pick up latest
diff -r d0bec4b70329 -r 90767e582d9a VisualMagick/installer/inc/version.isx
--- a/VisualMagick/installer/inc/version.isx	Sat Dec 19 15:54:34 2020 -0600
+++ b/VisualMagick/installer/inc/version.isx	Sun Dec 20 10:00:30 2020 -0600
@@ -10,5 +10,5 @@
 
 #define public MagickPackageName "GraphicsMagick"
 #define public MagickPackageVersion "1.4"
-#define public MagickPackageVersionAddendum ".020201219"
-#define public MagickPackageReleaseDate "snapshot-20201219"
+#define public MagickPackageVersionAddendum ".020201220"
+#define public MagickPackageReleaseDate "snapshot-20201220"
diff -r d0bec4b70329 -r 90767e582d9a coders/pict.c
--- a/coders/pict.c	Sat Dec 19 15:54:34 2020 -0600
+++ b/coders/pict.c	Sun Dec 20 10:00:30 2020 -0600
@@ -881,7 +881,7 @@
     Allocate pixel and scanline buffer.
   */
   allocated_pixels=MagickArraySize(image->rows,row_bytes);
-  pixels=MagickAllocateClearedMemory(unsigned char *,allocated_pixels);
+  pixels=MagickAllocateResourceLimitedClearedMemory(unsigned char \
*,allocated_pixels);  if (pixels == (unsigned char *) NULL)
     {
       ThrowException(&image->exception,ResourceLimitError,MemoryAllocationFailed,
@@ -896,7 +896,7 @@
   else
     scanline_alloc = 65536U+256U; /* Allocate extra for RLE over-run */
 
-  scanline=MagickAllocateClearedMemory(unsigned char *,scanline_alloc);
+  scanline=MagickAllocateResourceLimitedClearedMemory(unsigned char \
*,scanline_alloc);  if (scanline == (unsigned char *) NULL)
     {
       ThrowException(&image->exception,ResourceLimitError,MemoryAllocationFailed,
@@ -922,7 +922,7 @@
           p=ExpandBuffer(expand_buffer,scanline,&number_pixels,bits_per_pixel);
           (void) memcpy(q,p,number_pixels);
         }
-      MagickFreeMemory(scanline);
+      MagickFreeResourceLimitedMemory(scanline);
       return(pixels);
     }
   /*
@@ -990,13 +990,13 @@
             j+=bytes_per_pixel+1;
           }
     }
-  MagickFreeMemory(scanline);
+  MagickFreeResourceLimitedMemory(scanline);
   return (pixels);
 
  decode_error_exit:
 
-  MagickFreeMemory(scanline);
-  MagickFreeMemory(pixels);
+  MagickFreeResourceLimitedMemory(scanline);
+  MagickFreeResourceLimitedMemory(pixels);
   return (unsigned char *) NULL;
 }
 
@@ -1690,7 +1690,7 @@
                                               image->columns,image->rows))
                     break;
             }
-            MagickFreeMemory(pixels);
+            MagickFreeResourceLimitedMemory(pixels);
             if (tile_image->exception.severity > image->exception.severity)
               CopyException(&image->exception,&tile_image->exception);
             if ((tile_image->exception.severity < ErrorException) && (jpeg == \
False)) @@ -1732,7 +1732,7 @@
             length-=Min(4,length);
             if (length == 0)
               break;
-            info=MagickAllocateMemory(unsigned char *,length);
+            info=MagickAllocateResourceLimitedMemory(unsigned char *,length);
             if (info == (unsigned char *) NULL)
               break;
             (void) ReadBlob(image,length,info);
@@ -1744,7 +1744,7 @@
                   break;
                 if (SetImageProfile(image,"ICM",info,length) == MagickFail)
                   ThrowPICTReaderException(ResourceLimitError,MemoryAllocationFailed,image);
                
-                MagickFreeMemory(info);
+                MagickFreeResourceLimitedMemory(info);
                 break;
               }
               case 0x1f2:
@@ -1753,13 +1753,13 @@
                   break;
                 if (SetImageProfile(image,"IPTC",info,length) == MagickFail)
                   ThrowPICTReaderException(ResourceLimitError,MemoryAllocationFailed,image);
                
-                MagickFreeMemory(info);
+                MagickFreeResourceLimitedMemory(info);
                 break;
               }
               default:
                 break;
             }
-            MagickFreeMemory(info);
+            MagickFreeResourceLimitedMemory(info);
             break;
           }
           default:
@@ -1814,7 +1814,7 @@
             for (i=0; i < 122; i++)
               if (ReadBlobByte(image) == EOF)
                 ThrowPICTReaderException(CorruptImageError,UnexpectedEndOfFile,image);
                
-            if ((blob_alloc=MagickAllocateMemory(void *,blob_alloc_size)) == (void \
*) NULL) +            if ((blob_alloc=MagickAllocateResourceLimitedMemory(void \
                *,blob_alloc_size)) == (void *) NULL)
               ThrowPICTReaderException(ResourceLimitError,MemoryAllocationFailed,image);
  blob=blob_alloc;
             clone_info=CloneImageInfo(image_info);
@@ -1823,7 +1823,7 @@
             (void) strlcpy(clone_info->filename,"JPEG:",sizeof(clone_info->filename));
                
             if (ReadBlobZC(image,blob_alloc_size,&blob) != blob_alloc_size)
               {
-                MagickFreeMemory(blob_alloc);
+                MagickFreeResourceLimitedMemory(blob_alloc);
                 ThrowPICTReaderException(CorruptImageError,UnexpectedEndOfFile,image);
  }
             if (blob != blob_alloc)
@@ -1835,7 +1835,7 @@
             tile_image=BlobToImage(clone_info, blob, blob_alloc_size, \
&image->exception );  DestroyImageInfo(clone_info);
             clone_info=(ImageInfo *) NULL;
-            MagickFreeMemory(blob_alloc);
+            MagickFreeResourceLimitedMemory(blob_alloc);
           }
         if (tile_image == (Image *) NULL)
           continue;
@@ -2021,9 +2021,9 @@
 */
 #define LiberatePICTAllocations()               \
   {                                             \
-    MagickFreeMemory(buffer);                   \
-    MagickFreeMemory(packed_scanline);          \
-    MagickFreeMemory(scanline);                 \
+    MagickFreeResourceLimitedMemory(buffer);                   \
+    MagickFreeResourceLimitedMemory(packed_scanline);          \
+    MagickFreeResourceLimitedMemory(scanline);                 \
   }
 #define ThrowPICTWriterException(code_,reason_,image_)  \
   {                                                     \
@@ -2176,9 +2176,9 @@
   if ((row_bytes >= (size_t) SIZE_MAX/2) || (bytes_per_line == 0) ||
       (bytes_per_line > 0x7FFFU) || ((row_bytes+MaxCount*2U) >= 0x7FFFU))
     ThrowPICTWriterException(CoderError,UnsupportedNumberOfColumns,image);
-  buffer=MagickAllocateMemory(unsigned char *,PictInfoSize);
-  packed_scanline=MagickAllocateMemory(unsigned char *,(row_bytes+MaxCount*2U));
-  scanline=MagickAllocateMemory(unsigned char *,row_bytes);
+  buffer=MagickAllocateResourceLimitedMemory(unsigned char *,PictInfoSize);
+  packed_scanline=MagickAllocateResourceLimitedMemory(unsigned char \
*,(row_bytes+MaxCount*2U)); +  scanline=MagickAllocateResourceLimitedMemory(unsigned \
char *,row_bytes);  if ((buffer == (unsigned char *) NULL) ||
       (packed_scanline == (unsigned char *) NULL) ||
       (scanline == (unsigned char *) NULL))
@@ -2328,7 +2328,7 @@
       (void) WriteBlob(image,length,blob);
       if (length & 0x01)
         (void) WriteBlobByte(image,'\0');
-      MagickFreeMemory(blob);
+      MagickFreeResourceLimitedMemory(blob);
     }
   /*
     Write picture opcode, row bytes, and picture bounding box, and version.
@@ -2473,9 +2473,9 @@
   offset=TellBlob(image);
   (void) SeekBlob(image,512,SEEK_SET);
   (void) WriteBlobMSBShort(image,(unsigned long) offset);
-  MagickFreeMemory(scanline);
-  MagickFreeMemory(packed_scanline);
-  MagickFreeMemory(buffer);
+  MagickFreeResourceLimitedMemory(scanline);
+  MagickFreeResourceLimitedMemory(packed_scanline);
+  MagickFreeResourceLimitedMemory(buffer);
   CloseBlob(image);
   return(True);
 }
diff -r d0bec4b70329 -r 90767e582d9a magick/memory-private.h
--- a/magick/memory-private.h	Sat Dec 19 15:54:34 2020 -0600
+++ b/magick/memory-private.h	Sun Dec 20 10:00:30 2020 -0600
@@ -16,10 +16,10 @@
   MagickArraySize(const size_t count,const size_t size) MAGICK_FUNC_CONST;
 
 extern MagickExport
-  void *_MagickReallocateResourceLimitedMemory(void *p,size_t count, size_t size);
+  void *_MagickReallocateResourceLimitedMemory(void *p,const size_t count,const \
size_t size,const MagickBool clear);  
 extern MagickExport
-  void *_MagickAllocateResourceLimitedMemory(size_t size);
+  void *_MagickAllocateResourceLimitedMemory(const size_t size);
 
 extern MagickExport
   void _MagickFreeResourceLimitedMemory(void *p);
@@ -52,27 +52,33 @@
 }
 
 /*
-  Allocate memory (resource limited)
+  Allocate/Reallocate/Free memory (resource limited)
  */
-#define MagickAllocateResourceLimitedMemory(type,size)           \
-  ((((size) != ((size_t) (size))) || (size == 0)) ? ((type) 0) : \
-   ((type) _MagickAllocateResourceLimitedMemory((size_t) (size))))
+#define MagickAllocateResourceLimitedMemory(type,size)                  \
+  ((((size) != ((size_t) (size))) || (size == 0)) ? ((type) 0) :        \
+   ((type) _MagickReallocateResourceLimitedMemory(0,1,(size_t) (size),MagickFalse)))
 
-#define MagickAllocateResourceLimitedArray(type,count,size)     \
-  ((type) _MagickReallocateResourceLimitedMemory(0,(size_t) (count),(size_t) \
(size))) +#define MagickAllocateResourceLimitedClearedMemory(type,size)           \
+  ((((size) != ((size_t) (size))) || (size == 0)) ? ((type) 0) :        \
+   ((type) _MagickReallocateResourceLimitedMemory(0,1,(size_t) (size),MagickTrue)))
+
+#define MagickAllocateResourceLimitedArray(type,count,size)             \
+  ((type) _MagickReallocateResourceLimitedMemory(0,(size_t) (count),(size_t) \
(size),MagickFalse)) +
+#define MagickAllocateResourceLimitedClearedArray(type,count,size)      \
+  ((type) _MagickReallocateResourceLimitedMemory(0,(size_t) (count),(size_t) \
(size),MagickTrue))  
 #define MagickReallocateResourceLimitedMemory(type,memory,size)         \
-  ((type) _MagickReallocateResourceLimitedMemory(memory,1,(size_t) (size)))
+  ((type) _MagickReallocateResourceLimitedMemory(memory,1,(size_t) \
(size),MagickFalse))  
 #define MagickReallocateResourceLimitedArray(type,memory,count,size)    \
-  ((type) _MagickReallocateResourceLimitedMemory(memory,(size_t) (count),(size_t) \
(size))) +  ((type) _MagickReallocateResourceLimitedMemory(memory,(size_t) \
(count),(size_t) (size),MagickFalse)) +
+#define MagickReallocateResourceLimitedClearedArray(type,memory,count,size) \
+  ((type) _MagickReallocateResourceLimitedMemory(memory,(size_t) (count),(size_t) \
(size),MagickTrue))  
 #define MagickFreeResourceLimitedMemory(memory) \
-  {                                             \
-    void *_magick_mp=memory;                    \
-    _MagickFreeResourceLimitedMemory(_magick_mp);      \
-    memory=0;                                   \
-  }
+  memory=_MagickReallocateResourceLimitedMemory(memory,0,0,MagickFalse);
 
 /*
   Reallocate memory using provided pointer.  If reallocation fails
diff -r d0bec4b70329 -r 90767e582d9a magick/memory.c
--- a/magick/memory.c	Sat Dec 19 15:54:34 2020 -0600
+++ b/magick/memory.c	Sun Dec 20 10:00:30 2020 -0600
@@ -639,7 +639,8 @@
 
 /*
   Reallocate resource-limited array memory based on pointer to
-  existing allocation, object count, and object size.
+  existing allocation, object count, and object size.  Freshly
+  allocated memory is cleared to zero if the clear flag is set.
 
   This works like MagickRealloc() except for supporting count and size
   arguments similar to calloc().  GNU libc has a reallocarray()
@@ -652,7 +653,10 @@
 
   Linux malloc produces allocations aligned to 16-bytes.
  */
-MagickExport void *_MagickReallocateResourceLimitedMemory(void *p,size_t count, \
size_t size) +MagickExport void *_MagickReallocateResourceLimitedMemory(void *p,
+                                                          const size_t count,
+                                                          const size_t size,
+                                                          const MagickBool clear)
 {
   MagickMemoryResource_T memory_resource;
   size_t size_diff;
@@ -714,6 +718,10 @@
                                                  \
new_size+sizeof(MagickMemoryResource_T));  if (realloc_memory != 0)
                     {
+                      if (clear)
+                        (void) memset(UserLandPointerGivenBaseAlloc(realloc_memory)+
+                                      memory_resource.alloc_size,0,size_diff);
+
                       memory_resource.memory = realloc_memory;
                       memory_resource.alloc_size = new_size;
                       memory_resource.alloc_size_real = new_size;
@@ -729,6 +737,10 @@
                 }
               else
                 {
+                   if (clear)
+                     (void) \
memset(UserLandPointerGivenBaseAlloc(memory_resource.memory)+ +                       \
memory_resource.alloc_size,0,size_diff); +
                   /* Re-allocation is not required */
                   memory_resource.alloc_size = new_size;
                 }
@@ -772,9 +784,9 @@
 
   Memory must be released using MagickFreeMemoryResource().
 */
-MagickExport void *_MagickAllocateResourceLimitedMemory(size_t size)
+MagickExport void *_MagickAllocateResourceLimitedMemory(const size_t size)
 {
-    return _MagickReallocateResourceLimitedMemory(0,1,size);
+  return _MagickReallocateResourceLimitedMemory(0,1,size,MagickFalse);
 }
 
 /*
@@ -785,5 +797,5 @@
 */
 MagickExport void _MagickFreeResourceLimitedMemory(void *p)
 {
-    _MagickReallocateResourceLimitedMemory(p,0,0);
+  _MagickReallocateResourceLimitedMemory(p,0,0,MagickFalse);
 }
diff -r d0bec4b70329 -r 90767e582d9a magick/version.h
--- a/magick/version.h	Sat Dec 19 15:54:34 2020 -0600
+++ b/magick/version.h	Sun Dec 20 10:00:30 2020 -0600
@@ -38,8 +38,8 @@
 #define MagickLibVersion  0x242100
 #define MagickLibVersionText  "1.4"
 #define MagickLibVersionNumber 24,21,0
-#define MagickChangeDate   "20201219"
-#define MagickReleaseDate  "snapshot-20201219"
+#define MagickChangeDate   "20201220"
+#define MagickReleaseDate  "snapshot-20201220"
 
 /*
   The MagickLibInterfaceNewest and MagickLibInterfaceOldest defines
diff -r d0bec4b70329 -r 90767e582d9a www/Changelog.html
--- a/www/Changelog.html	Sat Dec 19 15:54:34 2020 -0600
+++ b/www/Changelog.html	Sun Dec 20 10:00:30 2020 -0600
@@ -35,6 +35,18 @@
 <div class="document">
 
 
+<p>2020-12-20  Bob Friesenhahn  &lt;<a class="reference external" \
href="mailto:bfriesen&#37;&#52;&#48;simple&#46;dallas&#46;tx&#46;us">bfriesen<span>&#6 \
4;</span>simple<span>&#46;</span>dallas<span>&#46;</span>tx<span>&#46;</span>us</a>&gt;</p>
 +<blockquote>
+<ul class="simple">
+<li>coders/pict.c (ReadPICTImage): Use managed memory allocators.
+(WritePICTImage): Use managed memory allocators.</li>
+<li>magick/memory.c (_MagickReallocateResourceLimitedMemory): Add a
+'clear' parameter which indicates that freshly allocated memory
+should be zeroed.  Added &quot;Cleared&quot; versions of the private managed
+memory macros and updated all managed memory macros to exclusively
+use this function.</li>
+</ul>
+</blockquote>
 <p>2020-12-19  Bob Friesenhahn  &lt;<a class="reference external" \
href="mailto:bfriesen&#37;&#52;&#48;simple&#46;dallas&#46;tx&#46;us">bfriesen<span>&#6 \
4;</span>simple<span>&#46;</span>dallas<span>&#46;</span>tx<span>&#46;</span>us</a>&gt;</p>
  <blockquote>
 <ul class="simple">
diff -r d0bec4b70329 -r 90767e582d9a www/api/memory.html
--- a/www/api/memory.html	Sat Dec 19 15:54:34 2020 -0600
+++ b/www/api/memory.html	Sun Dec 20 10:00:30 2020 -0600
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" \
/> +<meta name="generator" content="Docutils 0.16: http://docutils.sourceforge.net/" \
/>  <title>memory</title>
 <link rel="stylesheet" href="../docutils-api.css" type="text/css" />
 </head>
@@ -37,7 +37,7 @@
 <h2 class="subtitle" id="memory-allocation-deallocation-functions">Memory \
allocation/deallocation functions</h2>  
 <div class="contents topic" id="contents">
-<p class="topic-title first">Contents</p>
+<p class="topic-title">Contents</p>
 <ul class="simple">
 <li><a class="reference internal" href="#magickallocfunctions" \
id="id15">MagickAllocFunctions</a></li>  <li><a class="reference internal" \
href="#magickmalloc" id="id16">MagickMalloc</a></li>


_______________________________________________
Graphicsmagick-commit mailing list
Graphicsmagick-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/graphicsmagick-commit


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic