about summary refs log tree commit diff
path: root/src/libcore/num
diff options
context:
space:
mode:
authorDaiki Mizukami <mizukami1113@gmail.com>2018-04-24 01:45:44 +0900
committerDaiki Mizukami <mizukami1113@gmail.com>2018-04-24 01:53:40 +0900
commitfbb1c280bf5f3d4fc68f323860ade8fa48d96979 (patch)
treeb32de9c3c7b2d72aa452e62330877c3c410b1c42 /src/libcore/num
parent1fac3ca9c4e4ba3d27a9ffb29b78f7656d15e160 (diff)
downloadrust-fbb1c280bf5f3d4fc68f323860ade8fa48d96979.tar.gz
rust-fbb1c280bf5f3d4fc68f323860ade8fa48d96979.zip
core: Fix overflow in `int::mod_euc` when `self < 0 && rhs == MIN`
Diffstat (limited to 'src/libcore/num')
-rw-r--r--src/libcore/num/mod.rs6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/libcore/num/mod.rs b/src/libcore/num/mod.rs
index aa4d4bc638b..4893e05badc 100644
--- a/src/libcore/num/mod.rs
+++ b/src/libcore/num/mod.rs
@@ -1765,7 +1765,11 @@ assert_eq!((-a).mod_euc(-b), 1);
             pub fn mod_euc(self, rhs: Self) -> Self {
                 let r = self % rhs;
                 if r < 0 {
-                    r + rhs.abs()
+                    if rhs.is_negative() {
+                        r - rhs
+                    } else {
+                        r + rhs
+                    }
                 } else {
                     r
                 }