[Ace-users] Re: [tao-users] Access violation if handling a
structure containing an octet sequence length > 2604 bytes
Johnny Willemsen
jwillemsen at remedy.nl
Fri Aug 17 05:02:18 CDT 2007
Hi,
I am not familiar with any limitation, please make a small reproducer as
test program and also try x.5.10.
Be aware of the fact that BCB2006 isn't maintained anymore as supported
platform.
Regards,
Johnny Willemsen
Remedy IT
Postbus 101
2650 AC Berkel en Rodenrijs
The Netherlands
www.theaceorb.nl / www.remedy.nl
*** Integrated compile and test statistics see
http://scoreboard.theaceorb.nl ***
*** Commercial service and support for ACE/TAO/CIAO ***
*** See http://www.theaceorb.nl/en/support.html ***
<arne.berger at gmx.de> wrote in message
news:<1187340823.006680.10270 at 19g2000hsx.googlegroups.com>...
Hi
I have a problem if receiving an unbounded octet sequence by my server
implementation. Following I'm using the PRF form:
ACE VERSION:
5.5.4
HOST MACHINE and OPERATING SYSTEM:
Intel(R) Core(TM)2 and Windows XP Prof. V2002 SP2
COMPILER NAME AND VERSION (AND PATCHLEVEL):
Borland Developer Studio for MicrosoftR WindowsT Version
10.0.2288.42451 Update 2
THE $ACE_ROOT/ace/config.h FILE
config-win32.h
AREA/CLASS/EXAMPLE AFFECTED:
TAO::template <typename stream>
bool demarshal_sequence(stream & strm,
TAO::unbounded_value_sequence <CORBA::Short> & target)
and
TAO::details::template<typename T, bool dummy>
struct unbounded_value_allocation_traits::freebuf(value_type
*)
DOES THE PROBLEM AFFECT:
COMPILATION: no
LINKING: no
EXECUTION: yes
OTHER: no
SYNOPSIS:
Access violation if handling a structure containing an octet
sequence length > 2604 bytes
DESCRIPTION:
I've implemented a server interface contains a method with a
structured "in" parameter. The structure consists of several
sequences
(key-value-pairs like string-long, string-double, string-
binary data and so on).
The entries of the binary data sequences is defined as
struct SimBinary
{
string key; // identifier
sequence<octet> value; // the binary data
};
typedef sequence<SimBinary> SimBinarySeq;
If any of these octet sequences contains more than 2604 bytes
an
access violation occurs in
TAO::details::template<typename T, bool dummy>
struct
unbounded_value_allocation_traits::freebuf(value_type *buffer)
{
delete [] buffer; // access violation
}
Within template
TAO::template <typename stream>
bool demarshal_sequence(stream & strm,
TAO::unbounded_value_sequence <CORBA::Short> & target)
{
...
sequence tmp(new_length);
...
}
a temporary instance "tmp" is created. At the end of function
block the destructor
~unbounded_value_sequence<CORBA::Octet>();
is called and invokes
freebuf(buffer);
Until length of 2604 bytes no problems occur. Is there a limit
I've to look after?
Nevertheless an access violation should not occur!
REPEAT BY:
See description. After first exception thread is died.
SAMPLE FIX/WORKAROUND:
I will produce an example if necessary. A workaround is not
possible.
Thanks if anyone can promp help me.
Best regards
Arne Berger
----------
More information about the Ace-users
mailing list