Merge pull request #2775 from ethereum/coverity

Fix some issues found by Coverity
This commit is contained in:
chriseth 2017-08-22 15:39:50 +02:00 committed by GitHub
commit 210b4870a8
6 changed files with 14 additions and 12 deletions

View File

@ -27,6 +27,7 @@
#include <cstdint> #include <cstdint>
#include <algorithm> #include <algorithm>
#include <boost/functional/hash.hpp> #include <boost/functional/hash.hpp>
#include <boost/io/ios_state.hpp>
#include "CommonData.h" #include "CommonData.h"
namespace dev namespace dev
@ -224,6 +225,7 @@ template<> inline size_t FixedHash<32>::hash::operator()(FixedHash<32> const& va
template <unsigned N> template <unsigned N>
inline std::ostream& operator<<(std::ostream& _out, FixedHash<N> const& _h) inline std::ostream& operator<<(std::ostream& _out, FixedHash<N> const& _h)
{ {
boost::io::ios_all_saver guard(_out);
_out << std::noshowbase << std::hex << std::setfill('0'); _out << std::noshowbase << std::hex << std::setfill('0');
for (unsigned i = 0; i < N; ++i) for (unsigned i = 0; i < N; ++i)
_out << std::setw(2) << (int)_h[i]; _out << std::setw(2) << (int)_h[i];

View File

@ -219,10 +219,10 @@ ostream& dev::eth::operator<<(ostream& _out, AssemblyItem const& _item)
_out << "\t" << _item.getJumpTypeAsString(); _out << "\t" << _item.getJumpTypeAsString();
break; break;
case Push: case Push:
_out << " PUSH " << hex << _item.data(); _out << " PUSH " << hex << _item.data() << dec;
break; break;
case PushString: case PushString:
_out << " PushString" << hex << (unsigned)_item.data(); _out << " PushString" << hex << (unsigned)_item.data() << dec;
break; break;
case PushTag: case PushTag:
{ {
@ -237,19 +237,19 @@ ostream& dev::eth::operator<<(ostream& _out, AssemblyItem const& _item)
_out << " Tag " << _item.data(); _out << " Tag " << _item.data();
break; break;
case PushData: case PushData:
_out << " PushData " << hex << (unsigned)_item.data(); _out << " PushData " << hex << (unsigned)_item.data() << dec;
break; break;
case PushSub: case PushSub:
_out << " PushSub " << hex << size_t(_item.data()); _out << " PushSub " << hex << size_t(_item.data()) << dec;
break; break;
case PushSubSize: case PushSubSize:
_out << " PushSubSize " << hex << size_t(_item.data()); _out << " PushSubSize " << hex << size_t(_item.data()) << dec;
break; break;
case PushProgramSize: case PushProgramSize:
_out << " PushProgramSize"; _out << " PushProgramSize";
break; break;
case PushLibraryAddress: case PushLibraryAddress:
_out << " PushLibraryAddress " << hex << h256(_item.data()).abridgedMiddle(); _out << " PushLibraryAddress " << hex << h256(_item.data()).abridgedMiddle() << dec;
break; break;
case UndefinedItem: case UndefinedItem:
_out << " ???"; _out << " ???";

View File

@ -220,6 +220,7 @@ void CSECodeGenerator::addDependencies(Id _c)
if (m_neededBy.count(_c)) if (m_neededBy.count(_c))
return; // we already computed the dependencies for _c return; // we already computed the dependencies for _c
ExpressionClasses::Expression expr = m_expressionClasses.representative(_c); ExpressionClasses::Expression expr = m_expressionClasses.representative(_c);
assertThrow(expr.item, OptimizerException, "");
if (expr.item->type() == UndefinedItem) if (expr.item->type() == UndefinedItem)
BOOST_THROW_EXCEPTION( BOOST_THROW_EXCEPTION(
// If this exception happens, we need to find a different way to generate the // If this exception happens, we need to find a different way to generate the

View File

@ -147,7 +147,7 @@ private:
AssemblyItems m_generatedItems; AssemblyItems m_generatedItems;
/// Current height of the stack relative to the start. /// Current height of the stack relative to the start.
int m_stackHeight; int m_stackHeight = 0;
/// If (b, a) is in m_requests then b is needed to compute a. /// If (b, a) is in m_requests then b is needed to compute a.
std::multimap<Id, Id> m_neededBy; std::multimap<Id, Id> m_neededBy;
/// Current content of the stack. /// Current content of the stack.

View File

@ -188,7 +188,6 @@ vector<pair<FixedHash<4>, FunctionTypePointer>> const& ContractDefinition::inter
{ {
if (!m_interfaceFunctionList) if (!m_interfaceFunctionList)
{ {
set<string> functionsSeen;
set<string> signaturesSeen; set<string> signaturesSeen;
m_interfaceFunctionList.reset(new vector<pair<FixedHash<4>, FunctionTypePointer>>()); m_interfaceFunctionList.reset(new vector<pair<FixedHash<4>, FunctionTypePointer>>());
for (ContractDefinition const* contract: annotation().linearizedBaseContracts) for (ContractDefinition const* contract: annotation().linearizedBaseContracts)

View File

@ -739,18 +739,18 @@ bool RationalNumberType::isImplicitlyConvertibleTo(Type const& _convertTo) const
{ {
if (_convertTo.category() == Category::Integer) if (_convertTo.category() == Category::Integer)
{ {
auto targetType = dynamic_cast<IntegerType const*>(&_convertTo);
if (m_value == rational(0)) if (m_value == rational(0))
return true; return true;
if (isFractional()) if (isFractional())
return false; return false;
int forSignBit = (targetType->isSigned() ? 1 : 0); IntegerType const& targetType = dynamic_cast<IntegerType const&>(_convertTo);
int forSignBit = (targetType.isSigned() ? 1 : 0);
if (m_value > rational(0)) if (m_value > rational(0))
{ {
if (m_value.numerator() <= (u256(-1) >> (256 - targetType->numBits() + forSignBit))) if (m_value.numerator() <= (u256(-1) >> (256 - targetType.numBits() + forSignBit)))
return true; return true;
} }
else if (targetType->isSigned() && -m_value.numerator() <= (u256(1) << (targetType->numBits() - forSignBit))) else if (targetType.isSigned() && -m_value.numerator() <= (u256(1) << (targetType.numBits() - forSignBit)))
return true; return true;
return false; return false;
} }