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(&copy, FXuchar *, sp)) {
+        memcpy(copy, buffer, sp);
+        self->giveBuffer(copy,sp);
+        }
       }
   }
-  
+
   /// Get position
   FXlong position() const;
-  
+
   /// Destructor
   virtual ~FXMemoryStream();
   };
-- 
GitLab