Keresztfalvi Gabor <[EMAIL PROTECTED]> writes:

> Now it doesn't segfault... but:
> do_zlib: deflate() or inflate() failed: buffer error
> lshd: compress.c:54: do_packet_deflate: Assertion `packet' failed.
> This possibly means (from zlib.h):
> deflate() returns <snip> Z_BUF_ERROR if no progress is possible (for 
> example avail_in or avail_out was zero).

I got this as well. Improved patch:

diff -u -a -r1.21 zlib.c
--- zlib.c      1999/11/16 22:13:49     1.21
+++ zlib.c      2000/01/09 15:42:25
@@ -25,10 +25,13 @@

 #include "compress.h"
 #include "format.h"
+#include "ssh.h"
 #include "string_buffer.h"
 #include "werror.h"
 #include "xalloc.h"

+#if WITH_ZLIB
+
 #if HAVE_ZLIB_H
 #include <zlib.h>
 #else
@@ -63,8 +66,6 @@
 */


-#if WITH_ZLIB
-
 /* zlib memory functions */
 static void *zlib_alloc(void *opaque UNUSED, unsigned int items, unsigned int size)
 {
@@ -207,16 +208,33 @@

   res->z.zalloc = zlib_alloc;
   res->z.zfree = zlib_free;
+
   switch (mode)
     {
       case COMPRESS_DEFLATE:
        res->z.opaque = deflateEnd;
+       res->f = deflate;
         res->super.codec = do_zlib;
+
+       /* Maximum expansion is 0.1% + 12 bytes. We use 1% + 12, to be conservative.
+        *
+        * FIXME: However, these figures are documented for the
+        * entire stream, does they really apply to all segments,
+        * separated by Z_SYNC_FLUSH ? */
+
+       res->max = SSH_MAX_PACKET + SSH_MAX_PACKET / 100 + 12;
+       res->rate = RATE_UNIT;
+
         deflateInit(&res->z, closure->level);
         break;
       case COMPRESS_INFLATE:
        res->z.opaque = inflateEnd;
+       res->f = inflate;
         res->super.codec = do_zlib;
+
+       res->max = SSH_MAX_PACKET;
+       res->rate = 2 * RATE_UNIT;
+
         inflateInit(&res->z);
         break;
     }

With this patch, I get a little further, now

  lsh -v --trace -z -p 4711 localhost

dies a little later. With a different error:

  do_zlib: deflate() or inflate() failed: invalid stored block lengths
  compress.c:76: do_packet_inflate: Raising exception Inflating
  compressed data failed. (type 4096), using handler installed by connection.c:218: 
make_ssh_connection
  connection.c:184: do_exc_protocol_handler: Raising exception Finish
  i/o (type 65538), using handler installed by connection_commands.c:369: do_handshake
  Connection died, for reason 1.
  
/Niels

Reply via email to