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