summaryrefslogtreecommitdiff
path: root/src/fcntl.rs
diff options
context:
space:
mode:
authorSendil Kumar <sendilkumarn@live.com>2019-08-22 13:17:02 +0200
committerSendil Kumar <sendilkumarn@live.com>2019-08-22 13:17:02 +0200
commitea102096803dd12acf5fc592fb5c581e9b9ff51d (patch)
treedba4e53b9ea454efc8fd4d4ee4b85e7ff9516c0b /src/fcntl.rs
parent414cc86c0af09fd44454b93b6dc738316b16c43c (diff)
downloadnix-ea102096803dd12acf5fc592fb5c581e9b9ff51d.zip
fix readlink/readlinkat to return too long only when it is long
Diffstat (limited to 'src/fcntl.rs')
-rw-r--r--src/fcntl.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/fcntl.rs b/src/fcntl.rs
index be6ee0f7..f590e361 100644
--- a/src/fcntl.rs
+++ b/src/fcntl.rs
@@ -181,7 +181,9 @@ fn wrap_readlink_result(buffer: &mut[u8], res: ssize_t) -> Result<&OsStr> {
match Errno::result(res) {
Err(err) => Err(err),
Ok(len) => {
- if (len as usize) >= buffer.len() {
+ if len < 0 {
+ Err(Error::Sys(Errno::EINVAL))
+ } else if (len as usize) > buffer.len() {
Err(Error::Sys(Errno::ENAMETOOLONG))
} else {
Ok(OsStr::from_bytes(&buffer[..(len as usize)]))