SOURCES: XFree86-fix-01.patch (NEW) - official security fix for XF...
qboosh
qboosh at pld-linux.org
Tue May 1 01:05:40 CEST 2007
Author: qboosh Date: Mon Apr 30 23:05:40 2007 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- official security fix for XFree86 4.6.0 (CVE-2006-3739, CVE-2006-3740)
---- Files affected:
SOURCES:
XFree86-fix-01.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/XFree86-fix-01.patch
diff -u /dev/null SOURCES/XFree86-fix-01.patch:1.1
--- /dev/null Tue May 1 01:05:40 2007
+++ SOURCES/XFree86-fix-01.patch Tue May 1 01:05:35 2007
@@ -0,0 +1,118 @@
+Fix integer overflow vulnerabilities in the handling of Type1 fonts.
+
+*** xc/lib/font/Type1/AFM.h Sun May 2 23:58:44 1999
+--- xc/lib/font/Type1/AFM.h Wed Sep 6 17:37:56 2006
+*************** typedef struct
+*** 47,52 ****
+--- 47,54 ----
+ BBox charBBox; /* key: B */
+ } Metrics;
+
++ #define MAX_CID_METRICS ((int)((unsigned int)(-1) / (2 * sizeof(Metrics))))
++
+ typedef struct
+ {
+ int nChars; /* number of entries in char metrics array */
+*** xc/lib/font/Type1/afm.c Fri Oct 14 09:16:02 2005
+--- xc/lib/font/Type1/afm.c Wed Sep 6 17:37:56 2006
+*************** int CIDAFM(FILE *fd, FontInfo **pfi) {
+*** 111,116 ****
+--- 111,122 ----
+
+ fi->nChars = atoi(p);
+
++ if ((fi->nChars <= 0) || (fi->nChars > MAX_CID_METRICS)) {
++ xfree(afmbuf);
++ xfree(fi);
++ return(1);
++ }
++
+ fi->metrics = (Metrics *)xalloc(fi->nChars *
+ sizeof(Metrics));
+ if (fi->metrics == NULL) {
+*** xc/lib/font/Type1/range.h Tue May 4 03:35:22 1999
+--- xc/lib/font/Type1/range.h Wed Sep 6 17:37:56 2006
+*************** typedef struct spacerange_code {
+*** 24,29 ****
+--- 24,32 ----
+ unsigned int srcCodeHi;
+ } spacerangecode;
+
++ #define MAX_CID_SPACERANGECODES \
++ ((int)((unsigned int)(-1) / (2 * sizeof(spacerangecode))))
++
+ typedef struct space_range {
+ struct space_range *next;
+ int rangecnt;
+*************** typedef struct cidrange_code {
+*** 36,41 ****
+--- 39,47 ----
+ unsigned int dstCIDLo;
+ } cidrangecode;
+
++ #define MAX_CID_CIDRANGECODES \
++ ((int)((unsigned int)(-1) / (2 * sizeof(cidrangecode))))
++
+ typedef struct cid_range {
+ struct cid_range *next;
+ int rangecnt;
+*** xc/lib/font/Type1/scanfont.c Fri Oct 14 09:16:02 2005
+--- xc/lib/font/Type1/scanfont.c Wed Sep 6 17:37:56 2006
+*************** scan_cidfont(cidfont *CIDFontP, cmapres
+*** 1732,1737 ****
+--- 1732,1741 ----
+ break;
+ case TOKEN_NAME:
+ if (0 == strncmp(tokenStartP,"begincodespacerange",19)) {
++ if ((rangecnt <= 0) || (rangecnt > MAX_CID_SPACERANGECODES)) {
++ rc = SCAN_OUT_OF_MEMORY;
++ break;
++ }
+ CIDFontP->spacerangecnt++;
+ spacerangeP = (spacerange *)vm_alloc(sizeof(spacerange));
+ if (!spacerangeP) {
+*************** scan_cidfont(cidfont *CIDFontP, cmapres
+*** 1787,1792 ****
+--- 1791,1800 ----
+ }
+ }
+ if (0 == strncmp(tokenStartP,"begincidrange",13)) {
++ if ((rangecnt <= 0) || (rangecnt > MAX_CID_CIDRANGECODES)) {
++ rc = SCAN_OUT_OF_MEMORY;
++ break;
++ }
+ CIDFontP->cidrangecnt++;
+ cidrangeP = (cidrange *)vm_alloc(sizeof(cidrange));
+ if (!cidrangeP) {
+*************** scan_cidfont(cidfont *CIDFontP, cmapres
+*** 1868,1873 ****
+--- 1876,1885 ----
+ }
+
+ if (0 == strncmp(tokenStartP,"beginnotdefrange",16)) {
++ if ((rangecnt <= 0) || (rangecnt > MAX_CID_CIDRANGECODES)) {
++ rc = SCAN_OUT_OF_MEMORY;
++ break;
++ }
+ CIDFontP->notdefrangecnt++;
+ notdefrangeP = (cidrange *)vm_alloc(sizeof(cidrange));
+ if (!notdefrangeP) {
+*** xc/lib/font/Type1/util.c Fri Oct 14 09:16:03 2005
+--- xc/lib/font/Type1/util.c Wed Sep 6 17:42:08 2006
+*************** vm_alloc(int bytes)
+*** 96,102 ****
+ bytes = (bytes + 7) & ~7;
+
+ /* Allocate the space, if it is available */
+! if (bytes <= vm_free) {
+ answer = vm_next;
+ vm_free -= bytes;
+ vm_next += bytes;
+--- 96,102 ----
+ bytes = (bytes + 7) & ~7;
+
+ /* Allocate the space, if it is available */
+! if ((bytes > 0) && (bytes <= vm_free)) {
+ answer = vm_next;
+ vm_free -= bytes;
+ vm_next += bytes;
================================================================
More information about the pld-cvs-commit
mailing list