From afe391571bbefbb53e150f2dd39d13bfb3501fdd Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Thu, 29 Sep 2016 14:31:54 -0400 Subject: [PATCH] Make Singleton static with function scope (Issue 310) This may not fix the issue. Drilling into the issue from the web-based dashboard, Coverity is targeting: 1. noescape: CryptoPP::Integer::operator =(CryptoPP::Integer const &) does not free or save its parameter t. 3049 Integer& Integer::operator=(const Integer& t) 3050 { 3051 if (this != &t) 3052 { 3053 if (reg.size() != t.reg.size() || t.reg[t.reg.size()/2] == 0) 3054 reg.New(RoundupSize(t.WordCount())); 3055 CopyWords(reg, t.reg, reg.size()); 3056 sign = t.sign; 3057 } 3058 return *this; 3059 } --- TestScripts/coverity-linux.txt | 2 +- integer.cpp | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/TestScripts/coverity-linux.txt b/TestScripts/coverity-linux.txt index df373ee1..b6805af6 100644 --- a/TestScripts/coverity-linux.txt +++ b/TestScripts/coverity-linux.txt @@ -20,7 +20,7 @@ CXXFLAGS="-DNDEBUG -g2 -O3 -march=i686 -msse -msse2 -msse3 -mssse3 -mno-aes" cov tar czvf cryptopp.tgz cov-int -set CRYPTOPP_COVERITY_TOKEN=XXXXXXXXXXXXXXXX +CRYPTOPP_COVERITY_TOKEN=XXXXXXXXXXXXXXXX COVERITY_SCAN_NAME="Rijndael-AliasedTable-SSE2-Linux-i686" curl diff --git a/integer.cpp b/integer.cpp index 25ba6ada..949d6890 100644 --- a/integer.cpp +++ b/integer.cpp @@ -3013,17 +3013,20 @@ struct NewInteger const Integer &Integer::Zero() { - return Singleton().Ref(); + static const Integer& s_zero = Singleton().Ref(); + return s_zero; } const Integer &Integer::One() { - return Singleton >().Ref(); + static const Integer& s_one = Singleton >().Ref(); + return s_one; } const Integer &Integer::Two() { - return Singleton >().Ref(); + static const Integer& s_two = Singleton >().Ref(); + return s_two; } bool Integer::operator!() const