8d4cb7e
--- gawk-3.1.5/io.c.free	2005-09-27 19:21:05.000000000 +0200
8d4cb7e
+++ gawk-3.1.5/io.c	2005-09-27 19:22:58.000000000 +0200
8d4cb7e
@@ -2479,9 +2479,12 @@
8d4cb7e
 {
8d4cb7e
 	struct stat sbuf;
8d4cb7e
 	struct open_hook *oh;
8d4cb7e
+	int iop_malloced = FALSE;
8d4cb7e
 
8d4cb7e
-	if (iop == NULL)
8d4cb7e
+	if (iop == NULL) {
8d4cb7e
 		emalloc(iop, IOBUF *, sizeof(IOBUF), "iop_alloc");
8d4cb7e
+		iop_malloced = TRUE;
8d4cb7e
+	}
8d4cb7e
 	memset(iop, '\0', sizeof(IOBUF));
8d4cb7e
 	iop->flag = 0;
8d4cb7e
 	iop->fd = fd;
8d4cb7e
@@ -2494,7 +2497,8 @@
8d4cb7e
 	}
8d4cb7e
 
8d4cb7e
 	if (iop->fd == INVALID_HANDLE) {
8d4cb7e
-		free(iop);
8d4cb7e
+		if (iop_malloced)
8d4cb7e
+			free(iop);
8d4cb7e
 		return NULL;
8d4cb7e
 	}
8d4cb7e
 	if (isatty(iop->fd))
8d4cb7e
@@ -2502,7 +2506,7 @@
8d4cb7e
 	iop->readsize = iop->size = optimal_bufsize(iop->fd, & sbuf);
8d4cb7e
 	iop->sbuf = sbuf;
8d4cb7e
 	if (do_lint && S_ISREG(sbuf.st_mode) && sbuf.st_size == 0)
8d4cb7e
-			lintwarn(_("data file `%s' is empty"), name);
8d4cb7e
+		lintwarn(_("data file `%s' is empty"), name);
8d4cb7e
 	errno = 0;
8d4cb7e
 	iop->count = iop->scanoff = 0;
8d4cb7e
 	emalloc(iop->buf, char *, iop->size += 2, "iop_alloc");