From 43d294198349061b9df3fa21d538a4cc7360fad1 Mon Sep 17 00:00:00 2001 From: John Darrington Date: Fri, 6 Nov 2015 19:59:13 +0100 Subject: [PATCH] Avoid possible overflow in fn_identity. --- src/data/file-name.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/data/file-name.c b/src/data/file-name.c index dfdfa6d223..f59b2fa4ec 100644 --- a/src/data/file-name.c +++ b/src/data/file-name.c @@ -220,8 +220,8 @@ fn_close (const char *fn, FILE *f) there. */ struct file_identity { - dev_t device; /* Device number. */ - ino_t inode; /* Inode number. */ + unsigned long long device; /* Device number. */ + unsigned long long inode; /* Inode number. */ char *name; /* File name, where needed, otherwise NULL. */ }; @@ -271,7 +271,9 @@ fn_get_identity (const char *file_name) if (ok) { identity->device = fi.dwVolumeSerialNumber; - identity->inode = fi.nFileIndexHigh << 16 | fi.nFileIndexLow; + identity->inode = fi.nFileIndexHigh; + identity->inode <<= (sizeof fi.nFileIndexLow) * CHAR_BIT; + identity->inode |= fi.nFileIndexLow; identity->name = 0; } CloseHandle (h); -- 2.30.2