From 640cf0c71ee9ea5e8e7d419b243c1696ed61bb71 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 5 Oct 2018 19:03:08 +0200 Subject: [PATCH] Fix leaks in tests As discovered by AddressSanitizer --- test/csync/vio_tests/check_vio_ext.cpp | 5 ++++- test/testchunkingng.cpp | 12 ++++++------ test/testsyncengine.cpp | 4 ++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/test/csync/vio_tests/check_vio_ext.cpp b/test/csync/vio_tests/check_vio_ext.cpp index 85a31215e..5d07ed20a 100644 --- a/test/csync/vio_tests/check_vio_ext.cpp +++ b/test/csync/vio_tests/check_vio_ext.cpp @@ -125,7 +125,8 @@ static int teardown(void **state) { rc = wipe_testdir(); assert_int_equal(rc, 0); - *state = nullptr; + SAFE_FREE(((statevar*)*state)->result); + SAFE_FREE(*state); return 0; } @@ -409,6 +410,8 @@ static void check_readdir_longtree(void **state) assert_int_equal(files_cnt, 0); /* and compare. */ assert_string_equal( sv->result, result); + + SAFE_FREE(result); } // https://github.com/owncloud/client/issues/3128 https://github.com/owncloud/client/issues/2777 diff --git a/test/testchunkingng.cpp b/test/testchunkingng.cpp index 8efd39b39..0a282bfe2 100644 --- a/test/testchunkingng.cpp +++ b/test/testchunkingng.cpp @@ -248,15 +248,15 @@ private slots: setChunkSize(fakeFolder.syncEngine(), 1 * 1000 * 1000); // Make the MOVE never reply, but trigger a client-abort and apply the change remotely - auto parent = new QObject; + QObject parent; QByteArray moveChecksumHeader; int nGET = 0; int responseDelay = 100000; // bigger than abort-wait timeout fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *) -> QNetworkReply * { if (request.attribute(QNetworkRequest::CustomVerbAttribute) == "MOVE") { - QTimer::singleShot(50, parent, [&]() { fakeFolder.syncEngine().abort(); }); + QTimer::singleShot(50, &parent, [&]() { fakeFolder.syncEngine().abort(); }); moveChecksumHeader = request.rawHeader("OC-Checksum"); - return new DelayedReply(responseDelay, fakeFolder.uploadState(), fakeFolder.remoteModifier(), op, request, parent); + return new DelayedReply(responseDelay, fakeFolder.uploadState(), fakeFolder.remoteModifier(), op, request, &parent); } else if (op == QNetworkAccessManager::GetOperation) { nGET++; } @@ -332,12 +332,12 @@ private slots: setChunkSize(fakeFolder.syncEngine(), 1 * 1000 * 1000); // Make the MOVE never reply, but trigger a client-abort and apply the change remotely - auto parent = new QObject; + QObject parent; int responseDelay = 200; // smaller than abort-wait timeout fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *) -> QNetworkReply * { if (request.attribute(QNetworkRequest::CustomVerbAttribute) == "MOVE") { - QTimer::singleShot(50, parent, [&]() { fakeFolder.syncEngine().abort(); }); - return new DelayedReply(responseDelay, fakeFolder.uploadState(), fakeFolder.remoteModifier(), op, request, parent); + QTimer::singleShot(50, &parent, [&]() { fakeFolder.syncEngine().abort(); }); + return new DelayedReply(responseDelay, fakeFolder.uploadState(), fakeFolder.remoteModifier(), op, request, &parent); } return nullptr; }); diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp index 64b49fb5c..3f6f5ba8c 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -439,13 +439,13 @@ private slots: // Produce an error based on upload size int remoteQuota = 1000; int n507 = 0, nPUT = 0; - auto parent = new QObject; + QObject parent; fakeFolder.setServerOverride([&](QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice *) -> QNetworkReply * { if (op == QNetworkAccessManager::PutOperation) { nPUT++; if (request.rawHeader("OC-Total-Length").toInt() > remoteQuota) { n507++; - return new FakeErrorReply(op, request, parent, 507); + return new FakeErrorReply(op, request, &parent, 507); } } return nullptr;