diff options
author | Sendil Kumar <sendilkumarn@live.com> | 2019-08-22 13:17:02 +0200 |
---|---|---|
committer | Sendil Kumar <sendilkumarn@live.com> | 2019-08-22 13:17:02 +0200 |
commit | ea102096803dd12acf5fc592fb5c581e9b9ff51d (patch) | |
tree | dba4e53b9ea454efc8fd4d4ee4b85e7ff9516c0b /src/fcntl.rs | |
parent | 414cc86c0af09fd44454b93b6dc738316b16c43c (diff) | |
download | nix-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.rs | 4 |
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)])) |