Пример #1
0
/*
 * 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;
}
Пример #2
0
//
// 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;
}