From c5bc802ff021df9f99d15c32dc6ad58bf6b467d6 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Sat, 5 Nov 2016 11:52:53 +0100 Subject: [PATCH] fs.DeviceID(): Return errors when fi is nil --- src/restic/fs/deviceid_unix.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/restic/fs/deviceid_unix.go b/src/restic/fs/deviceid_unix.go index 684c3cc7d..40069d3e5 100644 --- a/src/restic/fs/deviceid_unix.go +++ b/src/restic/fs/deviceid_unix.go @@ -12,10 +12,19 @@ import ( // DeviceID extracts the device ID from an os.FileInfo object by casting it // to syscall.Stat_t func DeviceID(fi os.FileInfo) (deviceID uint64, err error) { + if fi == nil { + return 0, errors.New("unable to determine device: fi is nil") + } + + if fi.Sys() == nil { + return 0, errors.New("unable to determine device: fi.Sys() is nil") + } + if st, ok := fi.Sys().(*syscall.Stat_t); ok { // st.Dev is uint32 on Darwin and uint64 on Linux. Just cast // everything to uint64. return uint64(st.Dev), nil } + return 0, errors.New("Could not cast to syscall.Stat_t") }