Fixed? a trange bug related to compression, Daniel.
diff --git a/ChangeLog b/ChangeLog
index 07a9ce9..09a9e91 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Oct 30 01:36:52 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
+
+	* parser.c: fixed? a strange error due to compression on a GWP
+	  document.
+
 Thu Oct 29 00:48:45 EST 1998 Daniel Veillard <Daniel.Veillard@w3.org>
 
 	* tree.[ch]: bug fixing
diff --git a/parser.c b/parser.c
index 47323e0..441b5d1 100644
--- a/parser.c
+++ b/parser.c
@@ -3345,6 +3345,7 @@
     int input;
 #endif
     int res;
+    int len;
     struct stat buf;
     char *buffer;
     xmlParserCtxtPtr ctxt;
@@ -3354,17 +3355,19 @@
     if (res < 0) return(NULL);
 
 #ifdef HAVE_ZLIB_H
+    len = (buf.st_size * 8) + 1000;
 retry_bigger:
-    buffer = malloc((buf.st_size * 20) + 100);
+    buffer = malloc(len);
 #else
-    buffer = malloc(buf.st_size + 100);
+    len = buf.st_size + 100;
+    buffer = malloc(len);
 #endif
     if (buffer == NULL) {
 	perror("malloc");
         return(NULL);
     }
 
-    memset(buffer, 0, sizeof(buffer));
+    memset(buffer, 0, len);
 #ifdef HAVE_ZLIB_H
     input = gzopen (filename, "r");
     if (input == NULL) {
@@ -3381,7 +3384,7 @@
     }
 #endif
 #ifdef HAVE_ZLIB_H
-    res = gzread(input, buffer, 20 * buf.st_size);
+    res = gzread(input, buffer, len);
 #else
     res = read(input, buffer, buf.st_size);
 #endif
@@ -3396,9 +3399,9 @@
     }
 #ifdef HAVE_ZLIB_H
     gzclose(input);
-    if (res >= 20 * buf.st_size + 20) {
+    if (res >= len) {
         free(buffer);
-	buf.st_size *= 2;
+	len *= 2;
 	goto retry_bigger;
     }
     buf.st_size = res;