From f32a999b4eba5692c2ff6b6f280f10d7d84a94f8 Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Thu, 24 Jul 2014 15:38:36 +0200 Subject: [PATCH 01/11] Remove unused variable --- cockatrice/src/main.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/cockatrice/src/main.cpp b/cockatrice/src/main.cpp index b7e2c0ea..df38bbf6 100644 --- a/cockatrice/src/main.cpp +++ b/cockatrice/src/main.cpp @@ -136,7 +136,6 @@ int main(int argc, char *argv[]) qsrand(QDateTime::currentDateTime().toTime_t()); - bool startMainProgram = true; #if QT_VERSION < 0x050000 const QString dataDir = QDesktopServices::storageLocation(QDesktopServices::DataLocation); #else From 036980eb44ce0351a31cb2bbe91f42632dc265ec Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Thu, 24 Jul 2014 17:37:54 +0200 Subject: [PATCH 02/11] ISO C++ forbids variable length array --- servatrice/src/passwordhasher.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/servatrice/src/passwordhasher.cpp b/servatrice/src/passwordhasher.cpp index 785034b4..0d8cda36 100644 --- a/servatrice/src/passwordhasher.cpp +++ b/servatrice/src/passwordhasher.cpp @@ -18,12 +18,15 @@ QString PasswordHasher::computeHash(const QString &password, const QString &salt QByteArray passwordBuffer = (salt + password).toUtf8(); int hashLen = gcry_md_get_algo_dlen(algo); - char hash[hashLen], tmp[hashLen]; + char *hash = new char[hashLen], *tmp = new char[hashLen]; gcry_md_hash_buffer(algo, hash, passwordBuffer.data(), passwordBuffer.size()); for (int i = 1; i < rounds; ++i) { memcpy(tmp, hash, hashLen); gcry_md_hash_buffer(algo, hash, tmp, hashLen); } - return salt + QString(QByteArray(hash, hashLen).toBase64()); + QString hashedPass = salt + QString(QByteArray(hash, hashLen).toBase64()); + delete[] tmp; + delete[] hash; + return hashedPass; } From 6c7ba0950a340dd801533d0a557b63da0683fdf7 Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Thu, 24 Jul 2014 18:00:20 +0200 Subject: [PATCH 03/11] Fix warning for DeskList copy constructors Using pointers for classes derived from QObject would be the best idea. --- common/decklist.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/decklist.cpp b/common/decklist.cpp index af2f6270..0b2558b5 100644 --- a/common/decklist.cpp +++ b/common/decklist.cpp @@ -355,7 +355,8 @@ DeckList::DeckList() // TODO: http://qt-project.org/doc/qt-4.8/qobject.html#no-copy-constructor-or-assignment-operator DeckList::DeckList(const DeckList &other) - : name(other.name), + : QObject(), + name(other.name), comments(other.comments), deckHash(other.deckHash) { From 3102dd60f92d4665ef004b0f1ab2d482d6d6a65b Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Thu, 24 Jul 2014 18:09:28 +0200 Subject: [PATCH 04/11] Hide unused parameters in common/ to avoid warnings --- common/server.h | 2 +- common/server_database_interface.h | 20 ++++++++++---------- common/server_player.cpp | 2 +- common/server_protocolhandler.h | 8 ++++---- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/common/server.h b/common/server.h index 6742f6e2..275891cc 100644 --- a/common/server.h +++ b/common/server.h @@ -97,7 +97,7 @@ protected slots: void externalGameEventContainerReceived(const GameEventContainer &cont, qint64 sessionId); void externalResponseReceived(const Response &resp, qint64 sessionId); - virtual void doSendIslMessage(const IslMessage &msg, int serverId) { } + virtual void doSendIslMessage(const IslMessage & /* msg */, int /* serverId */) { } protected: void prepareDestroy(); void setDatabaseInterface(Server_DatabaseInterface *_databaseInterface); diff --git a/common/server_database_interface.h b/common/server_database_interface.h index df75cd63..798ae9d9 100644 --- a/common/server_database_interface.h +++ b/common/server_database_interface.h @@ -12,18 +12,18 @@ public: : QObject(parent) { } virtual AuthenticationResult checkUserPassword(Server_ProtocolHandler *handler, const QString &user, const QString &password, QString &reasonStr, int &secondsLeft) = 0; - virtual bool userExists(const QString &user) { return false; } - virtual QMap getBuddyList(const QString &name) { return QMap(); } - virtual QMap getIgnoreList(const QString &name) { return QMap(); } - virtual bool isInBuddyList(const QString &whoseList, const QString &who) { return false; } - virtual bool isInIgnoreList(const QString &whoseList, const QString &who) { return false; } + virtual bool userExists(const QString & /* user */) { return false; } + virtual QMap getBuddyList(const QString & /* name */) { return QMap(); } + virtual QMap getIgnoreList(const QString & /* name */) { return QMap(); } + virtual bool isInBuddyList(const QString & /* whoseList */, const QString & /* who */) { return false; } + virtual bool isInIgnoreList(const QString & /* whoseList */, const QString & /* who */) { return false; } virtual ServerInfo_User getUserData(const QString &name, bool withId = false) = 0; - virtual void storeGameInformation(const QString &roomName, const QStringList &roomGameTypes, const ServerInfo_Game &gameInfo, const QSet &allPlayersEver, const QSet &allSpectatorsEver, const QList &replayList) { } - virtual DeckList *getDeckFromDatabase(int deckId, int userId) { return 0; } + virtual void storeGameInformation(const QString & /* roomName */, const QStringList & /* roomGameTypes */, const ServerInfo_Game & /* gameInfo */, const QSet & /* allPlayersEver */, const QSet & /* allSpectatorsEver */, const QList & /* replayList */) { } + virtual DeckList *getDeckFromDatabase(int /* deckId */, int /* userId */) { return 0; } - virtual qint64 startSession(const QString &userName, const QString &address) { return 0; } + virtual qint64 startSession(const QString & /* userName */, const QString & /* address */) { return 0; } public slots: - virtual void endSession(qint64 sessionId) { } + virtual void endSession(qint64 /* sessionId */ ) { } public: virtual int getNextGameId() = 0; virtual int getNextReplayId() = 0; @@ -31,7 +31,7 @@ public: virtual void clearSessionTables() { } virtual void lockSessionTables() { } virtual void unlockSessionTables() { } - virtual bool userSessionExists(const QString &userName) { return false; } + virtual bool userSessionExists(const QString & /* userName */) { return false; } }; #endif diff --git a/common/server_player.cpp b/common/server_player.cpp index c25151e8..b9277a2d 100644 --- a/common/server_player.cpp +++ b/common/server_player.cpp @@ -1594,7 +1594,7 @@ Response::ResponseCode Server_Player::cmdRevealCards(const Command_RevealCards & return Response::RespOk; } -Response::ResponseCode Server_Player::cmdChangeZoneProperties(const Command_ChangeZoneProperties &cmd, ResponseContainer &rc, GameEventStorage &ges) +Response::ResponseCode Server_Player::cmdChangeZoneProperties(const Command_ChangeZoneProperties &cmd, ResponseContainer & /* rc */, GameEventStorage &ges) { Server_CardZone *zone = zones.value(QString::fromStdString(cmd.zone_name())); if (!zone) diff --git a/common/server_protocolhandler.h b/common/server_protocolhandler.h index 0cea37ae..98e0f6cc 100644 --- a/common/server_protocolhandler.h +++ b/common/server_protocolhandler.h @@ -49,7 +49,7 @@ protected: AuthenticationResult authState; bool acceptsUserListChanges; bool acceptsRoomListChanges; - virtual void logDebugMessage(const QString &message) { } + virtual void logDebugMessage(const QString & /* message */) { } private: QList messageSizeOverTime, messageCountOverTime; int timeRunning, lastDataReceived; @@ -71,13 +71,13 @@ private: Response::ResponseCode cmdJoinGame(const Command_JoinGame &cmd, Server_Room *room, ResponseContainer &rc); Response::ResponseCode processSessionCommandContainer(const CommandContainer &cont, ResponseContainer &rc); - virtual Response::ResponseCode processExtendedSessionCommand(int cmdType, const SessionCommand &cmd, ResponseContainer &rc) { return Response::RespFunctionNotAllowed; } + virtual Response::ResponseCode processExtendedSessionCommand(int /* cmdType */, const SessionCommand & /* cmd */, ResponseContainer & /* rc */) { return Response::RespFunctionNotAllowed; } Response::ResponseCode processRoomCommandContainer(const CommandContainer &cont, ResponseContainer &rc); Response::ResponseCode processGameCommandContainer(const CommandContainer &cont, ResponseContainer &rc); Response::ResponseCode processModeratorCommandContainer(const CommandContainer &cont, ResponseContainer &rc); - virtual Response::ResponseCode processExtendedModeratorCommand(int cmdType, const ModeratorCommand &cmd, ResponseContainer &rc) { return Response::RespFunctionNotAllowed; } + virtual Response::ResponseCode processExtendedModeratorCommand(int /* cmdType */, const ModeratorCommand & /* cmd */, ResponseContainer & /* rc */) { return Response::RespFunctionNotAllowed; } Response::ResponseCode processAdminCommandContainer(const CommandContainer &cont, ResponseContainer &rc); - virtual Response::ResponseCode processExtendedAdminCommand(int cmdType, const AdminCommand &cmd, ResponseContainer &rc) { return Response::RespFunctionNotAllowed; } + virtual Response::ResponseCode processExtendedAdminCommand(int /* cmdType */, const AdminCommand & /* cmd */, ResponseContainer & /* rc */) { return Response::RespFunctionNotAllowed; } private slots: void pingClockTimeout(); public slots: From 13bd35e020ef2508ab442a3fb5f02e875b76cdac Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Thu, 24 Jul 2014 18:16:08 +0200 Subject: [PATCH 05/11] Servatrice: add prototypes for local functions --- servatrice/src/main.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/servatrice/src/main.cpp b/servatrice/src/main.cpp index 37b750f4..c5bf9cde 100644 --- a/servatrice/src/main.cpp +++ b/servatrice/src/main.cpp @@ -37,6 +37,23 @@ RNG_Abstract *rng; ServerLogger *logger; QThread *loggerThread; +/* Prototypes */ + +void testRNG(); +void testHash(); +#if QT_VERSION < 0x050000 +void myMessageOutput(QtMsgType type, const char *msg); +void myMessageOutput2(QtMsgType type, const char *msg); +#else +void myMessageOutput(QtMsgType type, const QMessageLogContext &, const QString &msg); +void myMessageOutput2(QtMsgType type, const QMessageLogContext &, const QString &msg); +#endif +#ifdef Q_OS_UNIX +void sigSegvHandler(int sig); +#endif + +/* Implementations */ + void testRNG() { const int n = 500000; From d9577f0d6c0ce8ae2d737a44acf2f316c986130f Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Thu, 24 Jul 2014 18:27:02 +0200 Subject: [PATCH 06/11] Hide unused parameters in cockatrice/ to avoid warnings --- cockatrice/src/dlg_edit_tokens.cpp | 2 +- cockatrice/src/filtertree.h | 6 +++--- cockatrice/src/localserver.cpp | 2 +- cockatrice/src/replay_timeline_widget.cpp | 2 +- cockatrice/src/tab_replays.cpp | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cockatrice/src/dlg_edit_tokens.cpp b/cockatrice/src/dlg_edit_tokens.cpp index 28fefa7d..e2de2cd4 100644 --- a/cockatrice/src/dlg_edit_tokens.cpp +++ b/cockatrice/src/dlg_edit_tokens.cpp @@ -113,7 +113,7 @@ DlgEditTokens::DlgEditTokens(CardDatabaseModel *_cardDatabaseModel, QWidget *par setWindowTitle(tr("Edit tokens")); } -void DlgEditTokens::tokenSelectionChanged(const QModelIndex ¤t, const QModelIndex &previous) +void DlgEditTokens::tokenSelectionChanged(const QModelIndex ¤t, const QModelIndex & /* previous */) { const QModelIndex realIndex = cardDatabaseDisplayModel->mapToSource(current); CardInfo *cardInfo = current.row() >= 0 ? cardDatabaseModel->getCard(realIndex.row()) : cardDatabaseModel->getDatabase()->getCard(); diff --git a/cockatrice/src/filtertree.h b/cockatrice/src/filtertree.h index a6c4536d..3229d93b 100644 --- a/cockatrice/src/filtertree.h +++ b/cockatrice/src/filtertree.h @@ -18,10 +18,10 @@ public: virtual void enable() { enabled = true; nodeChanged(); } virtual void disable() { enabled = false; nodeChanged(); } virtual FilterTreeNode *parent() const { return NULL; } - virtual FilterTreeNode *nodeAt(int i) const { return NULL; } - virtual void deleteAt(int i) {} + virtual FilterTreeNode *nodeAt(int /* i */) const { return NULL; } + virtual void deleteAt(int /* i */) {} virtual int childCount() const { return 0; } - virtual int childIndex(const FilterTreeNode *node) const { return -1; } + virtual int childIndex(const FilterTreeNode * /* node */) const { return -1; } virtual int index() const { return (parent() != NULL)? parent()->childIndex(this) : -1; } virtual QString text() const { return QString(textCStr()); } virtual bool isLeaf() const { return false; } diff --git a/cockatrice/src/localserver.cpp b/cockatrice/src/localserver.cpp index dc49078a..a7eda3d1 100644 --- a/cockatrice/src/localserver.cpp +++ b/cockatrice/src/localserver.cpp @@ -33,7 +33,7 @@ ServerInfo_User LocalServer_DatabaseInterface::getUserData(const QString &name, return result; } -AuthenticationResult LocalServer_DatabaseInterface::checkUserPassword(Server_ProtocolHandler *handler, const QString &user, const QString &password, QString &reasonStr, int &secondsLeft) +AuthenticationResult LocalServer_DatabaseInterface::checkUserPassword(Server_ProtocolHandler * /* handler */, const QString & /* user */, const QString & /* password */, QString & /* reasonStr */, int & /* secondsLeft */) { return UnknownUser; } diff --git a/cockatrice/src/replay_timeline_widget.cpp b/cockatrice/src/replay_timeline_widget.cpp index 6127489f..fb3efc1d 100644 --- a/cockatrice/src/replay_timeline_widget.cpp +++ b/cockatrice/src/replay_timeline_widget.cpp @@ -43,7 +43,7 @@ void ReplayTimelineWidget::setTimeline(const QList &_replayTimeline) update(); } -void ReplayTimelineWidget::paintEvent(QPaintEvent *event) +void ReplayTimelineWidget::paintEvent(QPaintEvent * /* event */) { QPainter painter(this); painter.drawRect(0, 0, width() - 1, height() - 1); diff --git a/cockatrice/src/tab_replays.cpp b/cockatrice/src/tab_replays.cpp index 6b3a6210..00a7f9c0 100644 --- a/cockatrice/src/tab_replays.cpp +++ b/cockatrice/src/tab_replays.cpp @@ -202,7 +202,7 @@ void TabReplays::actDownload() client->sendCommand(pend); } -void TabReplays::downloadFinished(const Response &r, const CommandContainer &commandContainer, const QVariant &extraData) +void TabReplays::downloadFinished(const Response &r, const CommandContainer & /* commandContainer */, const QVariant &extraData) { if (r.response_code() != Response::RespOk) return; From bd97d7b9336d59a02fcb979145433457421004af Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Thu, 24 Jul 2014 18:40:25 +0200 Subject: [PATCH 07/11] Fix signed/unsigned comparision --- cockatrice/src/tab_game.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cockatrice/src/tab_game.cpp b/cockatrice/src/tab_game.cpp index b99fff02..715c75f7 100644 --- a/cockatrice/src/tab_game.cpp +++ b/cockatrice/src/tab_game.cpp @@ -254,7 +254,7 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, GameReplay *_replay) // Create list: event number -> time [ms] // Distribute simultaneous events evenly across 1 second. - int lastEventTimestamp = -1; + unsigned int lastEventTimestamp = 0; const int eventCount = replay->event_list_size(); for (int i = 0; i < eventCount; ++i) { int j = i + 1; From b10331fe66fc82a75eb39a60df298242949336dd Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Thu, 24 Jul 2014 18:40:56 +0200 Subject: [PATCH 08/11] Hide unused parameters in oracle/ to avoid warnings --- oracle/src/oraclewizard.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oracle/src/oraclewizard.cpp b/oracle/src/oraclewizard.cpp index 96b78145..2a597d45 100644 --- a/oracle/src/oraclewizard.cpp +++ b/oracle/src/oraclewizard.cpp @@ -383,7 +383,7 @@ void SaveSetsPage::initializePage() QMessageBox::critical(this, tr("Error"), tr("No set has been imported.")); } -void SaveSetsPage::updateTotalProgress(int cardsImported, int setIndex, const QString &setName) +void SaveSetsPage::updateTotalProgress(int cardsImported, int /* setIndex */, const QString &setName) { if (setName.isEmpty()) { messageLog->append("" + tr("Import finished: %1 cards.").arg(wizard()->importer->getCardList().size()) + ""); From 0f501762e04c9698845a9831620de955d592f626 Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Thu, 24 Jul 2014 18:44:19 +0200 Subject: [PATCH 09/11] Reorder items initialization to match the order in class declaration --- cockatrice/src/tab_supervisor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cockatrice/src/tab_supervisor.cpp b/cockatrice/src/tab_supervisor.cpp index dda918a0..166a766a 100644 --- a/cockatrice/src/tab_supervisor.cpp +++ b/cockatrice/src/tab_supervisor.cpp @@ -76,7 +76,7 @@ void CloseButton::paintEvent(QPaintEvent * /*event*/) } TabSupervisor::TabSupervisor(AbstractClient *_client, QWidget *parent) - : QTabWidget(parent), userInfo(0), client(_client), tabUserLists(0), tabServer(0), tabDeckStorage(0), tabAdmin(0), tabReplays(0) + : QTabWidget(parent), userInfo(0), client(_client), tabServer(0), tabUserLists(0), tabDeckStorage(0), tabReplays(0), tabAdmin(0) { tabChangedIcon = new QIcon(":/resources/icon_tab_changed.svg"); setElideMode(Qt::ElideRight); From 3fda31073f66c79b3a3111b3a067c5e2a5c238aa Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Thu, 24 Jul 2014 18:54:45 +0200 Subject: [PATCH 10/11] Declare useless virtual dtor for polymorphic classes --- cockatrice/src/filtertree.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cockatrice/src/filtertree.h b/cockatrice/src/filtertree.h index 3229d93b..d945e567 100644 --- a/cockatrice/src/filtertree.h +++ b/cockatrice/src/filtertree.h @@ -48,7 +48,7 @@ class FilterTreeBranch : public FilterTreeNode { protected: QList childNodes; public: - ~FilterTreeBranch(); + virtual ~FilterTreeBranch(); FilterTreeNode *nodeAt(int i) const; void deleteAt(int i); int childCount() const { return childNodes.size(); } @@ -102,6 +102,7 @@ public: FilterItem(QString trm, FilterItemList *parent) : p(parent), term(trm) {} + virtual ~FilterItem() {}; CardFilter::Attr attr() const { return p->attr(); } CardFilter::Type type() const { return p->type; } From 1f0ba0ea084c575d5e8c261b3928f7beb08d6f0d Mon Sep 17 00:00:00 2001 From: Fabio Bas Date: Fri, 25 Jul 2014 17:32:12 +0200 Subject: [PATCH 11/11] Debug compilation: check flags actually supported by the compiler --- CMakeLists.txt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 825ed5cb..d0d40591 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,8 +76,19 @@ IF(MSVC) #set(CMAKE_CXX_FLAGS_DEBUG "/Zi") ELSEIF (CMAKE_COMPILER_IS_GNUCXX) # linux/gcc, bsd/gcc, windows/mingw + include(CheckCXXCompilerFlag) + set(CMAKE_CXX_FLAGS_RELEASE "-s -O2") - set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -O0 -Wall -Wextra -pedantic -Werror -Wcast-align -Wmissing-declarations -Winline -Wno-long-long -Wno-error=extra -Wno-error=unused-parameter -Wno-inline -Wno-error=delete-non-virtual-dtor -Wno-error=sign-compare -Wno-error=reorder -Wno-error=missing-declarations") + set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -O0 -Wall -Wextra -pedantic -Werror") + + set(ADDITIONAL_DEBUG_FLAGS -Wcast-align -Wmissing-declarations -Winline -Wno-long-long -Wno-error=extra -Wno-error=unused-parameter -Wno-inline -Wno-error=delete-non-virtual-dtor -Wno-error=sign-compare -Wno-error=reorder -Wno-error=missing-declarations) + + FOREACH(FLAG ${ADDITIONAL_DEBUG_FLAGS}) + CHECK_CXX_COMPILER_FLAG("${FLAG}" CXX_HAS_WARNING_${FLAG}) + IF(CXX_HAS_WARNING_${FLAG}) + SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${FLAG}") + ENDIF() + ENDFOREACH() ELSE() # other: osx/llvm, bsd/llvm set(CMAKE_CXX_FLAGS_RELEASE "-O2")