From: John Darrington Date: Fri, 6 Nov 2015 18:59:13 +0000 (+0100) Subject: Avoid possible overflow in fn_identity. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=43d294198349061b9df3fa21d538a4cc7360fad1;p=pspp Avoid possible overflow in fn_identity. --- 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);