e304238
diff -up tigervnc-1.3.0/common/rfb/ZRLEEncoder.cxx.zrle-crash tigervnc-1.3.0/common/rfb/ZRLEEncoder.cxx
e304238
--- tigervnc-1.3.0/common/rfb/ZRLEEncoder.cxx.zrle-crash	2013-07-01 13:41:59.000000000 +0100
e304238
+++ tigervnc-1.3.0/common/rfb/ZRLEEncoder.cxx	2013-12-12 17:30:48.510007365 +0000
e304238
@@ -55,16 +55,19 @@ Encoder* ZRLEEncoder::create(SMsgWriter*
e304238
 }
e304238
 
e304238
 ZRLEEncoder::ZRLEEncoder(SMsgWriter* writer_)
e304238
-  : writer(writer_), zos(0,0,zlibLevel)
e304238
+  : writer(writer_)
e304238
 {
e304238
   if (sharedMos)
e304238
     mos = sharedMos;
e304238
   else
e304238
     mos = new rdr::MemOutStream(129*1024);
e304238
+
e304238
+  zos = new rdr::ZlibOutStream(0, 0, zlibLevel);
e304238
 }
e304238
 
e304238
 ZRLEEncoder::~ZRLEEncoder()
e304238
 {
e304238
+  delete zos;
e304238
   if (!sharedMos)
e304238
     delete mos;
e304238
 }
e304238
@@ -78,10 +81,10 @@ bool ZRLEEncoder::writeRect(const Rect&
e304238
 
e304238
   switch (writer->bpp()) {
e304238
   case 8:
e304238
-    wroteAll = zrleEncode8(r, mos, &zos, imageBuf, maxLen, actual, ig);
e304238
+    wroteAll = zrleEncode8(r, mos, zos, imageBuf, maxLen, actual, ig);
e304238
     break;
e304238
   case 16:
e304238
-    wroteAll = zrleEncode16(r, mos, &zos, imageBuf, maxLen, actual, ig);
e304238
+    wroteAll = zrleEncode16(r, mos, zos, imageBuf, maxLen, actual, ig);
e304238
     break;
e304238
   case 32:
e304238
     {
e304238
@@ -94,16 +97,16 @@ bool ZRLEEncoder::writeRect(const Rect&
e304238
       if ((fitsInLS3Bytes && pf.isLittleEndian()) ||
e304238
           (fitsInMS3Bytes && pf.isBigEndian()))
e304238
       {
e304238
-        wroteAll = zrleEncode24A(r, mos, &zos, imageBuf, maxLen, actual, ig);
e304238
+        wroteAll = zrleEncode24A(r, mos, zos, imageBuf, maxLen, actual, ig);
e304238
       }
e304238
       else if ((fitsInLS3Bytes && pf.isBigEndian()) ||
e304238
                (fitsInMS3Bytes && pf.isLittleEndian()))
e304238
       {
e304238
-        wroteAll = zrleEncode24B(r, mos, &zos, imageBuf, maxLen, actual, ig);
e304238
+        wroteAll = zrleEncode24B(r, mos, zos, imageBuf, maxLen, actual, ig);
e304238
       }
e304238
       else
e304238
       {
e304238
-        wroteAll = zrleEncode32(r, mos, &zos, imageBuf, maxLen, actual, ig);
e304238
+        wroteAll = zrleEncode32(r, mos, zos, imageBuf, maxLen, actual, ig);
e304238
       }
e304238
       break;
e304238
     }
e304238
diff -up tigervnc-1.3.0/common/rfb/ZRLEEncoder.h.zrle-crash tigervnc-1.3.0/common/rfb/ZRLEEncoder.h
e304238
--- tigervnc-1.3.0/common/rfb/ZRLEEncoder.h.zrle-crash	2013-07-01 13:42:01.000000000 +0100
e304238
+++ tigervnc-1.3.0/common/rfb/ZRLEEncoder.h	2013-12-12 17:30:48.510007365 +0000
e304238
@@ -45,7 +45,7 @@ namespace rfb {
e304238
   private:
e304238
     ZRLEEncoder(SMsgWriter* writer);
e304238
     SMsgWriter* writer;
e304238
-    rdr::ZlibOutStream zos;
e304238
+    rdr::ZlibOutStream* zos;
e304238
     rdr::MemOutStream* mos;
e304238
     static rdr::MemOutStream* sharedMos;
e304238
     static int maxLen;