Attached please find the patches we're using for the update of the
package in woody.

Please
 . update the package in sid
 . mention the corresponding CVE ids in the changelog
 . tell me the version number of the fixed package
 . use priority=high
 . no need to upload into sarge directly, except if the version in
   sid is not meant to go into testing

Regards,

        Joey

-- 
The only stupid question is the unasked one.

Please always Cc to me when replying to me on the lists.
diff -u xli-1.17.0/debian/changelog xli-1.17.0/debian/changelog
--- xli-1.17.0/debian/changelog
+++ xli-1.17.0/debian/changelog
@@ -1,3 +1,14 @@
+xli (1.17.0-11woody1) stable-security; urgency=high
+
+  * Non-maintainer upload by the Security Team
+  * Applied patch from DSA 069 to fix buffer overflow in faces decoder
+    [faces.c, CAN-2001-0775]
+
+ -- Martin Schulze <[EMAIL PROTECTED]>  Fri, 18 Mar 2005 12:46:39 +0100
+
 xli (1.17.0-11) unstable; urgency=low
 
   * xli.1: eliminate mention of xsetbg and xview since they are not
only in patch2:
unchanged:
--- xli-1.17.0.orig/faces.c
+++ xli-1.17.0/faces.c
@@ -54,9 +54,15 @@
     if (! strcmp(buf, "\n"))
       break;
     if (!strncmp(buf, "FirstName:", 10))
-      strcpy(fname, buf + 11);
+      {
+       strncpy(fname, buf + 11, BUFSIZ - 1);
+       fname[BUFSIZ - 1] = '\0';
+      }
     else if (!strncmp(buf, "LastName:", 9))
-      strcpy(lname, buf + 10);
+      {
+       strncpy(lname, buf + 10, BUFSIZ - 1);
+       lname[BUFSIZ - 1] = '\0';
+      }
     else if (!strncmp(buf, "Image:", 6)) {
       if (sscanf(buf + 7, "%d%d%d", &iw, &ih, &id) != 3) {
        fprintf(stderr,"facesLoad: %s - Bad image\n", name);
@@ -117,7 +123,7 @@
   znocache(zf);
   image= newRGBImage(w, h, d);
   fname[strlen(fname) - 1]= ' ';
-  strcat(fname, lname);
+  strncat(fname, lname, BUFSIZ - strlen(fname) -1);
   fname[strlen(fname) - 1]= '\0';
   image->title= dupString(fname);
 
diff -u xli-1.17.0/debian/changelog xli-1.17.0/debian/changelog
--- xli-1.17.0/debian/changelog
+++ xli-1.17.0/debian/changelog
@@ -1,3 +1,14 @@
+xli (1.17.0-11woody1) stable-security; urgency=high
+
+  * Non-maintainer upload by the Security Team
+  * Backported upstream patch to add quoting protection to filenames when
+    uncompressing files [zio.c, CAN-2005-0638]
+
+ -- Martin Schulze <[EMAIL PROTECTED]>  Fri, 18 Mar 2005 12:46:39 +0100
+
 xli (1.17.0-11) unstable; urgency=low
 
   * xli.1: eliminate mention of xsetbg and xview since they are not
only in patch2:
unchanged:
--- xli-1.17.0.orig/zio.c
+++ xli-1.17.0/zio.c
@@ -340,8 +340,9 @@
 boolean
 _zopen(ZFILE *zf)
 {
-       char buf[BUFSIZ];
+       char cmd[BUFSIZ];
        char *name = zf->filename;
+       char *buf, *s, *t;
        char uuibuf[UULEN], uudest[UULEN], uudummy[UULEN];
        int uumode, uutry = UUSTARTLEN;
 
@@ -370,15 +371,41 @@
 #ifdef HAVE_GUNZIP
        else if ((strlen(name) > 3 && !strcasecmp(".gz", name + (strlen(name) - 
3)))
                 || (strlen(name) > 2 && !strcasecmp(".Z", name + (strlen(name) 
- 2)))) {
-               sprintf(buf, "gunzip -c %s", name);
+               sprintf(cmd, "gunzip -c ");
 #else                          /* #else its a unix compressed file, so use 
uncompress */
        else if ((strlen(name) > (unsigned) 2) && !strcmp(".Z", name + 
(strlen(name) - 2))) {
-               sprintf(buf, "uncompress -c %s", name);
+               sprintf(cmd, "uncompress -c ");
 #endif
+
+               /* protect in single quotes, replacing single quotes
+                * with '"'"', so worst-case expansion is 5x
+                */
+               buf = (char *) lmalloc(strlen(cmd) + 1 + 5 * strlen(name) + 1 + 
1);
+
+               if (buf == NULL)
+                       return (FALSE);
+
+               strcpy(buf, cmd);
+               s = buf + strlen(buf);
+               *s++ = '\'';
+
+               for (t = name; *t; ++t) {
+                       if ('\'' == *t) {
+                               strcpy(s, "'\"'\"'");
+                               s += strlen(s);
+                       } else {
+                               *s++ = *t;
+                       }
+               }
+               *s++ = '\'';
+               *s = '\0';
+
                zf->type = ZPIPE;
                if (!(zf->stream = popen(buf, "r"))) {
+                       lfree(buf);
                        return (FALSE);
                }
+               lfree(buf);
        }
 #endif
 
diff -u xli-1.17.0/debian/changelog xli-1.17.0/debian/changelog
--- xli-1.17.0/debian/changelog
+++ xli-1.17.0/debian/changelog
@@ -1,3 +1,14 @@
+xli (1.17.0-11woody1) stable-security; urgency=high
+
+  * Non-maintainer upload by the Security Team
+  * Applied upstream patch to fix integer overflows [new.c, CAN-2005-0639]
+
+ -- Martin Schulze <[EMAIL PROTECTED]>  Fri, 18 Mar 2005 12:46:39 +0100
+
 xli (1.17.0-11) unstable; urgency=low
 
   * xli.1: eliminate mention of xsetbg and xview since they are not
only in patch2:
unchanged:
--- xli-1.17.0.orig/new.c
+++ xli-1.17.0/new.c
@@ -104,6 +104,18 @@
        lfree((byte *) rgb->blue);
 }
 
+static unsigned int ovmul(unsigned int a, unsigned int b)
+{
+       unsigned int r;
+
+       r = a * b;
+       if (r / a != b) {
+               memoryExhausted();
+       }
+
+       return r;
+}
+
 static Image *newImage(unsigned width, unsigned height)
 {
        Image *image;
@@ -133,7 +145,7 @@
        image->rgb.used = 2;
        image->depth = 1;
        linelen = ((width + 7) / 8);
-       image->data = (unsigned char *) lcalloc(linelen * height);
+       image->data = (unsigned char *) lcalloc(ovmul(linelen, height));
 
        return image;
 }
@@ -157,7 +169,8 @@
        newRGBMapData(&(image->rgb), numcolors);
        image->depth = depth;
        image->pixlen = pixlen;
-       image->data = (unsigned char *) lmalloc(width * height * pixlen);
+       image->data =
+               (unsigned char *) lmalloc(ovmul(ovmul(width, height), pixlen));
 
        return image;
 }
@@ -172,7 +185,8 @@
        image->rgb.used = image->rgb.size = 0;
        image->depth = 24;
        image->pixlen = 3;
-       image->data = (unsigned char *) lmalloc(width * height * 3);
+       image->data =
+               (unsigned char *) lmalloc(ovmul(ovmul(width, height), 3));
 
        return image;
 }

Reply via email to