70 lines
2.4 KiB
Diff
70 lines
2.4 KiB
Diff
|
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;
|