Skip to content

Commit

Permalink
[Support] Avoid UB in sys::fs::perms::operator~. NFC.
Browse files Browse the repository at this point in the history
This was exposed in r297945 and r301220: the intermediate complement
is a 32-bit value, and casting it to 'perms' invokes UB.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@301373 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
ahmedbougacha committed Apr 26, 2017
1 parent ed89889 commit 3f8d088
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion include/llvm/Support/FileSystem.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,9 @@ inline perms &operator&=(perms &l, perms r) {
return l;
}
inline perms operator~(perms x) {
return static_cast<perms>(~static_cast<unsigned short>(x));
// Avoid UB by explicitly truncating the (unsigned) ~ result.
return static_cast<perms>(
static_cast<unsigned short>(~static_cast<unsigned short>(x)));
}

class UniqueID {
Expand Down

0 comments on commit 3f8d088

Please sign in to comment.