zlib free fix
diff --git a/libtelnet.c b/libtelnet.c
index b7a3aed..90c34bd 100644
--- a/libtelnet.c
+++ b/libtelnet.c
@@ -47,7 +47,10 @@
 
 	/* free zlib box */
 	if (telnet->zlib != 0) {
-		inflateEnd(telnet->zlib);
+		if (telnet->mode == LIBTELNET_MODE_SERVER)
+			deflateEnd(telnet->zlib);
+		else
+			inflateEnd(telnet->zlib);
 		free(telnet->zlib);
 		telnet->zlib = 0;
 	}
@@ -178,8 +181,6 @@
 					LIBTELNET_ERROR_OK) {
 				start = i + 1;
 				telnet->state = LIBTELNET_STATE_DATA;
-			} else {
-				telnet->state = LIBTELNET_STATE_SB;
 			}
 			break;
 
@@ -237,7 +238,7 @@
 					 * remaining compressed bytes in the current _process
 					 * buffer argument
 					 */
-					libtelnet_push(telnet, &buffer[i + 1], size - i - 1,
+					libtelnet_push(telnet, &buffer[start], size - start,
 							user_data);
 					return;
 				}