< Previous by Date Date Index Next by Date >
< Previous in Thread Thread Index Next in Thread >

Re: [reSIProcate] Problem with memory corruption


This fix works for me:

--- Security.cxx        (revision 3639)
+++ Security.cxx        (working copy)
@@ -425,7 +425,7 @@
          size_t len = BIO_get_mem_data(out,&p);
          assert(p);
          assert(len);
-         Data  buf(Data::Take, p, len);
+         Data  buf(Data::Borrow, p, len);
          
          this->onWritePEM(key, type, buf);
       }

My guess is that Data::Take results in a change of ownership
of a buffer that is _also_ owned by the memory BIO. 

So this buffer gets deleted twice: first when the Data object
goes out of scope, and second when the BIO structure is freed.
I don't know what distinction, if any, exists between Data::Share
and Data::Borrow.

nagendra

ps:  I don't have commit access, so if this fix makes sense and
works for you please commit.

* Cullen Jennings <fluffy@xxxxxxxxx> [2004-11-26 16:37:20 -0800]:

> 
> I'm having some problems that I think are partially caused by a buffer
> getting freed twice and mostly cause by me not understanding how Data works.
> 
> What is the Take, Share, Borrow stuff mean in Data?
> 
> If I have a buffer and I want the Data to make a copy of the buffer in the
> constructor then never touch the buffer again including not freeing it, What
> do I do?
> 
> Thanks, Cullen
> 
> 
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel@xxxxxxxxxxxxxxxxxxx
> https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel