File ImageMagick-CVE-2017-10928.patch of Package ImageMagick.23974

Index: ImageMagick-6.8.8-1/magick/token.c
===================================================================
--- ImageMagick-6.8.8-1.orig/magick/token.c	2018-05-25 15:04:36.712445752 +0200
+++ ImageMagick-6.8.8-1/magick/token.c	2018-05-25 15:04:37.816461513 +0200
@@ -175,10 +175,14 @@ MagickExport void GetMagickToken(const c
 
   register ssize_t
     i;
+  
+  size_t
+    length;
 
   assert(start != (const char *) NULL);
   assert(token != (char *) NULL);
   i=0;
+  length=strlen(start);
   for (p=start; *p != '\0'; )
   {
     while ((isspace((int) ((unsigned char) *p)) != 0) && (*p != '\0'))
@@ -214,6 +218,8 @@ MagickExport void GetMagickToken(const c
                 break;
               }
           token[i++]=(*p);
+          if ((p-start) >= length)
+            break;
         }
         break;
       }
@@ -234,7 +240,11 @@ MagickExport void GetMagickToken(const c
         if ((p != q) && (*p != ','))
           {
             for ( ; (p < q) && (*p != ','); p++)
+            {
               token[i++]=(*p);
+              if ((p-start) >= length)
+                break;
+            }
             if (*p == '%')
               token[i++]=(*p++);
             break;
@@ -261,7 +271,11 @@ MagickExport void GetMagickToken(const c
               token[i++]=(*p);
               if ((*p == ')') && (*(p-1) != '\\'))
                 break;
+              if ((p-start) >= length)
+                break;
             }
+          if ((p-start) >= length)
+            break;
         }
         break;
       }
Index: ImageMagick-6.8.8-1/magick/draw.c
===================================================================
--- ImageMagick-6.8.8-1.orig/magick/draw.c	2018-05-25 15:04:37.708459970 +0200
+++ ImageMagick-6.8.8-1/magick/draw.c	2018-05-25 15:05:34.549271381 +0200
@@ -1713,9 +1713,13 @@ static void GetNextToken(const char *sta
   register ssize_t
     i;
 
+  size_t
+    length;
+
   assert(start != (const char *) NULL);
   assert(token != (char *) NULL);
   i=0;
+  length=strlen(start);
   p=start;
   while ((isspace((int) ((unsigned char) *p)) != 0) && (*p != '\0'))
     p++;
@@ -1751,6 +1755,8 @@ static void GetNextToken(const char *sta
             }
         if (i < (ssize_t) (extent-1))
           token[i++]=(*p);
+        if ((p-start) >= length)
+          break;
       }
       break;
     }
@@ -1773,8 +1779,12 @@ static void GetNextToken(const char *sta
       if ((p != q) && (*p != ','))
         {
           for ( ; (p < q) && (*p != ','); p++)
+          {
             if (i < (ssize_t) (extent-1))
               token[i++]=(*p);
+            if ((p-start) >= length)
+              break;
+          }
           if (*p == '%')
             if (i < (ssize_t) (extent-1))
               token[i++]=(*p++);
@@ -1805,7 +1815,11 @@ static void GetNextToken(const char *sta
               token[i++]=(*p);
             if ((*p == ')') && (*(p-1) != '\\'))
               break;
+            if ((p-start) >= length)
+              break;
           }
+        if ((p-start) >= length)
+          break;
       }
       break;
     }
Index: ImageMagick-6.8.8-1/coders/svg.c
===================================================================
--- ImageMagick-6.8.8-1.orig/coders/svg.c	2018-05-25 15:04:36.180438157 +0200
+++ ImageMagick-6.8.8-1/coders/svg.c	2018-05-25 15:07:03.342538891 +0200
@@ -2922,6 +2922,8 @@ static Image *ReadSVGImage(const ImageIn
             image->y_resolution);
         while ((n=ReadBlob(image,MaxTextExtent,message)) != 0)
         {
+          if (n == EOF)
+            break;
           error=(GError *) NULL;
           (void) rsvg_handle_write(svg_handle,message,n,&error);
           if (error != (GError *) NULL)
@@ -3122,6 +3124,8 @@ static Image *ReadSVGImage(const ImageIn
         message,n,image->filename);
       while ((n=ReadBlob(image,MaxTextExtent,message)) != 0)
       {
+        if (n == EOF)
+          break;
         status=xmlParseChunk(svg_info->parser,(char *) message,(int) n,0);
         if (status != 0)
           break;
openSUSE Build Service is sponsored by