Page MenuHomeFreeBSD

D56673.1794476707.diff
No OneTemporary

Authored By
Unknown
Size
2 KB
Referenced Files
None
Subscribers
None

D56673.1794476707.diff

diff --git a/lib/libc/yp/xdryp.c b/lib/libc/yp/xdryp.c
--- a/lib/libc/yp/xdryp.c
+++ b/lib/libc/yp/xdryp.c
@@ -30,12 +30,14 @@
*/
#include <rpc/rpc.h>
+#include <rpc/types.h>
#include <rpcsvc/yp.h>
#include <stdlib.h>
#include <string.h>
+#include <limits.h>
-extern int (*ypresp_allfn)(u_long, char *, int, char *, int, void *);
-extern void *ypresp_data;
+extern int (*ypresp_allfn)(u_long, char *, int, char *, int, void *);
+extern void *ypresp_data;
/*
* I'm leaving the xdr_datum() function in purely for backwards
@@ -48,6 +50,9 @@
int dsize;
} datum;
+bool_t xdr_datum(XDR *xdrs, datum *objp);
+bool_t xdr_ypresp_all_seq(XDR *xdrs, u_long *objp);
+
bool_t
xdr_datum(XDR *xdrs, datum *objp)
{
@@ -65,58 +70,58 @@
char *key, *val;
int r;
- bzero(&out, sizeof out);
while (1) {
+ bzero(&out, sizeof out);
if (!xdr_ypresp_all(xdrs, &out)) {
- xdr_free((xdrproc_t)xdr_ypresp_all, &out);
+ xdr_free((xdrproc_t)(void *)xdr_ypresp_all, &out);
*objp = YP_YPERR;
return (FALSE);
}
if (out.more == 0) {
- xdr_free((xdrproc_t)xdr_ypresp_all, &out);
+ xdr_free((xdrproc_t)(void *)xdr_ypresp_all, &out);
*objp = YP_NOMORE;
return (TRUE);
}
status = out.ypresp_all_u.val.stat;
switch (status) {
case YP_TRUE:
- key = (char *)malloc(out.ypresp_all_u.val.key.keydat_len + 1);
+ key = (out.ypresp_all_u.val.key.keydat_len < UINT_MAX) ? (char *)malloc(out.ypresp_all_u.val.key.keydat_len + 1) : NULL;
if (key == NULL) {
- xdr_free((xdrproc_t)xdr_ypresp_all, &out);
+ xdr_free((xdrproc_t)(void *)xdr_ypresp_all, &out);
*objp = YP_YPERR;
return (FALSE);
}
bcopy(out.ypresp_all_u.val.key.keydat_val, key,
out.ypresp_all_u.val.key.keydat_len);
key[out.ypresp_all_u.val.key.keydat_len] = '\0';
- val = (char *)malloc(out.ypresp_all_u.val.val.valdat_len + 1);
+ val = (out.ypresp_all_u.val.val.valdat_len < UINT_MAX) ? (char *)malloc(out.ypresp_all_u.val.val.valdat_len + 1) : NULL;
if (val == NULL) {
free(key);
- xdr_free((xdrproc_t)xdr_ypresp_all, &out);
+ xdr_free((xdrproc_t)(void *)xdr_ypresp_all, &out);
*objp = YP_YPERR;
return (FALSE);
}
bcopy(out.ypresp_all_u.val.val.valdat_val, val,
out.ypresp_all_u.val.val.valdat_len);
val[out.ypresp_all_u.val.val.valdat_len] = '\0';
- xdr_free((xdrproc_t)xdr_ypresp_all, &out);
r = (*ypresp_allfn)(status,
key, out.ypresp_all_u.val.key.keydat_len,
val, out.ypresp_all_u.val.val.valdat_len,
ypresp_data);
*objp = status;
+ xdr_free((xdrproc_t)(void *)xdr_ypresp_all, &out);
free(key);
free(val);
if (r)
return (TRUE);
break;
case YP_NOMORE:
- xdr_free((xdrproc_t)xdr_ypresp_all, &out);
+ xdr_free((xdrproc_t)(void *)xdr_ypresp_all, &out);
*objp = YP_NOMORE;
return (TRUE);
default:
- xdr_free((xdrproc_t)xdr_ypresp_all, &out);
+ xdr_free((xdrproc_t)(void *)xdr_ypresp_all, &out);
*objp = status;
return (TRUE);
}

File Metadata

Mime Type
text/plain
Expires
Thu, Nov 12, 9:45 AM (1 h, 58 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41674481
Default Alt Text
D56673.1794476707.diff (2 KB)

Event Timeline