Annotation of /trunk/gawk/patches/gawk-3.1.5-segfault_fix-1.patch
Parent Directory | Revision Log
Revision 144 -
(hide annotations)
(download)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 1295 byte(s)
Tue May 8 20:06:05 2007 UTC (17 years, 4 months ago) by niro
File size: 1295 byte(s)
-import
1 | niro | 144 | Submitted By: Matthew Burgess <matthew@linuxfromscratch.org> |
2 | Date: 2005-09-24 | ||
3 | Initial Package Version: 3.1.5 | ||
4 | Upstream Status: From Upstream | ||
5 | Origin: http://lists.gnu.org/archive/html/bug-gnu-utils/2005-08/msg00047.html | ||
6 | Description: Fixes a bug which causes gawk to segfault when operating on a non-existent file. | ||
7 | |||
8 | diff -Naur gawk-3.1.5.orig/io.c gawk-3.1.5/io.c | ||
9 | --- gawk-3.1.5.orig/io.c 2005-07-26 18:07:43.000000000 +0000 | ||
10 | +++ gawk-3.1.5/io.c 2005-09-24 14:43:13.771380264 +0000 | ||
11 | @@ -2480,9 +2480,12 @@ | ||
12 | { | ||
13 | struct stat sbuf; | ||
14 | struct open_hook *oh; | ||
15 | + int iop_malloced = FALSE; | ||
16 | |||
17 | - if (iop == NULL) | ||
18 | + if (iop == NULL) { | ||
19 | emalloc(iop, IOBUF *, sizeof(IOBUF), "iop_alloc"); | ||
20 | + iop_malloced = TRUE; | ||
21 | + } | ||
22 | memset(iop, '\0', sizeof(IOBUF)); | ||
23 | iop->flag = 0; | ||
24 | iop->fd = fd; | ||
25 | @@ -2495,7 +2498,8 @@ | ||
26 | } | ||
27 | |||
28 | if (iop->fd == INVALID_HANDLE) { | ||
29 | - free(iop); | ||
30 | + if (iop_malloced) | ||
31 | + free(iop); | ||
32 | return NULL; | ||
33 | } | ||
34 | if (isatty(iop->fd)) | ||
35 | @@ -2503,7 +2507,7 @@ | ||
36 | iop->readsize = iop->size = optimal_bufsize(iop->fd, & sbuf); | ||
37 | iop->sbuf = sbuf; | ||
38 | if (do_lint && S_ISREG(sbuf.st_mode) && sbuf.st_size == 0) | ||
39 | - lintwarn(_("data file `%s' is empty"), name); | ||
40 | + lintwarn(_("data file `%s' is empty"), name); | ||
41 | errno = 0; | ||
42 | iop->count = iop->scanoff = 0; | ||
43 | emalloc(iop->buf, char *, iop->size += 2, "iop_alloc"); |