diff options
author | Daniel Veillard <veillard@redhat.com> | 2013-07-12 12:08:40 +0800 |
---|---|---|
committer | Daniel Veillard <veillard@redhat.com> | 2013-07-12 12:08:40 +0800 |
commit | b98c6a0ac6fc5ddd184498e34bf9deaecb0aa715 (patch) | |
tree | a7d0f9011adb92f30fc541cc9ae8671f27cf57b8 | |
parent | 6dd7775f3506741093890d99f09c242e0b34b55f (diff) | |
download | android_external_libxml2-b98c6a0ac6fc5ddd184498e34bf9deaecb0aa715.tar.gz android_external_libxml2-b98c6a0ac6fc5ddd184498e34bf9deaecb0aa715.tar.bz2 android_external_libxml2-b98c6a0ac6fc5ddd184498e34bf9deaecb0aa715.zip |
Fix handling of mmap errors
https://bugzilla.gnome.org/show_bug.cgi?id=702320
as raised by Gaurav <ya1gaurav@gmail.com>
-rw-r--r-- | xmllint.c | 13 |
1 files changed, 11 insertions, 2 deletions
@@ -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; |