From ccef9149afc698fcd2b0cef22a6e4d4c4721df7b Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Sat, 26 Nov 2016 00:56:02 -0500 Subject: [PATCH] Switch from WordCount() to reg.size() for bitops This avoids a potential problem when OR'ing with 0 that results in a WordCount() of 1. Integer's minimum reg[] size is 2 due to RoundupSize(), and there could be implicit assumptions for the minimum that did not surface under testing --- integer.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/integer.cpp b/integer.cpp index 7ca6681b..b24b7795 100644 --- a/integer.cpp +++ b/integer.cpp @@ -3746,18 +3746,18 @@ Integer Integer::And(const Integer& t) const { return AbsoluteValue(); } - else if (WordCount() >= t.WordCount()) + else if (reg.size() >= t.reg.size()) { Integer result(t); - AndWords(result.reg, reg, t.WordCount()); + AndWords(result.reg, reg, t.reg.size()); result.sign = POSITIVE; return result; } - else // WordCount() < t.WordCount() + else // reg.size() < t.reg.size() { Integer result(*this); - AndWords(result.reg, t.reg, WordCount()); + AndWords(result.reg, t.reg, reg.size()); result.sign = POSITIVE; return result; @@ -3772,18 +3772,18 @@ Integer Integer::Or(const Integer& t) const { return AbsoluteValue(); } - else if (WordCount() >= t.WordCount()) + else if (reg.size() >= t.reg.size()) { Integer result(*this); - OrWords(result.reg, t.reg, t.WordCount()); + OrWords(result.reg, t.reg, t.reg.size()); result.sign = POSITIVE; return result; } - else // WordCount() < t.WordCount() + else // reg.size() < t.reg.size() { Integer result(t); - OrWords(result.reg, reg, WordCount()); + OrWords(result.reg, reg, reg.size()); result.sign = POSITIVE; return result; @@ -3798,18 +3798,18 @@ Integer Integer::Xor(const Integer& t) const { return Integer::Zero(); } - else if (WordCount() >= t.WordCount()) + else if (reg.size() >= t.reg.size()) { Integer result(*this); - XorWords(result.reg, t.reg, t.WordCount()); + XorWords(result.reg, t.reg, t.reg.size()); result.sign = POSITIVE; return result; } - else // WordCount() < t.WordCount() + else // reg.size() < t.reg.size() { Integer result(t); - XorWords(result.reg, reg, WordCount()); + XorWords(result.reg, reg, reg.size()); result.sign = POSITIVE; return result;