Timo Aaltonen pushed to branch upstream-unstable at X Strike Force / lib / libx11
Commits:
-
a8216e86
by Matthieu Herrb at 2021-05-22T17:36:37+02:00
-
ab2f5953
by Matthieu Herrb at 2021-05-30T16:33:48+02:00
-
51b73ac0
by Tobias Stoeckmann at 2021-05-31T18:39:15+02:00
-
f906fe8e
by Alan Coopersmith at 2021-06-05T09:36:54-07:00
13 changed files:
- README.md
- configure.ac
- src/Font.c
- src/FontInfo.c
- src/FontNames.c
- src/GetColor.c
- src/LoadFont.c
- src/LookupCol.c
- src/ParseCol.c
- src/QuExt.c
- src/SetFPath.c
- src/StNColor.c
- src/StName.c
Changes:
... | ... | @@ -31,6 +31,11 @@ For patch submission instructions, see: |
31 | 31 |
|
32 | 32 |
https://www.x.org/wiki/Development/Documentation/SubmittingPatches
|
33 | 33 |
|
34 |
+## Release 1.7.2
|
|
35 |
+ |
|
36 |
+This is a bug fix release, correcting a regression introduced by and
|
|
37 |
+improving the checks from the fix for CVE-2021-31535.
|
|
38 |
+ |
|
34 | 39 |
## Release 1.7.1
|
35 | 40 |
|
36 | 41 |
This is a bug fix release, including a security fix for
|
1 | 1 |
|
2 | 2 |
# Initialize Autoconf
|
3 | 3 |
AC_PREREQ([2.60])
|
4 |
-AC_INIT([libX11], [1.7.1],
|
|
4 |
+AC_INIT([libX11], [1.7.2],
|
|
5 | 5 |
[https://gitlab.freedesktop.org/xorg/lib/libx11/issues], [libX11])
|
6 | 6 |
AC_CONFIG_SRCDIR([Makefile.am])
|
7 | 7 |
AC_CONFIG_HEADERS([src/config.h include/X11/XlibConf.h])
|
... | ... | @@ -102,7 +102,7 @@ XFontStruct *XLoadQueryFont( |
102 | 102 |
XF86BigfontCodes *extcodes = _XF86BigfontCodes(dpy);
|
103 | 103 |
#endif
|
104 | 104 |
|
105 |
- if (strlen(name) >= USHRT_MAX)
|
|
105 |
+ if (name != NULL && strlen(name) >= USHRT_MAX)
|
|
106 | 106 |
return NULL;
|
107 | 107 |
if (_XF86LoadQueryLocaleFont(dpy, name, &font_result, (Font *)0))
|
108 | 108 |
return font_result;
|
... | ... | @@ -656,7 +656,7 @@ int _XF86LoadQueryLocaleFont( |
656 | 656 |
XFontStruct **xfp,
|
657 | 657 |
Font *fidp)
|
658 | 658 |
{
|
659 |
- int l;
|
|
659 |
+ size_t l;
|
|
660 | 660 |
const char *charset, *p;
|
661 | 661 |
char buf[256];
|
662 | 662 |
XFontStruct *fs;
|
... | ... | @@ -664,7 +664,7 @@ int _XF86LoadQueryLocaleFont( |
664 | 664 |
|
665 | 665 |
if (!name)
|
666 | 666 |
return 0;
|
667 |
- l = (int) strlen(name);
|
|
667 |
+ l = strlen(name);
|
|
668 | 668 |
if (l < 2 || name[l - 1] != '*' || name[l - 2] != '-' || l >= USHRT_MAX)
|
669 | 669 |
return 0;
|
670 | 670 |
charset = NULL;
|
... | ... | @@ -677,11 +677,11 @@ int _XF86LoadQueryLocaleFont( |
677 | 677 |
charset = "ISO8859-1";
|
678 | 678 |
p = charset + 7;
|
679 | 679 |
}
|
680 |
- if (l - 2 - (p - charset) < 0)
|
|
680 |
+ if (l - 2 < p - charset)
|
|
681 | 681 |
return 0;
|
682 | 682 |
if (_XlcNCompareISOLatin1(name + l - 2 - (p - charset), charset, p - charset))
|
683 | 683 |
return 0;
|
684 |
- if (strlen(p + 1) + (size_t) l - 1 >= sizeof(buf) - 1)
|
|
684 |
+ if (strlen(p + 1) + l - 1 >= sizeof(buf) - 1)
|
|
685 | 685 |
return 0;
|
686 | 686 |
strcpy(buf, name);
|
687 | 687 |
strcpy(buf + l - 1, p + 1);
|
... | ... | @@ -58,7 +58,7 @@ XFontStruct **info) /* RETURN */ |
58 | 58 |
register xListFontsReq *req;
|
59 | 59 |
int j;
|
60 | 60 |
|
61 |
- if (strlen(pattern) >= USHRT_MAX)
|
|
61 |
+ if (pattern != NULL && strlen(pattern) >= USHRT_MAX)
|
|
62 | 62 |
return NULL;
|
63 | 63 |
|
64 | 64 |
LockDisplay(dpy);
|
... | ... | @@ -51,7 +51,7 @@ int *actualCount) /* RETURN */ |
51 | 51 |
register xListFontsReq *req;
|
52 | 52 |
unsigned long rlen = 0;
|
53 | 53 |
|
54 |
- if (strlen(pattern) >= USHRT_MAX)
|
|
54 |
+ if (pattern != NULL && strlen(pattern) >= USHRT_MAX)
|
|
55 | 55 |
return NULL;
|
56 | 56 |
|
57 | 57 |
LockDisplay(dpy);
|
... | ... | @@ -49,7 +49,7 @@ XColor *exact_def) /* RETURN */ |
49 | 49 |
XcmsColor cmsColor_exact;
|
50 | 50 |
Status ret;
|
51 | 51 |
|
52 |
- if (strlen(colorname) >= USHRT_MAX)
|
|
52 |
+ if (colorname != NULL && strlen(colorname) >= USHRT_MAX)
|
|
53 | 53 |
return (0);
|
54 | 54 |
|
55 | 55 |
#ifdef XCMS
|
... | ... | @@ -39,7 +39,7 @@ XLoadFont ( |
39 | 39 |
Font fid;
|
40 | 40 |
register xOpenFontReq *req;
|
41 | 41 |
|
42 |
- if (strlen(name) >= USHRT_MAX)
|
|
42 |
+ if (name != NULL && strlen(name) >= USHRT_MAX)
|
|
43 | 43 |
return (0);
|
44 | 44 |
|
45 | 45 |
if (_XF86LoadQueryLocaleFont(dpy, name, (XFontStruct **)0, &fid))
|
... | ... | @@ -41,13 +41,15 @@ XLookupColor ( |
41 | 41 |
XColor *def,
|
42 | 42 |
XColor *scr)
|
43 | 43 |
{
|
44 |
- register int n;
|
|
44 |
+ register size_t n;
|
|
45 | 45 |
xLookupColorReply reply;
|
46 | 46 |
register xLookupColorReq *req;
|
47 | 47 |
XcmsCCC ccc;
|
48 | 48 |
XcmsColor cmsColor_exact;
|
49 | 49 |
|
50 |
- n = (int) strlen (spec);
|
|
50 |
+ if (spec == NULL)
|
|
51 |
+ return 0;
|
|
52 |
+ n = strlen (spec);
|
|
51 | 53 |
if (n >= USHRT_MAX)
|
52 | 54 |
return 0;
|
53 | 55 |
#ifdef XCMS
|
... | ... | @@ -40,14 +40,14 @@ XParseColor ( |
40 | 40 |
_Xconst char *spec,
|
41 | 41 |
XColor *def)
|
42 | 42 |
{
|
43 |
- register int n, i;
|
|
43 |
+ register size_t n, i;
|
|
44 | 44 |
int r, g, b;
|
45 | 45 |
char c;
|
46 | 46 |
XcmsCCC ccc;
|
47 | 47 |
XcmsColor cmsColor;
|
48 | 48 |
|
49 | 49 |
if (!spec) return(0);
|
50 |
- n = (int) strlen (spec);
|
|
50 |
+ n = strlen (spec);
|
|
51 | 51 |
if (n >= USHRT_MAX)
|
52 | 52 |
return(0);
|
53 | 53 |
if (*spec == '#') {
|
... | ... | @@ -64,7 +64,7 @@ XParseColor ( |
64 | 64 |
r = g;
|
65 | 65 |
g = b;
|
66 | 66 |
b = 0;
|
67 |
- for (i = n; --i >= 0; ) {
|
|
67 |
+ for (i = 0; i < n; i++) {
|
|
68 | 68 |
c = *spec++;
|
69 | 69 |
b <<= 4;
|
70 | 70 |
if (c >= '0' && c <= '9')
|
... | ... | @@ -122,7 +122,7 @@ XParseColor ( |
122 | 122 |
LockDisplay(dpy);
|
123 | 123 |
GetReq (LookupColor, req);
|
124 | 124 |
req->cmap = cmap;
|
125 |
- req->nbytes = (CARD16) (n = (int) strlen(spec));
|
|
125 |
+ req->nbytes = (CARD16) (n = strlen(spec));
|
|
126 | 126 |
req->length += (n + 3) >> 2;
|
127 | 127 |
Data (dpy, spec, (long)n);
|
128 | 128 |
if (!_XReply (dpy, (xReply *) &reply, 0, xTrue)) {
|
... | ... | @@ -42,7 +42,7 @@ XQueryExtension( |
42 | 42 |
xQueryExtensionReply rep;
|
43 | 43 |
register xQueryExtensionReq *req;
|
44 | 44 |
|
45 |
- if (strlen(name) >= USHRT_MAX)
|
|
45 |
+ if (name != NULL && strlen(name) >= USHRT_MAX)
|
|
46 | 46 |
return false;
|
47 | 47 |
|
48 | 48 |
LockDisplay(dpy);
|
... | ... | @@ -26,8 +26,8 @@ in this Software without prior written authorization from The Open Group. |
26 | 26 |
|
27 | 27 |
#ifdef HAVE_CONFIG_H
|
28 | 28 |
#include <config.h>
|
29 |
-#include <limits.h>
|
|
30 | 29 |
#endif
|
30 |
+#include <limits.h>
|
|
31 | 31 |
#include "Xlibint.h"
|
32 | 32 |
|
33 | 33 |
#define safestrlen(s) ((s) ? strlen(s) : 0)
|
... | ... | @@ -38,7 +38,7 @@ XSetFontPath ( |
38 | 38 |
char **directories,
|
39 | 39 |
int ndirs)
|
40 | 40 |
{
|
41 |
- register int n = 0;
|
|
41 |
+ register size_t n = 0;
|
|
42 | 42 |
register int i;
|
43 | 43 |
register int nbytes;
|
44 | 44 |
char *p;
|
... | ... | @@ -49,7 +49,7 @@ XSetFontPath ( |
49 | 49 |
GetReq (SetFontPath, req);
|
50 | 50 |
req->nFonts = ndirs;
|
51 | 51 |
for (i = 0; i < ndirs; i++) {
|
52 |
- n = (int) ((size_t) n + (safestrlen (directories[i]) + 1));
|
|
52 |
+ n = n + (safestrlen (directories[i]) + 1);
|
|
53 | 53 |
if (n >= USHRT_MAX) {
|
54 | 54 |
UnlockDisplay(dpy);
|
55 | 55 |
SyncHandle();
|
... | ... | @@ -65,9 +65,9 @@ XSetFontPath ( |
65 | 65 |
char *tmp = p;
|
66 | 66 |
|
67 | 67 |
for (i = 0; i < ndirs; i++) {
|
68 |
- register int length = (int) safestrlen (directories[i]);
|
|
68 |
+ size_t length = safestrlen (directories[i]);
|
|
69 | 69 |
*p = length;
|
70 |
- memcpy (p + 1, directories[i], (size_t)length);
|
|
70 |
+ memcpy (p + 1, directories[i], length);
|
|
71 | 71 |
p += length + 1;
|
72 | 72 |
}
|
73 | 73 |
Data (dpy, tmp, nbytes);
|
... | ... | @@ -47,7 +47,7 @@ int flags) /* DoRed, DoGreen, DoBlue */ |
47 | 47 |
XcmsColor cmsColor_exact;
|
48 | 48 |
XColor scr_def;
|
49 | 49 |
|
50 |
- if (strlen(name) >= USHRT_MAX)
|
|
50 |
+ if (name != NULL && strlen(name) >= USHRT_MAX)
|
|
51 | 51 |
return 0;
|
52 | 52 |
#ifdef XCMS
|
53 | 53 |
/*
|
... | ... | @@ -37,7 +37,7 @@ XStoreName ( |
37 | 37 |
Window w,
|
38 | 38 |
_Xconst char *name)
|
39 | 39 |
{
|
40 |
- if (strlen(name) >= USHRT_MAX)
|
|
40 |
+ if (name != NULL && strlen(name) >= USHRT_MAX)
|
|
41 | 41 |
return 0;
|
42 | 42 |
return XChangeProperty(dpy, w, XA_WM_NAME, XA_STRING, /* */
|
43 | 43 |
8, PropModeReplace, (_Xconst unsigned char *)name,
|
... | ... | @@ -50,7 +50,7 @@ XSetIconName ( |
50 | 50 |
Window w,
|
51 | 51 |
_Xconst char *icon_name)
|
52 | 52 |
{
|
53 |
- if (strlen(icon_name) >= USHRT_MAX)
|
|
53 |
+ if (icon_name != NULL && strlen(icon_name) >= USHRT_MAX)
|
|
54 | 54 |
return 0;
|
55 | 55 |
return XChangeProperty(dpy, w, XA_WM_ICON_NAME, XA_STRING, 8,
|
56 | 56 |
PropModeReplace, (_Xconst unsigned char *)icon_name,
|