From: Daniel Veillard Date: Fri, 12 Jul 2013 12:08:40 +0800 Subject: Fix handling of mmap errors https://bugzilla.gnome.org/show_bug.cgi?id=702320 as raised by Gaurav --- xmllint.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/xmllint.c b/xmllint.c index 4d464e4..92e6b03 100644 --- a/xmllint.c +++ b/xmllint.c @@ -1837,8 +1837,12 @@ static void streamFile(char *filename) { if ((fd = open(filename, O_RDONLY)) < 0) return; base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ; - if (base == (void *) MAP_FAILED) + if (base == (void *) MAP_FAILED) { + close(fd); + fprintf(stderr, "mmap failure for file %s\n", filename); + progresult = XMLLINT_ERR_RDFILE; return; + } reader = xmlReaderForMemory(base, info.st_size, filename, NULL, options); @@ -2223,8 +2227,12 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { if ((fd = open(filename, O_RDONLY)) < 0) return; base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ; - if (base == (void *) MAP_FAILED) + if (base == (void *) MAP_FAILED) { + close(fd); + fprintf(stderr, "mmap failure for file %s\n", filename); + progresult = XMLLINT_ERR_RDFILE; return; + } doc = htmlReadMemory((char *) base, info.st_size, filename, NULL, options); @@ -2339,6 +2347,7 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { return; base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ; if (base == (void *) MAP_FAILED) { + close(fd); fprintf(stderr, "mmap failure for file %s\n", filename); progresult = XMLLINT_ERR_RDFILE; return;