Commit Graph

297 Commits

Author SHA1 Message Date
Rob Shearman 27ae234b04 rpcrt4: Remove unreachable code in EmbeddedComplexSize.
RPC_FC_ERROR_STATUS_T has a value of 0x10 and therefore isn't a
possible value of "flags_type & 0xf" in the switch statement.
2008-08-18 17:34:13 +02:00
Rob Shearman 2652ddfeba rpcrt4: Re-implement part of the conformant varying structure processing routines using array_* functions. 2008-08-18 14:34:41 +02:00
Rob Shearman b2305adc3c rpcrt4: Factorise conformant string functions into array_* functions.
This allows conformant string array types to be
marshalled/unmarshalled when embedded in a complex type.
2008-08-18 14:34:40 +02:00
Rob Shearman 9e3260847a rpcrt4: Factorise conformant varying array functions into array_* functions.
This allows conformant varying array types to be
marshalled/unmarshalled when embedded in a complex type.
2008-08-18 14:34:40 +02:00
Rob Shearman 9116d73c63 rpcrt4: Factorise conformant array NDR functions and use them to fix the wire-representation of complex structures with conformant arrays.
Factorise each conformant array function into the part that deals with
reading, writing or sizing the conformance and another part that deals
with reading, writing or sizing the variance and the element data.

This allows complex structures to use the right wire format where the
conformance appears before the structure data starts.
2008-08-18 14:34:40 +02:00
Rob Shearman 8af1dba5a9 rpcrt4: Fix the memory pointer passed into the conformant array marshaller in NdrComplexStructMarshall.
It needs to be the end of the memory used by the constant part of the
structure, which is returned by CompkexStructMarshall.
2008-07-16 17:54:48 +02:00
Rob Shearman b75828fc90 rpcrt4: Clear the memory of embedded complex types in ComplexUnmarshall when fMustAlloc is TRUE to avoid passing uninitialised memory to the unmarshaller.
Found by Valgrind.
2008-07-07 12:11:24 +02:00
Rob Shearman 620d783680 rpcrt4: Don't reserve space in the buffer for reference pointers embedded in complex types.
Ref pointers don't need a pointer ID and reserving space would render
the code incompatible with other clients. Note that the pointer
marshalling/unmarshalling functions didn't actually read/write pointer
IDs to/from the reserved space in the buffer.
2008-07-04 19:49:00 +02:00
Rob Shearman 5887be5717 rpcrt4: Implement memory sizing for pointers in complex types. 2008-07-04 19:48:47 +02:00
Rob Shearman 81b4436add rpcrt4: The conformant array offset in complex structs should be signed. 2008-07-04 19:48:38 +02:00
Rob Shearman 44649e855a rpcrt4: Fix NdrComplexArrayUnmarshall and NdrComplexStructUnmarshall to reuse memory for embedded pointers. 2008-07-04 19:48:30 +02:00
Rob Shearman 517844e054 rpcrt4: Support calculating the size in memory of range types embedded in complex types. 2008-07-04 19:47:58 +02:00
Rob Shearman 0c095ee0d3 rpcrt4: Fix NdrConformantVaryingStructUnmarshall to use buffer memory if applicable and to reuse memory for embedded pointers. 2008-06-23 19:46:29 +02:00
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