/* * Check, if we receive enough bytes to return a valid RPC bind response */ static unsigned int checkRpcBindSize(const RPC_BIND_REQUEST *const Request, const unsigned int RequestSize, WORD* NdrCtx_unused, WORD* Ndr64Ctx_unused) { if (RequestSize < sizeof(RPC_BIND_REQUEST)) return FALSE; unsigned int numCtxItems = LE32(Request->NumCtxItems); if (RequestSize < sizeof(RPC_BIND_REQUEST) - sizeof(Request->CtxItems[0]) + numCtxItems * sizeof(Request->CtxItems[0])) return FALSE; #if defined(_PEDANTIC) && !defined(NO_LOG) CheckRpcBindRequest(Request, RequestSize); #endif // defined(_PEDANTIC) && !defined(NO_LOG) return TRUE; }
// // RPC binding handling (server) // static unsigned int RpcBindSize(const RPC_BIND_REQUEST *const Request, const unsigned int RequestSize) { if ( RequestSize >= sizeof(RPC_BIND_REQUEST) ) { unsigned int _NumCtxItems = LE32(Request->NumCtxItems); if ( RequestSize >= sizeof(RPC_BIND_REQUEST) - sizeof(Request->CtxItems[0]) + _NumCtxItems * sizeof(Request->CtxItems[0]) ) { #if defined(_PEDANTIC) && !defined(NO_LOG) CheckRpcBindRequest(Request, RequestSize); #endif // defined(_PEDANTIC) && !defined(NO_LOG) return sizeof(RPC_BIND_RESPONSE) + _NumCtxItems * sizeof(((RPC_BIND_RESPONSE *)0)->Results[0]); } } return 0; }