Revert "rpcrt4: Try to free every non-stack pointer in PointerFree now that NdrFree does the sanity checking for us.".

This reverts commit 6db648302ce43f625a073426a35a6f40b7869d8b.

Tests show the assumptions in a commit that this commit depends on are 
not valid.
This commit is contained in:
Rob Shearman 2007-12-13 16:11:28 +00:00 committed by Alexandre Julliard
parent 9896938fab
commit ded4b86625
2 changed files with 12 additions and 4 deletions

View File

@ -1270,17 +1270,23 @@ static void PointerFree(PMIDL_STUB_MESSAGE pStubMsg,
m = NdrFreer[*desc & NDR_TABLE_MASK]; m = NdrFreer[*desc & NDR_TABLE_MASK];
if (m) m(pStubMsg, Pointer, desc); if (m) m(pStubMsg, Pointer, desc);
/* we should check if the memory comes from NdrAllocate,
* and deallocate only if so - checking if the pointer is between
* BufferStart and BufferEnd will not always work since the buffer
* may be reallocated when the server wants to marshal the reply */
if (Pointer >= (unsigned char *)pStubMsg->RpcMsg->Buffer ||
Pointer <= (unsigned char *)pStubMsg->RpcMsg->Buffer + pStubMsg->BufferLength)
goto notfree;
if (attr & RPC_FC_P_ONSTACK) { if (attr & RPC_FC_P_ONSTACK) {
TRACE("not freeing stack ptr %p\n", Pointer); TRACE("not freeing stack ptr %p\n", Pointer);
return; return;
} }
/* try to free everything else. NdrFree will do the job of sorting out
* whether we allocated it or whether the app did */
TRACE("freeing %p\n", Pointer); TRACE("freeing %p\n", Pointer);
NdrFree(pStubMsg, Pointer); NdrFree(pStubMsg, Pointer);
return; return;
notfree:
TRACE("not freeing %p\n", Pointer);
} }
/*********************************************************************** /***********************************************************************

View File

@ -1193,7 +1193,9 @@ todo_wine {
my_free_called = 0; my_free_called = 0;
StubMsg.Buffer = StubMsg.BufferStart; StubMsg.Buffer = StubMsg.BufferStart;
NdrPointerFree( &StubMsg, mem, fmtstr_conf_str ); NdrPointerFree( &StubMsg, mem, fmtstr_conf_str );
todo_wine {
ok(my_free_called == 1, "free called %d\n", my_free_called); ok(my_free_called == 1, "free called %d\n", my_free_called);
}
mem = my_alloc(10); mem = my_alloc(10);
my_free_called = 0; my_free_called = 0;