]> source.dussan.org Git - tigervnc.git/commitdiff
Fix 3305357 (Enabling custom compression level on client crashes server)
authorDRC <dcommander@users.sourceforge.net>
Sat, 18 Jun 2011 07:22:01 +0000 (07:22 +0000)
committerDRC <dcommander@users.sourceforge.net>
Sat, 18 Jun 2011 07:22:01 +0000 (07:22 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4508 3789f03b-4d11-0410-bbf8-ca57d06f2519

common/rdr/ZlibOutStream.cxx

index f60a620b6249b34410ded83925e7281ac538b5b0..c39aa55dcc4bd0762e81ed3760e9e293ecd3d260 100644 (file)
@@ -88,8 +88,6 @@ void ZlibOutStream::flush()
 //        fprintf(stderr,"zos flush: calling deflate, avail_in %d, avail_out %d\n",
 //                zs->avail_in,zs->avail_out);
       checkCompressionLevel();
-      int rc = deflate(zs, Z_SYNC_FLUSH);
-      if (rc != Z_OK) throw Exception("ZlibOutStream: deflate failed");
 
 //        fprintf(stderr,"zos flush: after deflate: %d bytes\n",
 //                zs->next_out-underlying->getptr());
@@ -122,8 +120,6 @@ int ZlibOutStream::overrun(int itemSize, int nItems)
 //                zs->avail_in,zs->avail_out);
 
       checkCompressionLevel();
-      int rc = deflate(zs, 0);
-      if (rc != Z_OK) throw Exception("ZlibOutStream: deflate failed");
 
 //        fprintf(stderr,"zos overrun: after deflate: %d bytes\n",
 //                zs->next_out-underlying->getptr());
@@ -155,9 +151,15 @@ int ZlibOutStream::overrun(int itemSize, int nItems)
 void ZlibOutStream::checkCompressionLevel()
 {
   if (newLevel != compressionLevel) {
-    if (deflateParams (zs, newLevel, Z_DEFAULT_STRATEGY) != Z_OK) {
+    int rc = deflate(zs, Z_SYNC_FLUSH);
+    if (rc != Z_OK) 
+      throw Exception("ZlibOutStream: deflate failed");
+    if (deflateParams (zs, newLevel, Z_DEFAULT_STRATEGY) != Z_OK)
       throw Exception("ZlibOutStream: deflateParams failed");
-    }
     compressionLevel = newLevel;
+  } else {
+    int rc = deflate(zs, Z_SYNC_FLUSH);
+    if (rc != Z_OK) 
+      throw Exception("ZlibOutStream: deflate failed");
   }
 }