Skip to content

Commit b47507d

Browse files
committed
Fix CodeQL quality warnings
IB-7628 Signed-off-by: Raul Metsma <raul@metsma.ee>
1 parent 193fa7a commit b47507d

26 files changed

Lines changed: 200 additions & 327 deletions

.github/workflows/build.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@ jobs:
289289
-src/minizip/*
290290
-build/src/xml/*
291291
-**:cpp/poorly-documented-function
292+
-**:cpp/loop-variable-changed
292293
input: sarif-results/cpp.sarif
293294
output: sarif-results/cpp.sarif
294295
- name: Upload results

src/Signature.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -232,9 +232,8 @@ Signature::Validator::Validator(const Signature *s)
232232
{
233233
parseException(e);
234234
}
235-
switch(d->result)
235+
if(d->result == Unknown)
236236
{
237-
case Unknown:
238237
try
239238
{
240239
s->validate(POLv1);
@@ -244,9 +243,6 @@ Signature::Validator::Validator(const Signature *s)
244243
{
245244
parseException(e);
246245
}
247-
break;
248-
default:
249-
break;
250246
}
251247
}
252248

src/SignatureTST.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ X509Cert SignatureTST::TimeStampCertificate() const
5353

5454
string SignatureTST::TimeStampTime() const
5555
{
56-
return util::date::ASN1TimeToXSD(timestampToken->time());
56+
return util::date::to_string(timestampToken->time());
5757
}
5858

5959
string SignatureTST::trustedSigningTime() const
@@ -86,7 +86,7 @@ void SignatureTST::validate() const
8686
{
8787
Exception exception(EXCEPTION_PARAMS("Timestamp validation."));
8888

89-
if (timestampToken->time().empty())
89+
if(!timestampToken)
9090
{
9191
EXCEPTION_ADD(exception, "Failed to parse timestamp token.");
9292
throw exception;

src/SignatureXAdES_B.cpp

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,6 @@ DIGIDOCPP_WARNING_POP
5454
#define HAVE_WORKING_REGEX
5555
#endif
5656

57-
#if XSEC_VERSION_MAJOR < 2
58-
#define XSEC_CONST
59-
#else
60-
#define XSEC_CONST const
61-
#endif
62-
6357
using namespace digidoc;
6458
using namespace digidoc::asic;
6559
using namespace digidoc::dsig;
@@ -219,7 +213,7 @@ SignatureXAdES_B::SignatureXAdES_B(unsigned int id, ASiContainer *bdoc, Signer *
219213
}
220214
signature->signedInfo().signatureMethod(make_unique<SignatureMethodType>(X509Crypto(c).isRSAKey() ?
221215
Digest::toRsaUri(signer->method()) : Digest::toEcUri(signer->method()) ));
222-
setSigningTime(date::gmtime(time(nullptr)));
216+
setSigningTime(time(nullptr));
223217

224218
string digestMethod = Conf::instance()->digestUri();
225219
for(const DataFile *f: bdoc->dataFiles())
@@ -529,7 +523,7 @@ void SignatureXAdES_B::validate(const string &policy) const
529523
s << e;
530524
EXCEPTION_ADD(exception, "Failed to validate signature: %s", s.str().c_str());
531525
}
532-
catch(XSEC_CONST XSECException &e)
526+
catch(const XSECException &e)
533527
{
534528
string s = xml::transcode<char>(e.getMsg());
535529
EXCEPTION_ADD(exception, "Failed to validate signature: %s", s.c_str());
@@ -934,7 +928,7 @@ void SignatureXAdES_B::setSignerRolesV2(const vector<string> &roles)
934928
*
935929
* @param signingTime signing time.
936930
*/
937-
void SignatureXAdES_B::setSigningTime(const struct tm &signingTime)
931+
void SignatureXAdES_B::setSigningTime(time_t signingTime)
938932
{
939933
getSignedSignatureProperties().signingTime(date::makeDateTime(signingTime));
940934
}
@@ -1156,7 +1150,7 @@ vector<string> SignatureXAdES_B::signerRoles() const
11561150
string SignatureXAdES_B::claimedSigningTime() const
11571151
{
11581152
if(const auto &signingTime = getSignedSignatureProperties().signingTime())
1159-
return date::xsd2string(signingTime.get());
1153+
return date::to_string(signingTime.get());
11601154
return {};
11611155
}
11621156

src/SignatureXAdES_B.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ namespace digidoc
109109
inline auto signerRoles(const std::vector<std::string> &signerRoles);
110110
void setSignerRoles(const std::vector<std::string>& signerRoles);
111111
void setSignerRolesV2(const std::vector<std::string>& signerRoles);
112-
void setSigningTime(const struct tm &signingTime);
112+
void setSigningTime(time_t signingTime);
113113

114114
// offline checks
115115
void checkSignatureValue() const;

