* - Checks for integer addition overflow in user marshall functions
*/
-#include <assert.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-
-#define NONAMELESSUNION
-#include "windef.h"
-#include "winbase.h"
-#include "winerror.h"
-
-#include "ndr_misc.h"
-#include "rpcndr.h"
-#include "ndrtypes.h"
-
-#include "wine/unicode.h"
-#include "wine/rpcfc.h"
-
-#include "wine/debug.h"
+#include "precomp.h"
WINE_DEFAULT_DEBUG_CHANNEL(ole);
PFORMAT_STRING desc;
NDR_MARSHALL m;
ULONG pointer_id;
- int pointer_needs_marshaling;
+ BOOL pointer_needs_marshaling;
TRACE("(%p,%p,%p,%p)\n", pStubMsg, Buffer, Pointer, pFormat);
TRACE("type=0x%x, attr=", type); dump_pointer_attr(attr);
ERR("NULL ref pointer is not allowed\n");
RpcRaiseException(RPC_X_NULL_REF_POINTER);
}
- pointer_needs_marshaling = 1;
+ pointer_needs_marshaling = TRUE;
break;
case RPC_FC_UP: /* unique pointer */
case RPC_FC_OP: /* object pointer - same as unique here */
if (Pointer)
- pointer_needs_marshaling = 1;
+ pointer_needs_marshaling = TRUE;
else
- pointer_needs_marshaling = 0;
+ pointer_needs_marshaling = FALSE;
pointer_id = Pointer ? NDR_POINTER_ID(pStubMsg) : 0;
TRACE("writing 0x%08x to buffer\n", pointer_id);
NDR_LOCAL_UINT32_WRITE(Buffer, pointer_id);
PFORMAT_STRING desc;
NDR_UNMARSHALL m;
DWORD pointer_id = 0;
- int pointer_needs_unmarshaling;
+ BOOL pointer_needs_unmarshaling;
TRACE("(%p,%p,%p,%p,%p,%d)\n", pStubMsg, Buffer, pPointer, pSrcPointer, pFormat, fMustAlloc);
TRACE("type=0x%x, attr=", type); dump_pointer_attr(attr);
switch (type) {
case RPC_FC_RP: /* ref pointer (always non-null) */
- pointer_needs_unmarshaling = 1;
+ pointer_needs_unmarshaling = TRUE;
break;
case RPC_FC_UP: /* unique pointer */
pointer_id = NDR_LOCAL_UINT32_READ(Buffer);
TRACE("pointer_id is 0x%08x\n", pointer_id);
if (pointer_id)
- pointer_needs_unmarshaling = 1;
+ pointer_needs_unmarshaling = TRUE;
else {
*pPointer = NULL;
- pointer_needs_unmarshaling = 0;
+ pointer_needs_unmarshaling = FALSE;
}
break;
case RPC_FC_OP: /* object pointer - we must free data before overwriting it */
fMustAlloc = TRUE;
}
if (pointer_id)
- pointer_needs_unmarshaling = 1;
+ pointer_needs_unmarshaling = TRUE;
else
{
*pPointer = NULL;
- pointer_needs_unmarshaling = 0;
+ pointer_needs_unmarshaling = FALSE;
}
break;
case RPC_FC_FP:
unsigned type = pFormat[0], attr = pFormat[1];
PFORMAT_STRING desc;
NDR_BUFFERSIZE m;
- int pointer_needs_sizing;
+ BOOL pointer_needs_sizing;
ULONG pointer_id;
TRACE("(%p,%p,%p)\n", pStubMsg, Pointer, pFormat);
PFORMAT_STRING desc;
NDR_MEMORYSIZE m;
DWORD pointer_id = 0;
- int pointer_needs_sizing;
+ BOOL pointer_needs_sizing;
TRACE("(%p,%p,%p)\n", pStubMsg, Buffer, pFormat);
TRACE("type=0x%x, attr=", type); dump_pointer_attr(attr);
switch (type) {
case RPC_FC_RP: /* ref pointer (always non-null) */
- pointer_needs_sizing = 1;
+ pointer_needs_sizing = TRUE;
break;
case RPC_FC_UP: /* unique pointer */
case RPC_FC_OP: /* object pointer - we must free data before overwriting it */
pointer_id = NDR_LOCAL_UINT32_READ(Buffer);
TRACE("pointer_id is 0x%08x\n", pointer_id);
if (pointer_id)
- pointer_needs_sizing = 1;
+ pointer_needs_sizing = TRUE;
else
- pointer_needs_sizing = 0;
+ pointer_needs_sizing = FALSE;
break;
case RPC_FC_FP:
{
while (pFormat[0] != RPC_FC_END) {
switch (pFormat[0]) {
default:
- FIXME("unknown repeat type %d\n", pFormat[0]);
+ FIXME("unknown repeat type %d; assuming no repeat\n", pFormat[0]);
+ /* fallthrough */
case RPC_FC_NO_REPEAT:
rep = 1;
stride = 0;
TRACE("pFormat[0] = 0x%x\n", pFormat[0]);
switch (pFormat[0]) {
default:
- FIXME("unknown repeat type %d\n", pFormat[0]);
+ FIXME("unknown repeat type %d; assuming no repeat\n", pFormat[0]);
+ /* fallthrough */
case RPC_FC_NO_REPEAT:
rep = 1;
stride = 0;
while (pFormat[0] != RPC_FC_END) {
switch (pFormat[0]) {
default:
- FIXME("unknown repeat type %d\n", pFormat[0]);
+ FIXME("unknown repeat type %d; assuming no repeat\n", pFormat[0]);
+ /* fallthrough */
case RPC_FC_NO_REPEAT:
rep = 1;
stride = 0;
while (pFormat[0] != RPC_FC_END) {
switch (pFormat[0]) {
default:
- FIXME("unknown repeat type %d\n", pFormat[0]);
+ FIXME("unknown repeat type %d; assuming no repeat\n", pFormat[0]);
+ /* fallthrough */
case RPC_FC_NO_REPEAT:
rep = 1;
stride = 0;
while (pFormat[0] != RPC_FC_END) {
switch (pFormat[0]) {
default:
- FIXME("unknown repeat type %d\n", pFormat[0]);
+ FIXME("unknown repeat type %d; assuming no repeat\n", pFormat[0]);
+ /* fallthrough */
case RPC_FC_NO_REPEAT:
rep = 1;
stride = 0;
case RPC_FC_POINTER:
{
unsigned char *saved_buffer;
- int pointer_buffer_mark_set = 0;
+ BOOL pointer_buffer_mark_set = FALSE;
TRACE("pointer=%p <= %p\n", *(unsigned char**)pMemory, pMemory);
TRACE("pStubMsg->Buffer before %p\n", pStubMsg->Buffer);
if (*pFormat != RPC_FC_POINTER)
{
pStubMsg->Buffer = pStubMsg->PointerBufferMark;
pStubMsg->PointerBufferMark = NULL;
- pointer_buffer_mark_set = 1;
+ pointer_buffer_mark_set = TRUE;
}
else if (*pPointer != RPC_FC_RP)
safe_buffer_increment(pStubMsg, 4); /* for pointer ID */
case RPC_FC_POINTER:
{
unsigned char *saved_buffer;
- int pointer_buffer_mark_set = 0;
+ BOOL pointer_buffer_mark_set = FALSE;
TRACE("pointer => %p\n", pMemory);
if (*pFormat != RPC_FC_POINTER)
pPointer = pFormat;
{
pStubMsg->Buffer = pStubMsg->PointerBufferMark;
pStubMsg->PointerBufferMark = NULL;
- pointer_buffer_mark_set = 1;
+ pointer_buffer_mark_set = TRUE;
}
else if (*pPointer != RPC_FC_RP)
safe_buffer_increment(pStubMsg, 4); /* for pointer ID */
case RPC_FC_POINTER:
{
unsigned char *saved_buffer;
- int pointer_buffer_mark_set = 0;
+ BOOL pointer_buffer_mark_set = FALSE;
if (*pFormat != RPC_FC_POINTER)
pPointer = pFormat;
if (*pPointer != RPC_FC_RP)
{
pStubMsg->Buffer = pStubMsg->PointerBufferMark;
pStubMsg->PointerBufferMark = NULL;
- pointer_buffer_mark_set = 1;
+ pointer_buffer_mark_set = TRUE;
}
else if (*pPointer != RPC_FC_RP)
safe_buffer_increment(pStubMsg, 4); /* for pointer ID */
PFORMAT_STRING conf_array = NULL;
PFORMAT_STRING pointer_desc = NULL;
unsigned char *OldMemory = pStubMsg->Memory;
- int pointer_buffer_mark_set = 0;
+ BOOL pointer_buffer_mark_set = FALSE;
ULONG count = 0;
ULONG max_count = 0;
ULONG offset = 0;
/* save it for use by embedded pointer code later */
pStubMsg->PointerBufferMark = (unsigned char *)pStubMsg->RpcMsg->Buffer + pStubMsg->BufferLength;
TRACE("difference = 0x%x\n", (ULONG)(pStubMsg->PointerBufferMark - pStubMsg->Buffer));
- pointer_buffer_mark_set = 1;
+ pointer_buffer_mark_set = TRUE;
/* restore the original buffer length */
pStubMsg->BufferLength = saved_buffer_length;
PFORMAT_STRING conf_array = NULL;
PFORMAT_STRING pointer_desc = NULL;
unsigned char *pMemory;
- int pointer_buffer_mark_set = 0;
+ BOOL pointer_buffer_mark_set = FALSE;
ULONG count = 0;
ULONG max_count = 0;
ULONG offset = 0;
/* save it for use by embedded pointer code later */
pStubMsg->PointerBufferMark = pStubMsg->Buffer;
TRACE("difference = 0x%x\n", (ULONG)(pStubMsg->PointerBufferMark - saved_buffer));
- pointer_buffer_mark_set = 1;
+ pointer_buffer_mark_set = TRUE;
/* restore the original buffer */
pStubMsg->Buffer = saved_buffer;
unsigned char *pMemory,
PFORMAT_STRING pFormat)
{
- int pointer_buffer_mark_set = 0;
+ BOOL pointer_buffer_mark_set = FALSE;
TRACE("(%p,%p,%p)\n", pStubMsg, pMemory, pFormat);
/* save it for use by embedded pointer code later */
pStubMsg->PointerBufferMark = (unsigned char *)pStubMsg->RpcMsg->Buffer + pStubMsg->BufferLength;
TRACE("difference = 0x%x\n", (ULONG)(pStubMsg->Buffer - (unsigned char *)pStubMsg->RpcMsg->Buffer));
- pointer_buffer_mark_set = 1;
+ pointer_buffer_mark_set = TRUE;
/* restore fields */
pStubMsg->ActualCount = saved_actual_count;
unsigned char fMustAlloc)
{
unsigned char *saved_buffer;
- int pointer_buffer_mark_set = 0;
+ BOOL pointer_buffer_mark_set = FALSE;
int saved_ignore_embedded;
TRACE("(%p,%p,%p,%d)\n", pStubMsg, ppMemory, pFormat, fMustAlloc);
{
/* save it for use by embedded pointer code later */
pStubMsg->PointerBufferMark = pStubMsg->Buffer;
- pointer_buffer_mark_set = 1;
+ pointer_buffer_mark_set = TRUE;
}
/* restore the original buffer */
pStubMsg->Buffer = saved_buffer;
if (m)
{
unsigned char *saved_buffer = NULL;
- int pointer_buffer_mark_set = 0;
+ BOOL pointer_buffer_mark_set = FALSE;
switch(*desc)
{
case RPC_FC_RP:
{
pStubMsg->Buffer = pStubMsg->PointerBufferMark;
pStubMsg->PointerBufferMark = NULL;
- pointer_buffer_mark_set = 1;
+ pointer_buffer_mark_set = TRUE;
}
else
safe_buffer_increment(pStubMsg, 4); /* for pointer ID */
if (m)
{
unsigned char *saved_buffer = NULL;
- int pointer_buffer_mark_set = 0;
+ BOOL pointer_buffer_mark_set = FALSE;
switch(*desc)
{
case RPC_FC_RP:
{
pStubMsg->Buffer = pStubMsg->PointerBufferMark;
pStubMsg->PointerBufferMark = NULL;
- pointer_buffer_mark_set = 1;
+ pointer_buffer_mark_set = TRUE;
}
else
pStubMsg->Buffer += 4; /* for pointer ID */