Blame SOURCES/libtirpc-0.2.4-xdrstdio.patch

17585d
diff -up libtirpc-0.2.4/src/xdr_stdio.c.orig libtirpc-0.2.4/src/xdr_stdio.c
17585d
--- libtirpc-0.2.4/src/xdr_stdio.c.orig	2013-12-09 15:59:51.000000000 -0500
17585d
+++ libtirpc-0.2.4/src/xdr_stdio.c	2018-07-20 12:19:18.682840483 -0400
17585d
@@ -39,6 +39,7 @@
17585d
  */
17585d
 
17585d
 #include <stdio.h>
17585d
+#include <stdint.h>
17585d
 
17585d
 #include <arpa/inet.h>
17585d
 #include <rpc/types.h>
17585d
@@ -104,10 +105,12 @@ xdrstdio_getlong(xdrs, lp)
17585d
 	XDR *xdrs;
17585d
 	long *lp;
17585d
 {
17585d
+	int32_t mycopy;
17585d
 
17585d
-	if (fread(lp, sizeof(int32_t), 1, (FILE *)xdrs->x_private) != 1)
17585d
+	if (fread(&mycopy, sizeof(int32_t), 1, (FILE *)xdrs->x_private) != 1)
17585d
 		return (FALSE);
17585d
-	*lp = (long)ntohl((u_int32_t)*lp);
17585d
+
17585d
+	*lp = (long)ntohl(mycopy);
17585d
 	return (TRUE);
17585d
 }
17585d
 
17585d
@@ -116,8 +119,14 @@ xdrstdio_putlong(xdrs, lp)
17585d
 	XDR *xdrs;
17585d
 	const long *lp;
17585d
 {
17585d
-	long mycopy = (long)htonl((u_int32_t)*lp);
17585d
+	int32_t mycopy;
17585d
+
17585d
+#if defined(_LP64)
17585d
+	if ((*lp > UINT32_MAX) || (*lp < INT32_MIN))
17585d
+		return (FALSE);
17585d
+#endif
17585d
 
17585d
+	mycopy = (int32_t)htonl((int32_t)*lp);
17585d
 	if (fwrite(&mycopy, sizeof(int32_t), 1, (FILE *)xdrs->x_private) != 1)
17585d
 		return (FALSE);
17585d
 	return (TRUE);