From 4965951a2925646a46ee26ad1e193be7cf23c636 Mon Sep 17 00:00:00 2001 From: Lars Kanis <lars@greiz-reinsdorf.de> Date: Sun, 22 Jan 2012 22:22:13 +0100 Subject: [PATCH] fix double free in FXMemoryStream#giveBuffer The Ruby String buffer was free'd by GC and FXMemoryStream#close --- swig-interfaces/FXMemoryStream.i | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/swig-interfaces/FXMemoryStream.i b/swig-interfaces/FXMemoryStream.i index 613cd5d..82c4209 100644 --- a/swig-interfaces/FXMemoryStream.i +++ b/swig-interfaces/FXMemoryStream.i @@ -44,7 +44,7 @@ public: return self->open(save_or_load,data); } } - + // Take buffer away from stream VALUE takeBuffer() { FXuchar* buffer; @@ -54,19 +54,23 @@ public: FXFREE(&buffer); return result; } - + /// Give buffer to stream void giveBuffer(VALUE str){ + FXuchar* copy = NULL; Check_Type(str,T_STRING); FXuchar* buffer=reinterpret_cast<FXuchar*>(StringValuePtr(str)); FXuval sp=RSTRING_LEN(str); - self->giveBuffer(buffer,sp); + if( FXMALLOC(©, FXuchar *, sp)) { + memcpy(copy, buffer, sp); + self->giveBuffer(copy,sp); + } } } - + /// Get position FXlong position() const; - + /// Destructor virtual ~FXMemoryStream(); }; -- GitLab