diff --git a/ChangeLog.txt b/ChangeLog.txt index 2ef4b67f9..da56f5f3e 100755 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -314,3 +314,6 @@ error handling: Now the number of arguments to mount can be 0 or 4. Additional parameter checking is required to prevent mysterious errors (submiteed by Kate). + * apps/netutils/webserver/httpd_mmap.c: Fix errors when the mmap() + length is zero (submitted by Kate). + diff --git a/netutils/webserver/httpd_mmap.c b/netutils/webserver/httpd_mmap.c index 301168a09..9777df3b3 100644 --- a/netutils/webserver/httpd_mmap.c +++ b/netutils/webserver/httpd_mmap.c @@ -95,6 +95,15 @@ int httpd_mmap_open(const char *name, struct httpd_fs_file *file) return ERROR; } + file->len = (int) st.st_size; + + /* SUS3: "If len is zero, mmap() shall fail and no mapping shall be established." */ + + if (st.st_size == 0) + { + return OK; + } + file->fd = open(path, O_RDONLY); if (file->fd == -1) { @@ -108,13 +117,16 @@ int httpd_mmap_open(const char *name, struct httpd_fs_file *file) return ERROR; } - file->len = (int) st.st_size; - return OK; } int httpd_mmap_close(struct httpd_fs_file *file) { + if (file->len == 0) + { + return OK; + } + #ifdef CONFIG_FS_RAMMAP if (-1 == munmap(file->data, file->len)) {