[prev in list] [next in list] [prev in thread] [next in thread]
List: mico-announce
Subject: Re: [mico-devel] Bug/incompatibility with ORBit2; including patch
From: Karel Gardas <kgardas () objectsecurity ! com>
Date: 2008-01-14 18:30:42
Message-ID: 478BAA52.1090902 () objectsecurity ! com
[Download RAW message or body]
Hello,
first of all, thanks for your bugreport! May I ask which version of
ORBit exactly is that "aggressive"? I'd like to duplicate the issue
since I'd like to simplify your patch a bit in a way
MICO::CDRDecoder::get_string is working. i.e. alloc of temporary and
assigning to _out when everything is OK. At least from your description
I got the idea that the issue is in ::get_string_raw where we free
string and then in caller (MICO::GIOPCodec::get_invoke_request) where we
use String_var, please correct me if I'm wrong. I'm asking since I'm not
able to apply your patch as the patch is complaining:
patching file codec.cc
patch: **** malformed patch at line 127: if (s[len-1] !=3D 0)
Thanks,
Karel
Specht, Joerg wrote:
> When using _is_a() from a ORBit-client to a mico-server (eg nsd) the
> mico-server crashes ("glibc detected: double free corruption").
> The reason is a inconsistency in ORBit: it sends the method name with a
> length 1 byte too long (and a junk character).
> I posted a patch to ORBit,
> but mico shouldn't crash.
>
> The following patch solves the problem:
> - CORBA::string_free() freed the string first, the destructor the second
> time (that's mico's bug)
> - (s[len-1] != 0) is replaced by (!memchr (s.ptr(), 0, len)) which enables
> ORBit-interoperability as long as ORBit is wrong
> this makes mico more tolerant to wrong-formatted messages, but I think
> that's ok
> - I also tested this patch with mico-2.3.12; but as we use mico-2.3.7
> internally, the patch is for the old version
>
> diff -Naur mico-2.3.7.old/orb/codec.cc mico-2.3.7.new/orb/codec.cc
> --- mico-2.3.7.old/orb/codec.cc 2001-10-11 20:08:52.000000000 +0200
> +++ mico-2.3.7.new/orb/codec.cc 2007-11-19 17:31:43.000000000 +0100
> @@ -1998,14 +1998,10 @@
> return FALSE;
>
> s = CORBA::string_alloc (len-1);
> - if (!buf->get (s.ptr(), len)) {
> - CORBA::string_free (s);
> + if (!buf->get (s.ptr(), len))
> return FALSE;
> - }
> - if (s[len-1] != 0) {
> - CORBA::string_free (s);
> + if (!memchr (s.ptr(), 0, len)) // was (incompatible with ORBit2):
> if (s[len-1] != 0)
> return FALSE;
> - }
> return TRUE;
> }
>
>
>
> ----------------------------------------
> This message is intended for a particular addressee only and may contain business \
> or company secrets. If you have received this email in error, please contact the \
> sender and delete the message immediately. Any use of this email, including saving, \
> publishing, copying, replication or forwarding of the message or the contents is \
> not permitted.
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Mico-devel mailing list
> Mico-devel@mico.org
> http://www.mico.org/mailman/listinfo/mico-devel
--
Karel Gardas kgardas@objectsecurity.com
ObjectSecurity Ltd. http://www.objectsecurity.com
_______________________________________________
Mico-devel mailing list
Mico-devel@mico.org
http://www.mico.org/mailman/listinfo/mico-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic