about summary refs log tree commit diff
path: root/src/libstd/sys
diff options
context:
space:
mode:
authorMarcin Mielniczuk <marmistrz.dev@zoho.eu>2019-08-06 19:34:10 +0200
committerMarcin Mielniczuk <marmistrz.dev@zoho.eu>2019-08-06 19:35:54 +0200
commit3cd9f3f6ab7d906e23d0ddc4bb0604b09966961f (patch)
tree65afc1cb899c874fc4064b71cc2fab3720eb0c4b /src/libstd/sys
parent188ab5c976a5696ac710b7ba78849ef5dcf0235a (diff)
downloadrust-3cd9f3f6ab7d906e23d0ddc4bb0604b09966961f.tar.gz
rust-3cd9f3f6ab7d906e23d0ddc4bb0604b09966961f.zip
Add an overflow check in truncate implementation for Unix.
Diffstat (limited to 'src/libstd/sys')
-rw-r--r--src/libstd/sys/unix/fs.rs12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/libstd/sys/unix/fs.rs b/src/libstd/sys/unix/fs.rs
index cc1f0790d43..48e449d9c37 100644
--- a/src/libstd/sys/unix/fs.rs
+++ b/src/libstd/sys/unix/fs.rs
@@ -1,5 +1,6 @@
 use crate::os::unix::prelude::*;
 
+use crate::convert::TryInto;
 use crate::ffi::{CString, CStr, OsString, OsStr};
 use crate::fmt;
 use crate::io::{self, Error, ErrorKind, SeekFrom, IoSlice, IoSliceMut};
@@ -554,9 +555,14 @@ impl File {
         return crate::sys::android::ftruncate64(self.0.raw(), size);
 
         #[cfg(not(target_os = "android"))]
-        return cvt_r(|| unsafe {
-            ftruncate64(self.0.raw(), size as off64_t)
-        }).map(|_| ());
+        {
+            let size: off64_t = size
+                .try_into()
+                .map_err(|e| io::Error::new(io::ErrorKind::InvalidInput, e))?;
+            cvt_r(|| unsafe {
+                ftruncate64(self.0.raw(), size)
+            }).map(|_| ())
+        }
     }
 
     pub fn read(&self, buf: &mut [u8]) -> io::Result<usize> {