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;