Skip to content

Commit c6fb78a

Browse files
Fix NUL-byte truncation bug in Tf::strcmp
1 parent 77c2255 commit c6fb78a

6 files changed

Lines changed: 10 additions & 38 deletions

File tree

src/tactioncontroller.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ bool TActionController::verifyRequest(const THttpRequest &request) const
269269
}
270270

271271
tSystemDebug("postAuthToken: {}", (const char*)postAuthToken.data());
272-
bool res = Tf::strcmp(postAuthToken, authenticityToken());
272+
bool res = (postAuthToken == authenticityToken());
273273
if (res) {
274274
tSystemDebug("Verified authenticity token : {}", request.header().path().data());
275275
}

src/test/cmp/cmp.cpp

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ private slots:
4949
void benchStrcmp2();
5050
void benchComparison1();
5151
void benchComparison2();
52-
void benchTfcmp1();
53-
void benchTfcmp2();
5452
void benchQStringCmp1();
5553
void benchQStringCmp2();
5654
};
@@ -128,26 +126,6 @@ void TestCmp::benchComparison2()
128126
Q_UNUSED(b);
129127
}
130128

131-
void TestCmp::benchTfcmp1()
132-
{
133-
bool b = false;
134-
QBENCHMARK {
135-
b |= Tf::strcmp(str1, str2);
136-
b |= Tf::strcmp(str2, str1);
137-
}
138-
Q_UNUSED(b);
139-
}
140-
141-
void TestCmp::benchTfcmp2()
142-
{
143-
bool b = false;
144-
QBENCHMARK {
145-
b |= Tf::strcmp(str1, str3);
146-
b |= Tf::strcmp(str3, str1);
147-
}
148-
Q_UNUSED(b);
149-
}
150-
151129
void TestCmp::benchQStringCmp1()
152130
{
153131
bool b = false;

src/tglobal.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -334,19 +334,13 @@ inline const TAbstractController *constCurrentController() { return currentContr
334334
T_CORE_EXPORT TDatabaseContext *currentDatabaseContext();
335335
T_CORE_EXPORT TSqlDatabase &currentSqlDatabase(int id) noexcept;
336336
T_CORE_EXPORT QMap<QByteArray, std::function<QObject *()>> *objectFactories() noexcept;
337-
//T_CORE_EXPORT std::map<QByteArray, std::function<QObject *()>> *objectFactories() noexcept;
338337

339338
// LZ4 lossless compression algorithm
340339
T_CORE_EXPORT QByteArray lz4Compress(const char *data, int nbytes, int compressionLevel = 1) noexcept;
341340
T_CORE_EXPORT QByteArray lz4Compress(const QByteArray &data, int compressionLevel = 1) noexcept;
342341
T_CORE_EXPORT QByteArray lz4Uncompress(const char *data, int nbytes) noexcept;
343342
T_CORE_EXPORT QByteArray lz4Uncompress(const QByteArray &data) noexcept;
344343

345-
inline bool strcmp(const QByteArray &str1, const QByteArray &str2)
346-
{
347-
return str1.length() == str2.length() && !std::strncmp(str1.data(), str2.data(), str1.length());
348-
}
349-
350344
// Scope-Exit Function Class
351345
template<typename Func>
352346
class ScopeExitFunction {

src/tsessioncookiestore.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ TSession TSessionCookieStore::find(const QByteArray &id)
8080
QByteArray ba = QByteArray::fromBase64(data);
8181
QByteArray digest = QMessageAuthenticationCode::hash(ba, sessionSecret(), QCryptographicHash::Sha3_256);
8282

83-
if (!Tf::strcmp(digest, QByteArray::fromBase64(dgstr))) {
83+
if (digest != QByteArray::fromBase64(dgstr)) {
8484
tSystemWarn("Recieved a tampered cookie or that of other web application.");
8585
//throw SecurityException("Tampered with cookie", __FILE__, __LINE__);
8686
return session;

src/tsqlobject.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,9 @@ bool TSqlObject::create()
133133
const char *propName = metaObject()->property(i).name();
134134
QByteArray prop = QByteArray(propName).toLower();
135135

136-
if (Tf::strcmp(prop, CreatedAt) || Tf::strcmp(prop, UpdatedAt) || Tf::strcmp(prop, ModifiedAt)) {
136+
if (prop == CreatedAt || prop == UpdatedAt || prop == ModifiedAt) {
137137
setProperty(propName, QDateTime::currentDateTime());
138-
} else if (Tf::strcmp(prop, LockRevision)) {
138+
} else if (prop == LockRevision) {
139139
// Sets the default value of 'revision' property
140140
setProperty(propName, 1); // 1 : default value
141141
} else {
@@ -233,11 +233,11 @@ bool TSqlObject::update()
233233
const char *propName = metaObject()->property(i).name();
234234
QByteArray prop = QByteArray(propName).toLower();
235235

236-
if (!updflag && (Tf::strcmp(prop, UpdatedAt) || Tf::strcmp(prop, ModifiedAt))) {
236+
if (!updflag && (prop == UpdatedAt || prop == ModifiedAt)) {
237237
setProperty(propName, QDateTime::currentDateTime());
238238
updflag = true;
239239

240-
} else if (revIndex < 0 && Tf::strcmp(prop, LockRevision)) {
240+
} else if (revIndex < 0 && prop == LockRevision) {
241241
bool ok;
242242
int oldRevision = property(propName).toInt(&ok);
243243

@@ -337,9 +337,9 @@ bool TSqlObject::save()
337337
const char *propName = metaObject()->property(i).name();
338338
QByteArray prop = QByteArray(propName).toLower();
339339

340-
if (Tf::strcmp(prop, CreatedAt) || Tf::strcmp(prop, UpdatedAt) || Tf::strcmp(prop, ModifiedAt)) {
340+
if (prop == CreatedAt || prop == UpdatedAt || prop == ModifiedAt) {
341341
setProperty(propName, QDateTime::currentDateTime());
342-
} else if (Tf::strcmp(prop, LockRevision)) {
342+
} else if (prop == LockRevision) {
343343
// Sets the default value of 'revision' property
344344
setProperty(propName, 1); // 1 : default value
345345
lockrev = LockRevision;
@@ -418,7 +418,7 @@ bool TSqlObject::remove()
418418
const char *propName = metaObject()->property(i).name();
419419
QByteArray prop = QByteArray(propName).toLower();
420420

421-
if (Tf::strcmp(prop, LockRevision)) {
421+
if (prop == LockRevision) {
422422
bool ok;
423423
int revision = property(propName).toInt(&ok);
424424

src/tsqlormapper.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,7 @@ int TSqlORMapper<T>::updateAll(const TCriteria &cri, const QMap<int, QVariant> &
583583
for (int i = obj.metaObject()->propertyOffset(); i < obj.metaObject()->propertyCount(); ++i) {
584584
const char *propName = obj.metaObject()->property(i).name();
585585
QByteArray prop = QByteArray(propName).toLower();
586-
if (Tf::strcmp(prop, UpdatedAt) || Tf::strcmp(prop, ModifiedAt)) {
586+
if (prop == UpdatedAt || prop == ModifiedAt) {
587587
upd += TSqlQuery::escapeIdentifier(QLatin1String(propName), QSqlDriver::FieldName, db.driver());
588588
upd += QLatin1Char('=');
589589
upd += TSqlQuery::formatValue(QDateTime::currentDateTime(), datetimeMetaType, db);

0 commit comments

Comments
 (0)