[LIBTIRPC] Fix CVE-2017-8779 by backporting its fix
[reactos.git] / dll / 3rdparty / libtirpc / src / rpcb_st_xdr.c
index 6feb70b..76c0bd1 100644 (file)
@@ -39,6 +39,9 @@
 
 #include <wintirpc.h>
 #include <rpc/rpc.h>
+#ifdef __REACTOS__ // CVE-2017-8779
+#include "rpc_com.h"
+#endif
 
 /* Link list of all the stats about getport and getaddr */
 
@@ -60,7 +63,11 @@ xdr_rpcbs_addrlist(xdrs, objp)
            if (!xdr_int(xdrs, &objp->failure)) {
                return (FALSE);
            }
+#ifdef __REACTOS__ // CVE-2017-8779
+           if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) {
+#else
            if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
+#endif
                return (FALSE);
            }
 
@@ -111,7 +118,11 @@ xdr_rpcbs_rmtcalllist(xdrs, objp)
                IXDR_PUT_INT32(buf, objp->failure);
                IXDR_PUT_INT32(buf, objp->indirect);
        }
+#ifdef __REACTOS__ // CVE-2017-8779
+       if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) {
+#else
        if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
+#endif
                return (FALSE);
        }
        if (!xdr_pointer(xdrs, (char **)&objp->next,
@@ -149,7 +160,11 @@ xdr_rpcbs_rmtcalllist(xdrs, objp)
                objp->failure = (int)IXDR_GET_INT32(buf);
                objp->indirect = (int)IXDR_GET_INT32(buf);
        }
+#ifdef __REACTOS__ // CVE-2017-8779
+       if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) {
+#else
        if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
+#endif
                return (FALSE);
        }
        if (!xdr_pointer(xdrs, (char **)&objp->next,
@@ -177,7 +192,11 @@ xdr_rpcbs_rmtcalllist(xdrs, objp)
        if (!xdr_int(xdrs, &objp->indirect)) {
                return (FALSE);
        }
+#ifdef __REACTOS__ // CVE-2017-8779
+       if (!xdr_string(xdrs, &objp->netid, RPC_MAXDATASIZE)) {
+#else
        if (!xdr_string(xdrs, &objp->netid, (u_int)~0)) {
+#endif
                return (FALSE);
        }
        if (!xdr_pointer(xdrs, (char **)&objp->next,