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