[omniORB] read-only MemBufferedStream. a bug?

David Riddoch djr@uk.research.att.com
Mon, 10 May 1999 17:34:58 +0100 (GMT)


Hi Walt,


Yep - this is a bug. Thanks for pointing it out.

  http://www.uk.research.att.com/omniORB/bugs/57.html

I've put up a patch.


David



On Mon, 10 May 1999, Walt Yao wrote:

> hi omniOrbers,
> 
> I am aware a few people have asked questions on how to serialise CORBA data 
> using the omniORB's way, and David has given an excellent solution using 
> MemBufferedStream.  (search on subject title Re: [omniORB] Need to save Any to 
> void* - serialise it?).  However, having tried using MemBufferedStream, I was 
> rather surprised that I failed to bring my serialised data back from the disk. 
>  omniORB raises MARSHAL exception in every case.
> 
> I therefore began my investigation on this problem by looking into
> omni's source code.  It turns out that if you construct a read-only
> MemBufferedStream object by giving a preallocated piece of memory to the
> constructor, the constructor will set both in and out markers to the
> beginning of the memory buffer you passed in.  
> 
> During subsequent read access from MemBufferedStream (which I suspect
> everyone would want to do this.  that's the whole point of constructing
> a read-only buffered stream), a check against memory overrun will be
> done. Since the check is based on comparing pd_in_mkr and pd_out_mkr,
> this will always fail since pd_out_mkr is set to the beginning of the
> buffer. Upon (falsely) detecting buffer overrun, an exception is thrown.
> 
> I have tried to manually set pd_out_mkr in gdb, and it turned out to be
> working fine.  I wonder if this is my fault due to wrong usage of
> MemBufferedStream, or if this is a bug in omniORB?  Any comment will be
> highly appreciated.  Thanks.
> 
> // Walt
> 
> 
>