> Without version info from the original poster, who knows? But for good > measure, could you link to your fix so we can figure out if it has > been undone? Your response indicates to me that you are more alert to > the telltale signs of a particular defect. But this isn't something > that I recognize. Help us out.
Sorry for the delay but since I am on a 2 year sabbatical, accessing the data was pretty difficult. Here is the only patch I could find for 4.0.10 compress.c, which I believe is now part of nszlib.c in 4.5. I don't think I applied it to 4.5 since I mostly moved over to Naviserver after 4.0.10. The problem was caused by returning incorrect CRC values as well as sending a few too many bytes back the to the user. Patch is attached. I also attached the fixed compress.c. It's the best I can do at the moment. Daniel | --------------------------------------------------------------- | Daniel P. Stasinski | http://www.saidsimple.com | dan...@avenues.org | http://www.disabilities-r-us.com | XMMP: moooo...@avenues.org | http://www.avenues.org | Google Talk: mooooooo | http://www.scriptkitties.com -- AOLserver - http://www.aolserver.com/ To Remove yourself from this list, simply send an email to <lists...@listserv.aol.com> with the body of "SIGNOFF AOLSERVER" in the email message. You can leave the Subject: field of your email blank.
/* * The contents of this file are subject to the AOLserver Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://aolserver.com/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * compress.c -- * * Support for simple gzip compression using Zlib. */ static const char *RCSID = "@(#) $Header: /cvsroot/aolserver/aolserver/nsd/compress.c,v 1.1.2.3 2005/01/12 19:11:46 dossy Exp $, compiled: " __DATE__ " " __TIME__; #include "ns.h" #ifdef HAVE_ZLIB_H #include <zlib.h> static char header[] = { 037, 0213, /* GZIP magic number. */ 010, /* Z_DEFLATED */ 0, /* flags */ 0,0,0,0, /* timestamp */ 0, /* xflags */ 03}; /* Unix OS_CODE */ /* *---------------------------------------------------------------------- * * Ns_CompressGzip -- * * Compress a string using gzip with RFC 1952 header/footer. * * Results: * NS_OK if compression worked, NS_ERROR otherwise. * * Side effects: * Will write compressed content to given Tcl_DString. * *---------------------------------------------------------------------- */ int Ns_CompressGzip(char *buf, int len, Tcl_DString *outPtr, int level) { uLongf glen; char *gbuf; uLong crc; int skip; uint32_t footer[2]; /* * Grow buffer for header, footer, and maximum compressed size. */ glen = compressBound(len) + sizeof(header) + sizeof(footer); Tcl_DStringSetLength(outPtr, glen); /* * Compress output starting 2-bytes from the end of the header. */ gbuf = outPtr->string; skip = sizeof(header) - 2; glen -= skip; if (compress2(gbuf + skip, &glen, buf, (uLong) len, level) != Z_OK) { return NS_ERROR; } glen -= 4; memcpy(gbuf, header, sizeof(header)); Tcl_DStringSetLength(outPtr, glen + skip); /* * Append footer of CRC and uncompressed length. */ crc = crc32(0, Z_NULL, 0); crc = crc32(crc, buf, len); footer[0] = crc; footer[1] = len; Tcl_DStringAppend(outPtr, (char *) footer, sizeof(footer)); return NS_OK; } #else int Ns_CompressGzip(char *buf, int len, Tcl_DString *outPtr, int level) { return NS_ERROR; } #endif /* *---------------------------------------------------------------------- * * Ns_Compress -- * * Deprecated: Used by nsjk2 module. Remove this once nsjk2 has * been updated to use Ns_CompressGzip directly. * * Results: * NS_OK if compression worked, NS_ERROR otherwise. * * Side effects: * Will write compressed content to given Tcl_DString. * *---------------------------------------------------------------------- */ int Ns_Compress(char *buf, int len, Tcl_DString *outPtr, int level) { return Ns_CompressGzip(buf, len, outPtr, level); }
--- /home/daniel/compress.c 2005-01-12 12:11:46.000000000 -0700 +++ compress.c 2009-10-13 17:11:45.853632566 -0700 @@ -11,7 +11,7 @@ * * The Original Code is AOLserver Code and related documentation * distributed by AOL. - * + * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. @@ -48,7 +48,7 @@ 0, /* xflags */ 03}; /* Unix OS_CODE */ - + /* *---------------------------------------------------------------------- * @@ -78,11 +78,11 @@ * Grow buffer for header, footer, and maximum compressed size. */ - glen = len + (len / 100) + 13 + sizeof(header) + sizeof(footer); + glen = compressBound(len) + sizeof(header) + sizeof(footer); Tcl_DStringSetLength(outPtr, glen); /* - * Compress output starting 2-bytes from the end of the header. + * Compress output starting 2-bytes from the end of the header. */ gbuf = outPtr->string; @@ -91,6 +91,7 @@ if (compress2(gbuf + skip, &glen, buf, (uLong) len, level) != Z_OK) { return NS_ERROR; } + glen -= 4; memcpy(gbuf, header, sizeof(header)); Tcl_DStringSetLength(outPtr, glen + skip); @@ -100,8 +101,8 @@ crc = crc32(0, Z_NULL, 0); crc = crc32(crc, buf, len); - footer[0] = htonl(crc); - footer[1] = htonl(len); + footer[0] = crc; + footer[1] = len; Tcl_DStringAppend(outPtr, (char *) footer, sizeof(footer)); return NS_OK; @@ -117,7 +118,7 @@ #endif - + /* *---------------------------------------------------------------------- *