~ubuntu-branches/ubuntu/raring/gimp/raring-updates

« back to all changes in this revision

Viewing changes to debian/patches/CVE-2013-1978.patch

  • Committer: Package Import Robot
  • Author(s): Marc Deslauriers
  • Date: 2013-12-06 13:26:35 UTC
  • Revision ID: package-import@ubuntu.com-20131206132635-qpa5qocyku0xtpey
Tags: 2.8.4-1ubuntu1.1
* SECURITY UPDATE: denial of service and possible code execution via
  huge color maps in xwd plugin
  - debian/patches/CVE-2013-1913.patch: limit number of color map entries
    in plug-ins/common/file-xwd.c.
  - CVE-2013-1913
* SECURITY UPDATE: denial of service and possible code execution via
  large number of color map entries in xwd plugin
  - debian/patches/CVE-2013-1978.patch: validate number of color map
    entries in plug-ins/common/file-xwd.c
  - CVE-2013-1978

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
From 23f685931e5f000dd033a45c60c1e60d7f78caf4 Mon Sep 17 00:00:00 2001
 
2
From: Nils Philippsen <nils@redhat.com>
 
3
Date: Tue, 26 Nov 2013 09:49:42 +0000
 
4
Subject: file-xwd: sanity check # of colors and map entries (CVE-2013-1978)
 
5
 
 
6
The number of colors in an image shouldn't be higher than the number of
 
7
colormap entries. Additionally, consolidate post error cleanup in
 
8
load_image().
 
9
---
 
10
Index: gimp-2.8.6/plug-ins/common/file-xwd.c
 
11
===================================================================
 
12
--- gimp-2.8.6.orig/plug-ins/common/file-xwd.c  2013-12-06 13:16:51.986863267 -0500
 
13
+++ gimp-2.8.6/plug-ins/common/file-xwd.c       2013-12-06 13:16:51.974863208 -0500
 
14
@@ -422,9 +422,9 @@
 
15
 load_image (const gchar  *filename,
 
16
             GError      **error)
 
17
 {
 
18
-  FILE            *ifp;
 
19
+  FILE            *ifp = NULL;
 
20
   gint             depth, bpp;
 
21
-  gint32           image_ID;
 
22
+  gint32           image_ID = -1;
 
23
   L_XWDFILEHEADER  xwdhdr;
 
24
   L_XWDCOLOR      *xwdcolmap = NULL;
 
25
 
 
26
@@ -434,7 +434,7 @@
 
27
       g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno),
 
28
                    _("Could not open '%s' for reading: %s"),
 
29
                    gimp_filename_to_utf8 (filename), g_strerror (errno));
 
30
-      return -1;
 
31
+      goto out;
 
32
     }
 
33
 
 
34
   read_xwd_header (ifp, &xwdhdr);
 
35
@@ -443,8 +443,7 @@
 
36
       g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
 
37
                    _("Could not read XWD header from '%s'"),
 
38
                    gimp_filename_to_utf8 (filename));
 
39
-      fclose (ifp);
 
40
-      return -1;
 
41
+      goto out;
 
42
     }
 
43
 
 
44
 #ifdef XWD_COL_WAIT_DEBUG
 
45
@@ -466,12 +465,18 @@
 
46
       g_message (_("'%s':\nIllegal number of colormap entries: %ld"),
 
47
                  gimp_filename_to_utf8 (filename),
 
48
                  (long)xwdhdr.l_colormap_entries);
 
49
-      fclose (ifp);
 
50
-      return -1;
 
51
+      goto out;
 
52
     }
 
53
 
 
54
   if (xwdhdr.l_colormap_entries > 0)
 
55
     {
 
56
+      if (xwdhdr.l_colormap_entries < xwdhdr.l_ncolors)
 
57
+        {
 
58
+          g_message (_("'%s':\nNumber of colormap entries < number of colors"),
 
59
+                     gimp_filename_to_utf8 (filename));
 
60
+          goto out;
 
61
+        }
 
62
+
 
63
       xwdcolmap = g_new (L_XWDCOLOR, xwdhdr.l_colormap_entries);
 
64
 
 
65
       read_xwd_cols (ifp, &xwdhdr, xwdcolmap);
 
66
@@ -491,9 +496,7 @@
 
67
       if (xwdhdr.l_file_version != 7)
 
68
         {
 
69
           g_message (_("Can't read color entries"));
 
70
-          g_free (xwdcolmap);
 
71
-          fclose (ifp);
 
72
-          return (-1);
 
73
+          goto out;
 
74
         }
 
75
     }
 
76
 
 
77
@@ -501,9 +504,7 @@
 
78
     {
 
79
       g_message (_("'%s':\nNo image width specified"),
 
80
                  gimp_filename_to_utf8 (filename));
 
81
-      g_free (xwdcolmap);
 
82
-      fclose (ifp);
 
83
-      return (-1);
 
84
+      goto out;
 
85
     }
 
86
 
 
87
   if (xwdhdr.l_pixmap_width > GIMP_MAX_IMAGE_SIZE
 
88
@@ -511,27 +512,21 @@
 
89
     {
 
90
       g_message (_("'%s':\nImage width is larger than GIMP can handle"),
 
91
                  gimp_filename_to_utf8 (filename));
 
92
-      g_free (xwdcolmap);
 
93
-      fclose (ifp);
 
94
-      return (-1);
 
95
+      goto out;
 
96
     }
 
97
 
 
98
   if (xwdhdr.l_pixmap_height <= 0)
 
99
     {
 
100
       g_message (_("'%s':\nNo image height specified"),
 
101
                  gimp_filename_to_utf8 (filename));
 
102
-      g_free (xwdcolmap);
 
103
-      fclose (ifp);
 
104
-      return (-1);
 
105
+      goto out;
 
106
     }
 
107
 
 
108
   if (xwdhdr.l_pixmap_height > GIMP_MAX_IMAGE_SIZE)
 
109
     {
 
110
       g_message (_("'%s':\nImage height is larger than GIMP can handle"),
 
111
                  gimp_filename_to_utf8 (filename));
 
112
-      g_free (xwdcolmap);
 
113
-      fclose (ifp);
 
114
-      return (-1);
 
115
+      goto out;
 
116
     }
 
117
 
 
118
   gimp_progress_init_printf (_("Opening '%s'"),
 
119
@@ -580,11 +575,6 @@
 
120
     }
 
121
   gimp_progress_update (1.0);
 
122
 
 
123
-  fclose (ifp);
 
124
-
 
125
-  if (xwdcolmap)
 
126
-    g_free (xwdcolmap);
 
127
-
 
128
   if (image_ID == -1 && ! (error && *error))
 
129
     g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED,
 
130
                  _("XWD-file %s has format %d, depth %d and bits per pixel %d. "
 
131
@@ -592,6 +582,17 @@
 
132
                  gimp_filename_to_utf8 (filename),
 
133
                  (gint) xwdhdr.l_pixmap_format, depth, bpp);
 
134
 
 
135
+out:
 
136
+  if (ifp)
 
137
+    {
 
138
+      fclose (ifp);
 
139
+    }
 
140
+
 
141
+  if (xwdcolmap)
 
142
+    {
 
143
+      g_free (xwdcolmap);
 
144
+    }
 
145
+
 
146
   return image_ID;
 
147
 }
 
148