Index: library/xml/TclExpat-1.1/readfilemap.c =================================================================== diff -u -rc72f9f638677608fab1502cd696c8f2d6b2952f9 -r9a4096c393b0a94ea8d17f2fef3cdca0f1202fb8 --- library/xml/TclExpat-1.1/readfilemap.c (.../readfilemap.c) (revision c72f9f638677608fab1502cd696c8f2d6b2952f9) +++ library/xml/TclExpat-1.1/readfilemap.c (.../readfilemap.c) (revision 9a4096c393b0a94ea8d17f2fef3cdca0f1202fb8) @@ -59,27 +59,32 @@ } if (fstat(fd, &sb) < 0) { perror(name); + close(fd); return 0; } if (!S_ISREG(sb.st_mode)) { fprintf(stderr, "%s: not a regular file\n", name); + close(fd); return 0; } nbytes = sb.st_size; p = malloc(nbytes); if (!p) { fprintf(stderr, "%s: out of memory\n", name); + close(fd); return 0; } n = read(fd, p, nbytes); if (n < 0) { perror(name); close(fd); + free(p); return 0; } if (n != nbytes) { fprintf(stderr, "%s: read unexpected number of bytes\n", name); close(fd); + free(p); return 0; } processor(p, nbytes, name, arg);