diff --git a/clamav-devel/ChangeLog b/clamav-devel/ChangeLog index ba06963dd..81f889686 100644 --- a/clamav-devel/ChangeLog +++ b/clamav-devel/ChangeLog @@ -1,3 +1,8 @@ +Tue Aug 15 16:07:11 BST 2006 (njh) +---------------------------------- + * libclamav/pdf.c: Windows fix: handle more than 26 temporary files in + a temporary directory + Sun Aug 13 22:13:45 CEST 2006 (tk) ---------------------------------- * configure: add --enable-experimental switch diff --git a/clamav-devel/libclamav/pdf.c b/clamav-devel/libclamav/pdf.c index 26f244dcd..e9756b6b5 100644 --- a/clamav-devel/libclamav/pdf.c +++ b/clamav-devel/libclamav/pdf.c @@ -15,7 +15,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -static char const rcsid[] = "$Id: pdf.c,v 1.53 2006/08/11 21:10:58 njh Exp $"; +static char const rcsid[] = "$Id: pdf.c,v 1.54 2006/08/15 15:06:25 njh Exp $"; #if HAVE_CONFIG_H #include "clamav-config.h" @@ -43,6 +43,10 @@ static char const rcsid[] = "$Id: pdf.c,v 1.53 2006/08/11 21:10:58 njh Exp $"; #include #endif +#ifdef C_WINDOWS +#include +#endif + #include "mbox.h" #include "pdf.h" @@ -68,7 +72,7 @@ cli_pdf(const char *dir, int desc, const cli_ctx *ctx) int rc = CL_CLEAN; struct table *md5table; - cli_dbgmsg("in cli_pdf()\n"); + cli_dbgmsg("in cli_pdf(%s)\n", dir); if(fstat(desc, &statb) < 0) return CL_EOPEN; @@ -181,11 +185,6 @@ cli_pdf(const char *dir, int desc, const cli_ctx *ctx) break; /*object_number = atoi(q);*/ - - /* - * FIXME: this assumes sizeof(int) == sizeof(char *), which - * isn't true on 64 bits machines - */ bytesleft -= (q - p); p = q; @@ -284,8 +283,22 @@ cli_pdf(const char *dir, int desc, const cli_ctx *ctx) snprintf(fullname, sizeof(fullname), "%s/pdfXXXXXX", dir); #if defined(C_LINUX) || defined(C_BSD) || defined(HAVE_MKSTEMP) || defined(C_SOLARIS) || defined(C_CYGWIN) fout = mkstemp(fullname); -#else - (void)mktemp(fullname); +#elif defined(C_WINDOWS) + if(_mktemp(fullname) == NULL) { + /* mktemp only allows 26 files */ + char *name = cli_gentemp(dir); + if(name == NULL) + fout = -1; + else { + strcpy(fullname, name); + free(name); + fout = open(fullname, + O_WRONLY|O_CREAT|O_EXCL|O_TRUNC|O_BINARY, 0600); + } + } else + fout = open(fullname, O_WRONLY|O_CREAT|O_EXCL|O_TRUNC|O_BINARY, 0600); +#else + mktemp(fullname); fout = open(fullname, O_WRONLY|O_CREAT|O_EXCL|O_TRUNC|O_BINARY, 0600); #endif