src/SignatureXAdES_LT.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "Conf.h"
2424
#include "crypto/Digest.h"
2525
#include "crypto/OCSP.h"
26+
#include "crypto/TS.h"
2627
#include "crypto/X509Cert.h"
2728
#include "crypto/X509CertStore.h"
2829
#include "util/DateTime.h"
@@ -86,7 +87,7 @@ X509Cert SignatureXAdES_LT::OCSPCertificate() const
8687
*/
8788
string SignatureXAdES_LT::OCSPProducedAt() const
8889
{
89-
return util::date::ASN1TimeToXSD(getOCSPResponseValue().producedAt());
90+
return util::date::to_string(getOCSPResponseValue().producedAt());
9091
}
9192

9293
string SignatureXAdES_LT::trustedSigningTime() const
@@ -167,24 +168,26 @@ void SignatureXAdES_LT::validate(const std::string &policy) const
167168
}
168169
else
169170
{
170-
struct tm producedAt = util::date::ASN1TimeToTM(ocsp.producedAt());
171+
tm producedAt = ocsp.producedAt();
172+
string producedAt_s = util::date::to_string(producedAt);
171173
time_t producedAt_t = util::date::mkgmtime(producedAt);
172-
time_t timeT = util::date::string2time_t(TimeStampTime());
173-
if(timeT > producedAt_t)
174+
tm timeStampTime = TimeStamp().time();
175+
time_t timeStampTime_t = util::date::mkgmtime(timeStampTime);
176+
if(timeStampTime_t > producedAt_t)
174177
{
175178
/*
176179
* ETSI TS 103 171 V2.1.1 (2012-03)
177180
* 8 Requirements for LT-Level Conformance
178181
* This clause defines those requirements that XAdES signatures conformant to T-Level, have to fulfil to also be
179182
* conformant to LT-Level.
180183
*/
181-
Exception e(EXCEPTION_PARAMS("TimeStamp time is greater than OCSP producedAt TS: %s OCSP: %s", TimeStampTime().c_str(), ocsp.producedAt().c_str()));
184+
Exception e(EXCEPTION_PARAMS("TimeStamp time is greater than OCSP producedAt TS: %s OCSP: %s", TimeStampTime().c_str(), producedAt_s.c_str()));
182185
e.setCode(Exception::OCSPBeforeTimeStamp);
183186
exception.addCause(e);
184187
}
185-
if((producedAt_t - timeT > 15 * 60) && !Exception::hasWarningIgnore(Exception::ProducedATLateWarning))
188+
if((producedAt_t - timeStampTime_t > 15 * 60) && !Exception::hasWarningIgnore(Exception::ProducedATLateWarning))
186189
{
187-
Exception e(EXCEPTION_PARAMS("TimeStamp time and OCSP producedAt are over 15m off TS: %s OCSP: %s", TimeStampTime().c_str(), ocsp.producedAt().c_str()));
190+
Exception e(EXCEPTION_PARAMS("TimeStamp time and OCSP producedAt are over 15m off TS: %s OCSP: %s", TimeStampTime().c_str(), producedAt_s.c_str()));
188191
e.setCode(Exception::ProducedATLateWarning);
189192
exception.addCause(e);
190193
}
@@ -267,7 +270,7 @@ void SignatureXAdES_LT::addCertificateValue(const string& certId, const X509Cert
267270

268271
void SignatureXAdES_LT::addOCSPValue(const string &id, const OCSP &ocsp)
269272
{
270-
DEBUG("SignatureXAdES_LT::addOCSPValue(%s, %s)", id.c_str(), ocsp.producedAt().c_str());
273+
DEBUG("SignatureXAdES_LT::addOCSPValue(%s, %s)", id.c_str(), util::date::to_string(ocsp.producedAt()).c_str());
271274

272275
createUnsignedSignatureProperties();
273276

src/SignatureXAdES_LTA.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,6 @@ DIGIDOCPP_WARNING_DISABLE_MSVC(4005)
4141
#include <xsec/utils/XSECBinTXFMInputStream.hpp>
4242
DIGIDOCPP_WARNING_POP
4343

44-
#if XSEC_VERSION_MAJOR < 2
45-
#define XSEC_CONST
46-
#else
47-
#define XSEC_CONST const
48-
#endif
49-
5044
using namespace digidoc;
5145
using namespace digidoc::dsig;
5246
using namespace digidoc::util;
@@ -96,7 +90,7 @@ void SignatureXAdES_LTA::calcArchiveDigest(Digest *digest,
9690
catch(const xsd::cxx::xml::invalid_utf16_string & /* ex */) {
9791
THROW("Failed to calculate digest");
9892
}
99-
catch(XSEC_CONST XSECException &e)
93+
catch(const XSECException &e)
10094
{
10195
try {
10296
string result = xsd::cxx::xml::transcode<char>(e.getMsg());
@@ -200,7 +194,7 @@ X509Cert SignatureXAdES_LTA::ArchiveTimeStampCertificate() const
200194

201195
string SignatureXAdES_LTA::ArchiveTimeStampTime() const
202196
{
203-
return date::ASN1TimeToXSD(tsaFromBase64().time());
197+
return date::to_string(tsaFromBase64().time());
204198
}
205199

206200
void SignatureXAdES_LTA::validate(const string &policy) const

src/SignatureXAdES_T.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,17 @@ void SignatureXAdES_T::createUnsignedSignatureProperties()
5050

5151
vector<unsigned char> SignatureXAdES_T::messageImprint() const
5252
{
53-
return tsFromBase64().messageImprint();
53+
return TimeStamp().messageImprint();
5454
}
5555

5656
X509Cert SignatureXAdES_T::TimeStampCertificate() const
5757
{
58-
return tsFromBase64().cert();
58+
return TimeStamp().cert();
5959
}
6060

6161
string SignatureXAdES_T::TimeStampTime() const
6262
{
63-
return util::date::ASN1TimeToXSD(tsFromBase64().time());
63+
return util::date::to_string(TimeStamp().time());
6464
}
6565

6666
string SignatureXAdES_T::trustedSigningTime() const
@@ -95,7 +95,7 @@ void SignatureXAdES_T::extendSignatureProfile(const std::string &profile)
9595
sigdata_.clear();
9696
}
9797

98-
TS SignatureXAdES_T::tsFromBase64() const
98+
TS SignatureXAdES_T::TimeStamp() const
9999
{
100100
try {
101101
if(unsignedSignatureProperties().signatureTimeStamp().empty())
@@ -143,7 +143,8 @@ void SignatureXAdES_T::validate(const std::string &policy) const
143143
calcDigestOnNode(digest, URI_ID_DSIG, u"SignatureValue", canonicalizationMethod);
144144
});
145145

146-
time_t validateTime = util::date::ASN1TimeToTime_t(tsa.time());
146+
tm tm = tsa.time();
147+
time_t validateTime = util::date::mkgmtime(tm);
147148
if(!signingCertificate().isValid(&validateTime))
148149
THROW("Signing certificate was not valid on signing time");
149150

src/SignatureXAdES_T.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,15 +45,13 @@ class SignatureXAdES_T: public SignatureXAdES_B
4545
protected:
4646
void createUnsignedSignatureProperties();
4747
xades::UnsignedSignaturePropertiesType& unsignedSignatureProperties() const;
48+
TS TimeStamp() const;
4849

4950
TS verifyTS(const xades::XAdESTimeStampType &timestamp, Exception &exception,
5051
std::function<void (Digest *, std::string_view)> &&calcDigest) const;
5152

5253
private:
5354
DISABLE_COPY(SignatureXAdES_T);
54-
55-
TS tsFromBase64() const;
56-
5755
};
5856

5957
}

src/crypto/OCSP.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ OCSP::OCSP(const X509Cert &cert, const X509Cert &issuer, const vector<unsigned c
113113
if(OCSP_resp_find_status(basic.get(), certId, nullptr, nullptr, nullptr, &thisUpdate, &nextUpdate) != 1)
114114
THROW("Failed to find CERT_ID from OCSP response.");
115115

116-
DEBUG("OCSP producedAt: %s", producedAt().c_str());
116+
DEBUG("OCSP producedAt: %s", util::date::to_string(producedAt()).c_str());
117117
if(!OCSP_check_validity(thisUpdate, nextUpdate, 15*60, 2*60))
118118
{
119119
Exception e(EXCEPTION_PARAMS("OCSP response not in valid time slot."));
@@ -272,7 +272,8 @@ void OCSP::verifyResponse(const X509Cert &cert) const
272272
if(!resp)
273273
THROW("Failed to verify OCSP response.");
274274

275-
time_t t = util::date::ASN1TimeToTime_t(producedAt());
275+
tm tm = producedAt();
276+
time_t t = util::date::mkgmtime(tm);
276277
SCOPE(X509_STORE, store, X509CertStore::createStore(X509CertStore::OCSP, &t));
277278
STACK_OF(X509) *stack = sk_X509_new_null();
278279
for(const X509Cert &i: X509CertStore::instance()->certs(X509CertStore::OCSP))
@@ -364,12 +365,11 @@ vector<unsigned char> OCSP::nonce() const
364365
return nonce;
365366
}
366367

367-
string OCSP::producedAt() const
368+
tm OCSP::producedAt() const
368369
{
369370
if(!basic)
370371
return {};
371-
const ASN1_GENERALIZEDTIME *time = OCSP_resp_get0_produced_at(basic.get());
372-
if(!time)
373-
return {};
374-
return { time->data, time->data + time->length };
372+
tm tm {};
373+
ASN1_TIME_to_tm(OCSP_resp_get0_produced_at(basic.get()), &tm);
374+
return tm;
375375
}

0 commit comments

Comments
 (0)