Rob Shearman
33e907bc9d
rpcrt4: Factor out string validation from NDR unmarshalling functions into a separate function, validate_string_data.
2008-06-23 19:46:29 +02:00
Rob Shearman
4bde42aaa2
rpcrt4: Use abrtitrary pointer identifiers when marshalling pointers instead of using pointer values.
...
This ensures that no information about the server memory layout is
leaked to clients.
2008-06-21 11:12:58 +02:00
Rob Shearman
8e08b1dd7f
rpcrt4: Use safe_copy_from_buffer instead of direct memory copy in NdrBaseTypeUnmarshall.
...
This makes the code check that the buffer is big enough to read from
before copying the data from it. The safe_buffer_increment call is still
needed for the case where we point the memory to the buffer, so move the
call there.
2008-04-28 13:28:16 +02:00
Andrew Talbot
649c7aeb7c
rpcrt4: Remove unused variables.
2008-04-25 11:28:34 +02:00
Austin English
aab8fae59a
Spelling fixes.
2008-04-21 14:25:05 +02:00
Austin English
313a85f163
Spelling fixes.
2008-04-17 12:25:57 +02:00
Rob Shearman
e05ccfe2bb
rpcrt4: Add buffer size checks to base type unmarshalling.
...
Reimplement NdrSimpleTypeUnmarshall using similar macros to
NdrBaseTypeUnmarshalling without buffer checks, due to
NdrSimpleTypeUnmarshall not doing any safety checks.
2008-04-14 12:40:22 +02:00
Andrew Talbot
1f53b85445
rpcrt4: Void functions should not return a value.
2008-03-31 12:13:59 +02:00
Dan Hipschman
629a29d81e
rpcrt4: Handle FC_ENUM16.
2008-03-21 11:24:19 +01:00
Rob Shearman
a4b18699ac
rpcrt4: Only initialise the context handle to NULL in NdrContextHandleUnmarshall if it is an out-only or return one.
...
Fix the indentation and add tracing of the context handle flags.
2008-01-17 15:30:30 +01:00
Andrew Talbot
3c14ae6699
rpcrt4: Remove unneeded casts.
2008-01-17 13:42:14 +01:00
Rob Shearman
4f6142b8d9
rpcrt4: Handle complex arrays in calc_arg_size.
2008-01-14 15:31:37 +01:00
Rob Shearman
aabfc52573
rpcrt4: Fix the calculation of element sizes for complex arrays by using a new function ComplexStructSize that doesn't touch the buffer to calculate the size.
...
Otherwise, this would fail on arrays with a conformance or variance of zero.
2008-01-14 15:31:37 +01:00
Rob Shearman
4402daa00b
rpcrt4: Don't print fixmes for NDR types without a freeing function.
...
Not all types have a freeing function.
2008-01-14 13:39:03 +01:00
Rob Shearman
97b842c817
rpcrt4: Add support for calculating the memory size of complex types with embedded non-conformant strings.
2008-01-14 13:38:58 +01:00
Rob Shearman
23c9b6c161
rpcrt4: Add stubs for NdrCorrelationInitialize, NdrCorrelationPass and NdrCorrelationFree.
2008-01-07 22:55:34 +01:00
Rob Shearman
a0410bef34
rpcrt4: Print fixme's if the serialize or no-serialize flags are set on a context handle being marshalled or unmarshalled.
2008-01-07 12:32:31 +01:00
Rob Shearman
f9fc52f602
rpcrt4: Pass the interface identifier to the lower-level context handle routines for context handles with the strict flag set.
2008-01-07 12:32:07 +01:00
Rob Shearman
c8b3dc40a4
rpcrt4: Update todos.
2008-01-07 12:02:52 +01:00
Rob Shearman
86a0b1d24e
rpcrt4: Implement NdrConformantStringMemorySize.
2007-12-31 16:47:55 +01:00
Rob Shearman
eeeed91d92
rpcrt4: Implement non-conformant string functions.
2007-12-31 16:46:10 +01:00
Rob Shearman
3e8a032e8b
rpcrt4: Re-use existing memory for embedded pointers in NdrVaryingArrayUnmarshall.
2007-12-26 14:02:58 +01:00
Rob Shearman
273766ee6f
rpcrt4: Re-use existing memory for embedded pointers in NdrConformantVaryingArrayUnmarshall.
2007-12-26 14:02:55 +01:00
Rob Shearman
698ba6b4d4
rpcrt4: Implement higher-level NDR server context handle functions.
...
Implement NdrServerContextMarshall and NdrServerContextNewMarshall on
top of NDRSContextMarshall2. Implement NdrContextHandleInitialize,
NdrServerContextUnmarshall and NdrServerContextNewUnmarshall on top of
NDSContextUnmarshall2.
2007-12-26 13:26:38 +01:00
Rob Shearman
cf6d95c1b8
rpcrt4: Move low-level NDR context handle functions to a separate file.
2007-12-26 13:26:30 +01:00
Rob Shearman
64d1e2d8e3
rpcrt4: Set pStubMsg->BufferMark in NdrConformantVaryingArrayUnmarshall and NdrVaryingArrayUnmarshall.
...
pStubMsg->BufferMark should always be set before
EmbeddedPointerUnmarshall is called and these functions didn't
previously do so.
2007-12-23 13:55:27 +01:00
Rob Shearman
17eb6f44ad
rpcrt4: Print an error if stub buffer pointer is passed into safe_copy_from_buffer.
...
Also print an error message if there was an overflow.
2007-12-21 12:41:18 +01:00
Rob Shearman
9a888e6465
rpcrt4: Fix NdrConformantStringUnmarshall to always increment the buffer during unmarshalling.
...
safe_copy_from_buffer has the side-effect of incrementing the buffer and
this still needs to be done when we point the memory into the buffer.
(Thanks to Maarten Lankhorst for finding the mistake and suggesting a fix.)
2007-12-20 12:10:30 +01:00
Rob Shearman
22b20879f7
rpcrt4: Memory should only be cleared in ComplexUnmarshall, not in ComplexMarshall.
...
Also clear memory when FC_STRUCTPAD* is encountered.
2007-12-19 19:35:02 +01:00
Rob Shearman
50cab7736a
rpcrt4: Fix the ALIGN_POINTER_CLEAR macro.
2007-12-19 19:34:56 +01:00
Rob Shearman
b9c92e9564
rpcrt4: Don't copy memory from the buffer in NdrConformantStringUnmarshall if we just pointed the memory pointer into the buffer.
...
(Reported by Dan Kegel.)
2007-12-18 12:32:55 +01:00
Rob Shearman
259879d1f5
rpcrt4: Fix NdrConformantStringUnmarshall to use buffer memory if possible.
2007-12-17 11:58:06 +01:00
Rob Shearman
b300189c43
rpcrt4: Add a FIXME for RPC_FC_P_ALLOCALLNODES in PointerUnmarshall.
2007-12-17 11:58:00 +01:00
Rob Shearman
68432dd339
rpcrt4: Clear padding inserted into the buffer during marshalling because of alignment.
2007-12-17 11:57:54 +01:00
Rob Shearman
25bf0a409a
rpcrt4: Update TODO list.
...
Out-of-memory check is performed by NdrAllocate and so isn't required to
be done in the unmarshalling functions.
2007-12-14 12:24:34 +01:00
Rob Shearman
4a028589eb
rpcrt4: Document NdrAllocate.
2007-12-14 12:24:24 +01:00
Rob Shearman
c7261b732b
rpcrt4: Partially revert commit 18faf3184b2ea263d77c2a7ad92eef27bc4ba08f.
...
Tests show that NdrPointerFree (and hence NdrFree) don't check whether
the memory was allocated with NdrAllocate before freeing it. This makes
sense as servers don't need to use NdrAllocate to allocate memory being
returned and so this commit caused that memory to be leaked.
NdrAllocate hasn't been changed as the tests show it is correct and it
appears that the memory list is used to implement the RpcSs memory model.
2007-12-14 12:24:21 +01:00
Rob Shearman
ce220e2b5f
rpcrt4: Free the base pointer in PointerFree when freeing a pointer with RPC_FC_P_DEREF.
2007-12-14 12:24:03 +01:00
Rob Shearman
d5ff3467bc
rpcrt4: Fix the check in NdrPointerFree.
...
Add comments to justify why this is the only check that is needed.
2007-12-14 12:23:55 +01:00
Rob Shearman
ded4b86625
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.
2007-12-14 12:23:38 +01:00
Rob Shearman
e12b487e26
rpcrt4: Try to free every non-stack pointer in PointerFree now that NdrFree does the sanity checking for us.
2007-12-12 16:02:53 +01:00
Rob Shearman
9c8c74f388
rpcrt4: Store allocated memory in a singly-linked list to keep track of what we should and shouldn't free in NdrFree.
2007-12-12 16:02:43 +01:00
Rob Shearman
766d8a17af
rpcrt4: Pass the USER_MARSHAL_CB structure into user marshal routines.
2007-12-10 12:04:28 +01:00
Rob Shearman
a07afe7e06
rpcrt4: Implement NdrConformantArrayMemorySize.
2007-12-10 12:04:15 +01:00
Rob Shearman
417b9d80f2
rpcrt4: Save the buffer in EmbeddedPointerMemorySize, like EmbeddedPointerUnmarshall does.
2007-12-08 19:58:11 +01:00
Rob Shearman
d7a0de303e
rpcrt4: Fix the return value from NdrSimpleStructMemorySize.
2007-12-08 19:58:07 +01:00
Rob Shearman
3a13de3115
rpcrt4: Add a trace to NdrBaseTypeMemorySize.
2007-12-08 19:58:03 +01:00
Rob Shearman
7ae1d44816
rpcrt4: Implement PointerMemorySize.
2007-12-08 19:57:55 +01:00
Rob Shearman
8348f0413d
rpcrt4: Fix NdrConformantStructUnmarshall to use buffer memory if applicable and to reuse memory for embedded pointers.
2007-12-08 19:57:46 +01:00
Rob Shearman
a5f9ed81e3
rpcrt4: Fix NdrFixedArrayUnmarshall to use buffer memory if applicable and to reuse memory for embedded pointers.
2007-12-08 19:57:39 +01:00
Rob Shearman
abbceb137a
rpcrt4: Fix NdrConformantArrayUnmarshall to use buffer memory if applicable and to reuse memory for embedded pointers.
2007-12-08 19:57:32 +01:00
Rob Shearman
ba6aec70ca
rpcrt4: Implement NdrConformantStructFree.
2007-12-07 17:06:05 +01:00
Rob Shearman
2ebee18198
rpcrt4: Improve PointerFree to not free buffer memory.
2007-12-07 16:34:17 +01:00
Rob Shearman
13e47d762a
rpcrt4: Set the memory pointer in NdrBaseTypeUnmarshall to the buffer if we're unmarshalling on a server without memory being passed in.
2007-12-05 13:49:08 +01:00
Rob Shearman
17132f7e1f
rpcrt4: Set fMustAlloc to TRUE when unmarshalling an object pointer.
2007-12-05 13:48:59 +01:00
Rob Shearman
2a9fae7565
rpcrt4: Set the destination pointer in PointerUnmarshall before calling the referenced type's unmarshalling routine.
...
When a pointer that is dereferenced is encountered then this can result
in a stale pointer (i.e. the one that is marshalled into the buffer for
the embedded pointer unmarshalling case) being used instead of the one
that was intended.
2007-12-04 18:18:01 +01:00
Rob Shearman
d8e467b0fd
rpcrt4: Reverse the conditions for which *pPointer is assigned base_ptr_val in PointerUnmarshall.
...
In one condition (fMustAlloc == TRUE), base_ptr_val may be uninitialised
and so cause a valgrind warning. Reversing the check is harmless and
doesn't result in a performance decrease.
2007-12-03 13:10:21 +01:00
Rob Shearman
c735a14788
rpcrt4: Fix NdrSimpleStructUnmarshall to cope with [in, out] embedded pointers.
2007-11-30 11:56:30 +01:00
Rob Shearman
b676309db3
rpcrt4: Improve PointerUnmarshall to cope with keeping the non-NULL source pointer of a client unmarshall.
...
This will enable various types with embedded pointers to handle [in,out]
parameters correctly by keeping the existing memory.
2007-11-30 11:56:21 +01:00
Rob Shearman
4e8f69ac2d
rpcrt4: Move forcing of fMustAlloc to NULL to the callers of EmbeddedPointerUnmarshall.
...
This will enable them to be individually fixed up to use memory if it
was provided by the caller.
2007-11-30 11:56:11 +01:00
Rob Shearman
43e0c67fe2
rpcrt4: EmbeddedPointerUnmarshall doesn't need to change the address of the allocated memory, so reduce the level of indirection of the memory parameter by one.
2007-11-30 11:56:04 +01:00
Rob Shearman
8668369b4f
rpcrt4: Fix an integer overflow in NdrConformantStructMarshall and NdrConformantStructUnmarshall.
2007-11-29 13:31:05 +01:00
Rob Shearman
074898ba2b
rpcrt4: Fix some more potential buffer overflows.
2007-11-29 13:30:58 +01:00
Rob Shearman
5a3c34eb89
rpcrt4: Check there is enough space in the buffer and that the size doesn't cause an overflow when copying data to it.
2007-11-29 13:30:21 +01:00
Rob Shearman
d0223ecc0e
rpcrt4: Check for integer overflows when increasing the buffer length.
...
Rename safe_buffer_copy to safe_copy_from_buffer.
2007-11-29 13:30:04 +01:00
Rob Shearman
046f24a0e7
rpcrt4: Raise an exception if a NULL ref-pointer is passed in to PointerMarshall or PointerBufferSize.
2007-11-21 12:03:35 +01:00
Rob Shearman
04dc115b54
rpcrt4: Handle FC_IGNORE in the base type functions.
2007-11-05 15:06:06 +01:00
Dan Hipschman
8caa325eb7
rpcrt4: Initialize allocated pointers to NULL in PointerUnmarshall.
...
This patch initializes allocated pointers in PointerUnmarshall since later
code checks the value for NULL (specifically, NdrConformantArrayUnmarshall).
2007-11-05 13:24:36 +01:00
Dan Hipschman
acfde97b9e
rpcrt4, widl: Make pointer layouts compatible with windows; fix conformant array tests.
2007-10-11 16:24:28 +02:00
Rob Shearman
f67a6adf4e
rpcrt4: Implement RpcSmDestroyClientContext and RpcSsDestroyClientContext.
2007-09-19 11:36:41 +02:00
Andrew Talbot
fa3d623882
rpcrt4: Constify some variables.
2007-08-20 11:56:05 +02:00
Dmitry Timoshkov
12d3905427
rpcrt4: Fix the buffer bounds check.
2007-07-19 12:03:50 +02:00
Rob Shearman
2703059933
rpcrt4: Never allocate memory for the discriminant in union_arm_unmarshall as the memory is part of the union and has already been allocated.
2007-07-16 22:46:59 +02:00
Rob Shearman
b44c16cc8d
rpcrt4: Check to make sure there is enough data in the buffer during unmarshalling, so that the code doesn't try to read beyound the end of the buffer.
2007-07-16 22:46:55 +02:00
Rob Shearman
686c0f094c
rpcrt4: Even though FC_ENUM16 is an unsigned type, the highest allowable value that can be marshalled is SHRT_MAX, not USHRT_MAX.
2007-07-16 22:46:47 +02:00
Dan Hipschman
ea7b1694de
rpcrt4: Allow enums as union switch types.
2007-06-26 11:59:43 +02:00
Rob Shearman
545c2a95f6
rpcrt4: Dereference the pointer passed to the marshaling/unmarshaling/sizing routines in complex types for interface pointers.
2007-06-25 23:21:55 +02:00
Rob Shearman
fc124eca6e
rpcrt4: Implement marshalling, unmarshalling and buffer sizing for the context handle type.
2007-06-25 23:21:55 +02:00
Rob Shearman
d36f02eaa9
rpcrt4: Implement marshalling/unmarshalling for the range NDR type.
2007-06-25 23:21:54 +02:00
Rob Shearman
4174255e0c
rpcrt4: Set PointerBufferMark to the buffer location immediately after the non-pointer data in complex struct and array marshaling and unmarshaling to keep to the DCE/RPC specification.
2007-06-25 23:21:54 +02:00
Rob Shearman
0f826e7cc1
rpcrt4: Use the offset to array data in embedded pointer format descriptions.
2007-06-20 13:08:30 +02:00
Dan Hipschman
d2c15ed01b
rpcrt4: Fix typo in union buffer size calculation.
2007-06-19 11:46:02 +02:00
Dan Hipschman
6fd05b1dc7
rpcrt4: Fix bug calculating union switch type.
2007-06-19 11:45:51 +02:00
Dan Hipschman
b09b917a5c
rpcrt4: Remove inaccurate comments.
2007-06-19 11:45:44 +02:00
Rob Shearman
0871ab9130
rpcrt4: Implement encapsulated union NDR functions.
2007-06-18 13:58:09 +02:00
Andrew Talbot
d5d056ef75
rpcrt4: Exclude unused headers.
2007-05-18 14:11:22 +02:00
Andrew Talbot
67813450b9
rpcrt4: Replace inline static with static inline.
2007-03-23 12:29:52 +01:00
Rob Shearman
b6d8b27be5
rpcrt4: The format structures used in the marshaling code should have 1-byte alignment.
2007-02-12 15:20:52 +01:00
Huw Davies
e3abd2b3ff
rpcrt4: Implement NdrSimpleType{Marshall,Unmarshall}.
2007-01-24 11:59:01 +01:00
Francois Gouget
5962cf6e4f
rpcrt4: Add some stub documentation headers to make winapi_check happy.
...
Also fix some headers that identified internal APIs as external.
2006-11-13 13:00:53 +01:00
Michael Stefaniuc
de21efbadd
rpcrt4: Win64 printf format warning fixes.
2006-11-10 11:31:59 +01:00
Michael Stefaniuc
718f3c3505
rpcrt4: More "unsigned long" to "ULONG" changes in preparation of the removal of WINE_NO_LONG_AS_INT.
2006-11-10 11:31:45 +01:00
Michael Stefaniuc
0628fb5098
rpcrt4/ndr_marshall.c: Bring the function definitions in sync with their declaration.
...
Those got out of sync due to the unsigned long to ULONG migration in the headers.
2006-11-10 11:31:26 +01:00
Andrew Talbot
7147f79153
rpcrt4: Cast-qual warnings fix.
2006-09-26 11:40:33 +02:00
Huw Davies
59be6e0600
rpcrt4: Remember to skip over the conformance description.
2006-08-18 11:34:26 +02:00
Phil Lodwick
dd000074fe
rpcrt4: Support for SMVARRAY in EmbeddedComplexSize.
2006-07-25 11:31:59 +02:00
Robert Shearman
5700fe8a61
rpcrt4: Set BufferMark before calling EmbeddedPointerMarshall, EmbeddedPointerUnmarshall or EmbeddedPointerMemorySize.
2006-07-24 13:47:40 +02:00
Robert Shearman
a8531067c4
rpcrt4: Support small fixed arrays in EmbeddedComplexSize.
2006-07-24 13:47:31 +02:00
Robert Shearman
4c4fc14fe9
rpcrt4: Allocate memory based on MaxCount, not ActualCount in NdrConformantStringUnmarshall.
2006-07-24 13:47:25 +02:00
Robert Shearman
98c26a81fe
rpcrt4: Add support for marshaling the FC_HYPER base type in complex types.
...
Change the FIXME messages to print out unrecognised format characters in
hex rather than decimal.
2006-07-24 13:47:13 +02:00