diff options
author | Eric Blake <eblake@redhat.com> | 2013-11-23 13:51:53 +0000 |
---|---|---|
committer | Eric Blake <eblake@redhat.com> | 2013-11-23 13:51:53 +0000 |
commit | 3a4ce7315fb87d51ef8dd46b9064ee766d5dda62 (patch) | |
tree | 16e1609476fff1599fa6e3ab95dc502d5ed97091 /winsup/cygwin/syscalls.cc | |
parent | 7a5be33eb53b8bcde6102bf6b939fbbd26eb518a (diff) | |
download | cygnal-3a4ce7315fb87d51ef8dd46b9064ee766d5dda62.tar.gz cygnal-3a4ce7315fb87d51ef8dd46b9064ee766d5dda62.tar.bz2 cygnal-3a4ce7315fb87d51ef8dd46b9064ee766d5dda62.zip |
dup2: fix off-by-one crash
* dtable.cc (dup3): Fix off-by-one.
(find_unused_handle): Reduce time spent expanding during dup.
* syscalls.cc (setdtablesize): Report error on invalid value.
Diffstat (limited to 'winsup/cygwin/syscalls.cc')
-rw-r--r-- | winsup/cygwin/syscalls.cc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index e1886e617..e686e33fc 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -2578,6 +2578,12 @@ system (const char *cmdstring) extern "C" int setdtablesize (int size) { + if (size < 0) + { + set_errno (EINVAL); + return -1; + } + if (size <= (int)cygheap->fdtab.size || cygheap->fdtab.extend (size - cygheap->fdtab.size)) return 0; |