]> git.pld-linux.org Git - packages/dietlibc.git/blob - dietlibc-xdrmem-overflow.patch
- pentium 3/4 support.
[packages/dietlibc.git] / dietlibc-xdrmem-overflow.patch
1 --- dietlibc-0.12.orig/librpc/xdr_mem.c
2 +++ dietlibc-0.12/librpc/xdr_mem.c
3 @@ -48,13 +48,13 @@
4  #include <netinet/in.h>
5  #include <string.h>
6  
7 -static bool_t xdrmem_getlong();
8 -static bool_t xdrmem_putlong();
9 +static bool_t xdrmem_getlong(XDR*, long*);
10 +static bool_t xdrmem_putlong(XDR*, const long*);
11  static bool_t xdrmem_getbytes();
12  static bool_t xdrmem_putbytes();
13  static unsigned int xdrmem_getpos();
14  static bool_t xdrmem_setpos();
15 -static int32_t *xdrmem_inline();
16 +static int32_t *xdrmem_inline(XDR*, unsigned int);
17  static void xdrmem_destroy();
18  
19  static struct xdr_ops xdrmem_ops = {
20 @@ -94,54 +94,41 @@
21  register XDR *xdrs;
22  long *lp;
23  {
24 +  if (xdrs->x_handy < 4) return FALSE;
25 +  xdrs->x_handy -= 4;
26  
27 -       if ((xdrs->x_handy -= sizeof(long)) < 0)
28 -               return (FALSE);
29 -
30 -       *lp = (long) ntohl((unsigned long) (*((long *) (xdrs->x_private))));
31 -       xdrs->x_private += sizeof(long);
32 -
33 -       return (TRUE);
34 +  *lp = (int32_t) ntohl((*((int32_t *) (xdrs->x_private))));
35 +  xdrs->x_private += 4;
36 +  return TRUE;
37  }
38  
39 -static bool_t xdrmem_putlong(xdrs, lp)
40 -register XDR *xdrs;
41 -long *lp;
42 +static bool_t xdrmem_putlong(XDR* xdrs, const long* lp)
43  {
44 +  if (xdrs->x_handy < 4) return FALSE;
45 +  xdrs->x_handy -= 4;
46  
47 -       if ((xdrs->x_handy -= sizeof(long)) < 0)
48 -               return (FALSE);
49 -
50 -       *(long *) xdrs->x_private = (long) htonl((unsigned long) (*lp));
51 -       xdrs->x_private += sizeof(long);
52 +  *(int32_t *) xdrs->x_private = htonl(*lp);
53 +  xdrs->x_private += sizeof(long);
54  
55 -       return (TRUE);
56 +  return (TRUE);
57  }
58  
59 -static bool_t xdrmem_getbytes(xdrs, addr, len)
60 -register XDR *xdrs;
61 -char* addr;
62 -register unsigned int len;
63 +static bool_t xdrmem_getbytes(XDR* xdrs, char* addr, unsigned int len)
64  {
65 -
66 -       if ((xdrs->x_handy -= len) < 0)
67 -               return (FALSE);
68 -       memmove(addr, xdrs->x_private, len);
69 -       xdrs->x_private += len;
70 -       return (TRUE);
71 +  if (xdrs->x_handy < len) return FALSE;
72 +  xdrs->x_handy -= len;
73 +  memmove(addr, xdrs->x_private, len);
74 +  xdrs->x_private += len;
75 +  return TRUE;
76  }
77  
78 -static bool_t xdrmem_putbytes(xdrs, addr, len)
79 -register XDR *xdrs;
80 -char* addr;
81 -register unsigned int len;
82 +static bool_t xdrmem_putbytes(XDR* xdrs, char* addr, unsigned int len)
83  {
84 -
85 -       if ((xdrs->x_handy -= len) < 0)
86 -               return (FALSE);
87 -       memmove(xdrs->x_private, addr, len);
88 -       xdrs->x_private += len;
89 -       return (TRUE);
90 +  if (xdrs->x_handy < len) return FALSE;
91 +  xdrs->x_handy -= len;
92 +  memmove(xdrs->x_private, addr, len);
93 +  xdrs->x_private += len;
94 +  return (TRUE);
95  }
96  
97  static unsigned int xdrmem_getpos(xdrs)
98 @@ -155,19 +142,19 @@
99  register XDR *xdrs;
100  unsigned int pos;
101  {
102 -       register char* newaddr = xdrs->x_base + pos;
103 -       register char* lastaddr = xdrs->x_private + xdrs->x_handy;
104 +  register char* newaddr = xdrs->x_base + pos;
105 +  register char* lastaddr = xdrs->x_private + xdrs->x_handy;
106  
107 -       if ((long) newaddr > (long) lastaddr)
108 -               return (FALSE);
109 -       xdrs->x_private = newaddr;
110 -       xdrs->x_handy = (int) lastaddr - (int) newaddr;
111 -       return (TRUE);
112 +  if ((long) newaddr > (long) lastaddr || (long)newaddr<(long)xdrs->x_base)
113 +         return (FALSE);
114 +  xdrs->x_private = newaddr;
115 +  xdrs->x_handy = (int) lastaddr - (int) newaddr;
116 +  return (TRUE);
117  }
118  
119  static int32_t *xdrmem_inline(xdrs, len)
120  register XDR *xdrs;
121 -int len;
122 +unsigned int len;
123  {
124         int32_t *buf = 0;
125  
126 --- dietlibc-0.12.orig/librpc/xdr_rec.c
127 +++ dietlibc-0.12/librpc/xdr_rec.c
128 @@ -458,9 +458,7 @@
129         return (FALSE);
130  }
131  
132 -static int32_t *xdrrec_inline(xdrs, len)
133 -register XDR *xdrs;
134 -int len;
135 +static int32_t *xdrrec_inline(XDR* xdrs, unsigned int len)
136  {
137         register RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private;
138         int32_t *buf = NULL;
139 --- dietlibc-0.12.orig/librpc/xdr_stdio.c
140 +++ dietlibc-0.12/librpc/xdr_stdio.c
141 @@ -169,9 +169,7 @@
142                         FALSE : TRUE);
143  }
144  
145 -static int32_t *xdrstdio_inline(xdrs, len)
146 -XDR *xdrs;
147 -unsigned int len;
148 +static int32_t *xdrstdio_inline(XDR* xdrs, unsigned int len)
149  {
150  
151         /*
152 --- dietlibc-0.12.orig/include/rpc/xdr.h
153 +++ dietlibc-0.12/include/rpc/xdr.h
154 @@ -126,7 +126,7 @@
155         /* returns bytes off from beginning */
156         bool_t (*x_setpostn) (XDR *__xdrs, unsigned int __pos);
157         /* lets you reposition the stream */
158 -       int32_t *(*x_inline) (XDR *__xdrs, int __len);
159 +       int32_t *(*x_inline) (XDR *__xdrs, unsigned int __len);
160         /* buf quick ptr to buffered data */
161         void (*x_destroy) (XDR *__xdrs);
162         /* free privates of this xdr_stream */
163 @@ -139,7 +139,7 @@
164      char* x_public;            /* users' data */
165      char* x_private;           /* pointer to private data */
166      char* x_base;              /* private used for position info */
167 -    int x_handy;               /* extra private word */
168 +    unsigned int x_handy;      /* extra private word */
169    };
170  
171  /*
This page took 0.145999 seconds and 3 git commands to generate.