]> git.pld-linux.org Git - packages/XFree86.git/blob - XFree86-xlclocale-overflow.patch
- security notes (some well-known issues - nobody cares anyway)
[packages/XFree86.git] / XFree86-xlclocale-overflow.patch
1 Index: XlcDL.c
2 ===================================================================
3 RCS file: /home/x-cvs/xc/lib/X11/XlcDL.c,v
4 retrieving revision 1.9
5 diff -u -r1.9 XlcDL.c
6 --- XlcDL.c     2002/11/25 14:04:53     1.9
7 +++ xc/lib/X11/XlcDL.c  2003/03/09 18:19:23
8 @@ -406,7 +406,7 @@
9
10      if (lc_name == NULL) return (XLCd)NULL;
11
12 -    if (_XlcLocaleDirName(lc_dir, (char *)lc_name) == (char*)NULL)
13 +    if (_XlcLocaleDirName(lc_dir, BUFSIZE, (char *)lc_name) == (char*)NULL)
14         return (XLCd)NULL;
15
16      resolve_object(lc_dir, lc_name);
17 @@ -452,7 +452,7 @@
18
19    lc_name = lcd->core->name;
20
21 -  if (_XlcLocaleDirName(lc_dir, lc_name) == NULL) return (XIM)0;
22 +  if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL) return (XIM)0;
23
24    count = lc_count;
25    for (; count-- > 0; objects_list++) {
26 @@ -498,7 +498,7 @@
27
28    lc_name = lcd->core->name;
29
30 -  if (_XlcLocaleDirName(lc_dir, lc_name) == NULL) return False;
31 +  if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL) return False;
32
33    count = lc_count;
34    for (; count-- > 0; objects_list++) {
35 @@ -543,7 +543,7 @@
36  #endif
37
38    lc_name = lcd->core->name;
39 -  if (_XlcLocaleDirName(lc_dir, lc_name) == NULL) return False;
40 +  if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL) return False;
41
42    count = lc_count;
43    for (; count-- > 0; objects_list++) {
44 @@ -610,7 +610,7 @@
45
46    lc_name = lcd->core->name;
47
48 -  if (_XlcLocaleDirName(lc_dir, lc_name) == NULL) return (XOM)0;
49 +  if (_XlcLocaleDirName(lc_dir, BUFSIZE, lc_name) == NULL) return (XOM)0;
50
51    count = lc_count;
52    for (; count-- > 0; objects_list++) {
53 Index: XlcPubI.h
54 ===================================================================
55 RCS file: /home/x-cvs/xc/lib/X11/XlcPubI.h,v
56 retrieving revision 3.9
57 diff -u -r3.9 XlcPubI.h
58 --- XlcPubI.h   2001/11/16 00:52:27     3.9
59 +++ xc/lib/X11/XlcPubI.h        2003/03/09 18:19:23
60 @@ -217,6 +217,7 @@
61  extern char *_XlcLocaleDirName(
62  #if NeedFunctionPrototypes
63       char*             /* dir_name */,
64 +     size_t,          /* dir_len */
65       char*             /* lc_name */
66  #endif
67  );
68 --- xc/lib/X11/lcFile.c.orig    2003-03-26 17:52:08.000000000 +0100
69 +++ xc/lib/X11/lcFile.c 2003-03-26 23:30:55.000000000 +0100
70 @@ -429,8 +429,9 @@
71  }
72  
73  char *
74 -_XlcLocaleDirName(dir_name, lc_name)
75 +_XlcLocaleDirName(dir_name, dir_len, lc_name)
76       char *dir_name;
77 +     size_t dir_len;
78       char *lc_name;
79  {
80    char dir[PATH_MAX], buf[PATH_MAX], *name = NULL;
81 @@ -478,8 +479,15 @@
82      target_dir = args[0];
83      target_name = lc_name;
84    }
85 -  strcpy(dir_name, target_dir);
86 -  strcat(dir_name, "/");
87 -  strcat(dir_name, target_name);
88 +  /* snprintf(dir_name, dir_len, "%s/%", target_dir, target_name); */
89 +  strncpy(dir_name, target_dir, dir_len - 1);
90 +  if (strlen(target_dir) >= dir_len - 1) {
91 +     dir_name[dir_len - 1] = '\0';
92 +  } else  {
93 +     strcat(dir_name, "/");
94 +     strncat(dir_name, target_name, dir_len - strlen(dir_name) - 1);
95 +     if (strlen(target_name) >= dir_len - strlen(dir_name) - 1)
96 +         dir_name[dir_len - 1] = '\0';
97 +  }
98    return dir_name;
99  }
This page took 0.043667 seconds and 3 git commands to generate.