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