Merge branch 'develop' into feature/updateKdbxExtract

This commit is contained in:
Janek Bevendorff 2017-01-14 22:21:41 +02:00 committed by GitHub
commit 6fd7427cae
21 changed files with 89 additions and 91 deletions

View File

@ -26,7 +26,7 @@
## Your Environment
<!--- Include relevant details about the environment you experienced the bug in -->
* KeePassXR version/commit used:
* KeePassXC version/commit used: (can be found under Help -> About)
* Qt version (e.g. Qt 5.3):
* Compiler (e.g. Clang++3.6.0):
* Operating System and version:

View File

@ -1,4 +1,4 @@
<!--- Provide a general summary of your changes in the Title above -->
<!--- Provide a general summary of your changes in the title above -->
## Description
<!--- Describe your changes in detail -->
@ -15,21 +15,19 @@
## Screenshots (if appropriate):
## Types of changes
<!--- What types of changes does your code introduce? If it apply to your pull request, -->
<!--- replace all the `:negative_squared_cross_mark:` with `:white_check_mark:` -->
<!--- Everybody loves emoji -->
- :negative_squared_cross_mark: Bug fix (non-breaking change which fixes an issue)
- :negative_squared_cross_mark: New feature (non-breaking change which adds functionality)
- :negative_squared_cross_mark: Breaking change (fix or feature that would cause existing functionality to change)
<!--- What types of changes does your code introduce? -->
<!--- Please remove all lines which don't apply. -->
- ✅ Bug fix (non-breaking change which fixes an issue)
- ✅ New feature (non-breaking change which adds functionality)
- ✅ Breaking change (fix or feature that would cause existing functionality to change)
## Checklist:
<!--- Go over all the following points, if it apply to your pull request, -->
<!--- replace all the `:negative_squared_cross_mark:` with `:white_check_mark:`. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
<!--- Pull Requests that fail the [REQUIRED] field will likely be sent back for corrections or rejected -->
- :negative_squared_cross_mark: I have read the **CONTRIBUTING** document. [REQUIRED]
- :negative_squared_cross_mark: My code follows the code style of this project. [REQUIRED]
- :negative_squared_cross_mark: All new and existing tests passed. [REQUIRED]
- :negative_squared_cross_mark: My change requires a change to the documentation.
- :negative_squared_cross_mark: I have updated the documentation accordingly.
- :negative_squared_cross_mark: I have added tests to cover my changes.
<!--- Please go over all the following points. -->
<!--- Again, remove any lines which don't apply. -->
<!--- Pull Requests that don't fulfill all [REQUIRED] requisites are likely -->
<!--- to be sent back to you for correction or will be rejected. -->
- ✅ I have read the **CONTRIBUTING** document. **[REQUIRED]**
- ✅ My code follows the code style of this project. **[REQUIRED]**
- ✅ All new and existing tests passed. **[REQUIRED]**
- ✅ My change requires a change to the documentation and I have updated it accordingly.
- ✅ I have added tests to cover my changes.

View File

@ -15,7 +15,7 @@
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
"Choose the type of build, options are: None Debug Release RelWithDebInfo Debug Debugfull Profile MinSizeRel."
"Choose the type of build, options are: None Debug Release RelWithDebInfo Debug DebugFull Profile MinSizeRel."
FORCE)
endif()

View File

@ -65,7 +65,7 @@ int AutoTypePlatformTest::platformEventFilter(void* event)
AutoTypeExecutor* AutoTypePlatformTest::createExecutor()
{
return new AutoTypeExecturorTest(this);
return new AutoTypeExecutorTest(this);
}
void AutoTypePlatformTest::setActiveWindowTitle(const QString& title)
@ -127,17 +127,17 @@ bool AutoTypePlatformTest::raiseOwnWindow()
}
#endif
AutoTypeExecturorTest::AutoTypeExecturorTest(AutoTypePlatformTest* platform)
AutoTypeExecutorTest::AutoTypeExecutorTest(AutoTypePlatformTest* platform)
: m_platform(platform)
{
}
void AutoTypeExecturorTest::execChar(AutoTypeChar* action)
void AutoTypeExecutorTest::execChar(AutoTypeChar* action)
{
m_platform->addActionChar(action);
}
void AutoTypeExecturorTest::execKey(AutoTypeKey* action)
void AutoTypeExecutorTest::execKey(AutoTypeKey* action)
{
m_platform->addActionKey(action);
}

View File

@ -69,10 +69,10 @@ private:
QString m_actionChars;
};
class AutoTypeExecturorTest : public AutoTypeExecutor
class AutoTypeExecutorTest : public AutoTypeExecutor
{
public:
explicit AutoTypeExecturorTest(AutoTypePlatformTest* platform);
explicit AutoTypeExecutorTest(AutoTypePlatformTest* platform);
void execChar(AutoTypeChar* action) override;
void execKey(AutoTypeKey* action) override;

View File

@ -24,7 +24,7 @@
#include <xcb/xcb.h>
bool AutoTypePlatformX11::m_catchXErrors = false;
bool AutoTypePlatformX11::m_xErrorOccured = false;
bool AutoTypePlatformX11::m_xErrorOccurred = false;
int (*AutoTypePlatformX11::m_oldXErrorHandler)(Display*, XErrorEvent*) = nullptr;
AutoTypePlatformX11::AutoTypePlatformX11()
@ -153,7 +153,7 @@ bool AutoTypePlatformX11::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifi
GrabModeAsync, GrabModeAsync);
stopCatchXErrors();
if (!m_xErrorOccured) {
if (!m_xErrorOccurred) {
m_currentGlobalKey = key;
m_currentGlobalModifiers = modifiers;
m_currentGlobalKeycode = keycode;
@ -247,7 +247,7 @@ int AutoTypePlatformX11::platformEventFilter(void* event)
AutoTypeExecutor* AutoTypePlatformX11::createExecutor()
{
return new AutoTypeExecturorX11(this);
return new AutoTypeExecutorX11(this);
}
QString AutoTypePlatformX11::windowTitle(Window window, bool useBlacklist)
@ -556,7 +556,7 @@ void AutoTypePlatformX11::startCatchXErrors()
Q_ASSERT(!m_catchXErrors);
m_catchXErrors = true;
m_xErrorOccured = false;
m_xErrorOccurred = false;
m_oldXErrorHandler = XSetErrorHandler(x11ErrorHandler);
}
@ -575,7 +575,7 @@ int AutoTypePlatformX11::x11ErrorHandler(Display* display, XErrorEvent* error)
Q_UNUSED(error)
if (m_catchXErrors) {
m_xErrorOccured = true;
m_xErrorOccurred = true;
}
return 1;
@ -823,17 +823,17 @@ int AutoTypePlatformX11::MyErrorHandler(Display* my_dpy, XErrorEvent* event)
}
AutoTypeExecturorX11::AutoTypeExecturorX11(AutoTypePlatformX11* platform)
AutoTypeExecutorX11::AutoTypeExecutorX11(AutoTypePlatformX11* platform)
: m_platform(platform)
{
}
void AutoTypeExecturorX11::execChar(AutoTypeChar* action)
void AutoTypeExecutorX11::execChar(AutoTypeChar* action)
{
m_platform->SendKeyPressedEvent(m_platform->charToKeySym(action->character));
}
void AutoTypeExecturorX11::execKey(AutoTypeKey* action)
void AutoTypeExecutorX11::execKey(AutoTypeKey* action)
{
m_platform->SendKeyPressedEvent(m_platform->keyToKeySym(action->key));
}

View File

@ -100,7 +100,7 @@ private:
uint m_currentGlobalNativeModifiers;
int m_modifierMask;
static bool m_catchXErrors;
static bool m_xErrorOccured;
static bool m_xErrorOccurred;
static int (*m_oldXErrorHandler)(Display*, XErrorEvent*);
static const int m_unicodeToKeysymLen;
@ -119,10 +119,10 @@ private:
bool m_loaded;
};
class AutoTypeExecturorX11 : public AutoTypeExecutor
class AutoTypeExecutorX11 : public AutoTypeExecutor
{
public:
explicit AutoTypeExecturorX11(AutoTypePlatformX11* platform);
explicit AutoTypeExecutorX11(AutoTypePlatformX11* platform);
void execChar(AutoTypeChar* action) override;
void execKey(AutoTypeKey* action) override;

View File

@ -449,7 +449,7 @@ void Entry::truncateHistory()
int histMaxSize = db->metadata()->historyMaxSize();
if (histMaxSize > -1) {
int size = 0;
QSet<QByteArray> foundAttachements = attachments()->values().toSet();
QSet<QByteArray> foundAttachments = attachments()->values().toSet();
QMutableListIterator<Entry*> i(m_history);
i.toBack();
@ -460,11 +460,11 @@ void Entry::truncateHistory()
if (size <= histMaxSize) {
size += historyItem->attributes()->attributesSize();
const QSet<QByteArray> newAttachments = historyItem->attachments()->values().toSet() - foundAttachements;
const QSet<QByteArray> newAttachments = historyItem->attachments()->values().toSet() - foundAttachments;
for (const QByteArray& attachment : newAttachments) {
size += attachment.size();
}
foundAttachements += newAttachments;
foundAttachments += newAttachments;
}
if (size > histMaxSize) {

View File

@ -36,7 +36,7 @@ QObject* SignalMultiplexer::currentObject() const
void SignalMultiplexer::setCurrentObject(QObject* object)
{
// remove all Connections from the list whoes senders/receivers have been deleted
// remove all Connections from the list whose senders/receivers have been deleted
QMutableListIterator<Connection> i = m_connections;
while (i.hasNext()) {
const Connection& con = i.next();

View File

@ -153,14 +153,14 @@ bool Crypto::testAes256Cbc()
return false;
}
SymmetricCipher aes256Descrypt(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt);
if (!aes256Descrypt.init(key, iv)) {
raiseError(aes256Descrypt.errorString());
SymmetricCipher aes256Decrypt(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt);
if (!aes256Decrypt.init(key, iv)) {
raiseError(aes256Decrypt.errorString());
return false;
}
QByteArray decryptedText = aes256Descrypt.process(cipherText, &ok);
QByteArray decryptedText = aes256Decrypt.process(cipherText, &ok);
if (!ok) {
raiseError(aes256Descrypt.errorString());
raiseError(aes256Decrypt.errorString());
return false;
}
if (decryptedText != plainText) {
@ -196,14 +196,14 @@ bool Crypto::testAes256Ecb()
return false;
}
SymmetricCipher aes256Descrypt(SymmetricCipher::Aes256, SymmetricCipher::Ecb, SymmetricCipher::Decrypt);
if (!aes256Descrypt.init(key, iv)) {
raiseError(aes256Descrypt.errorString());
SymmetricCipher aes256Decrypt(SymmetricCipher::Aes256, SymmetricCipher::Ecb, SymmetricCipher::Decrypt);
if (!aes256Decrypt.init(key, iv)) {
raiseError(aes256Decrypt.errorString());
return false;
}
QByteArray decryptedText = aes256Descrypt.process(cipherText, &ok);
QByteArray decryptedText = aes256Decrypt.process(cipherText, &ok);
if (!ok) {
raiseError(aes256Descrypt.errorString());
raiseError(aes256Decrypt.errorString());
return false;
}
if (decryptedText != plainText) {

View File

@ -295,7 +295,7 @@ bool KeePass2Reader::readHeaderField()
break;
case KeePass2::TransformRounds:
setTansformRounds(fieldData);
setTransformRounds(fieldData);
break;
case KeePass2::EncryptionIV:
@ -376,7 +376,7 @@ void KeePass2Reader::setTransformSeed(const QByteArray& data)
}
}
void KeePass2Reader::setTansformRounds(const QByteArray& data)
void KeePass2Reader::setTransformRounds(const QByteArray& data)
{
if (data.size() != 8) {
raiseError("Invalid transform rounds size");

View File

@ -48,7 +48,7 @@ private:
void setCompressionFlags(const QByteArray& data);
void setMasterSeed(const QByteArray& data);
void setTransformSeed(const QByteArray& data);
void setTansformRounds(const QByteArray& data);
void setTransformRounds(const QByteArray& data);
void setEncryptionIV(const QByteArray& data);
void setProtectedStreamKey(const QByteArray& data);
void setStreamStartBytes(const QByteArray& data);

View File

@ -178,7 +178,7 @@ bool KeePass2XmlReader::parseKeePassFile()
Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "KeePassFile");
bool rootElementFound = false;
bool rootParsedSuccesfully = false;
bool rootParsedSuccessfully = false;
while (!m_xml.error() && m_xml.readNextStartElement()) {
if (m_xml.name() == "Meta") {
@ -186,11 +186,11 @@ bool KeePass2XmlReader::parseKeePassFile()
}
else if (m_xml.name() == "Root") {
if (rootElementFound) {
rootParsedSuccesfully = false;
rootParsedSuccessfully = false;
raiseError("Multiple root elements");
}
else {
rootParsedSuccesfully = parseRoot();
rootParsedSuccessfully = parseRoot();
rootElementFound = true;
}
}
@ -199,7 +199,7 @@ bool KeePass2XmlReader::parseKeePassFile()
}
}
return rootParsedSuccesfully;
return rootParsedSuccessfully;
}
void KeePass2XmlReader::parseMeta()
@ -458,12 +458,12 @@ bool KeePass2XmlReader::parseRoot()
Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Root");
bool groupElementFound = false;
bool groupParsedSuccesfully = false;
bool groupParsedSuccessfully = false;
while (!m_xml.error() && m_xml.readNextStartElement()) {
if (m_xml.name() == "Group") {
if (groupElementFound) {
groupParsedSuccesfully = false;
groupParsedSuccessfully = false;
raiseError("Multiple group elements");
continue;
}
@ -473,7 +473,7 @@ bool KeePass2XmlReader::parseRoot()
Group* oldRoot = m_db->rootGroup();
m_db->setRootGroup(rootGroup);
delete oldRoot;
groupParsedSuccesfully = true;
groupParsedSuccessfully = true;
}
groupElementFound = true;
@ -486,7 +486,7 @@ bool KeePass2XmlReader::parseRoot()
}
}
return groupParsedSuccesfully;
return groupParsedSuccessfully;
}
Group* KeePass2XmlReader::parseGroup()

View File

@ -566,9 +566,9 @@ QString KeePass2XmlWriter::stripInvalidXml10Chars(QString str)
// keep valid surrogate pair
i--;
}
else if ((uc < 0x20 && uc != 0x09 && uc != 0x0A && uc != 0x0D) // control chracters
|| (uc >= 0x7F && uc <= 0x84) // control chracters, valid but discouraged by XML
|| (uc >= 0x86 && uc <= 0x9F) // control chracters, valid but discouraged by XML
else if ((uc < 0x20 && uc != 0x09 && uc != 0x0A && uc != 0x0D) // control characters
|| (uc >= 0x7F && uc <= 0x84) // control characters, valid but discouraged by XML
|| (uc >= 0x86 && uc <= 0x9F) // control characters, valid but discouraged by XML
|| (uc > 0xFFFD) // noncharacter
|| ch.isLowSurrogate() // single low surrogate
|| ch.isHighSurrogate()) // single high surrogate

View File

@ -333,8 +333,8 @@ void DatabaseWidget::deleteEntries()
selectedEntries.append(m_entryView->entryFromIndex(index));
}
bool inRecylceBin = Tools::hasChild(m_db->metadata()->recycleBin(), selectedEntries.first());
if (inRecylceBin || !m_db->metadata()->recycleBinEnabled()) {
bool inRecycleBin = Tools::hasChild(m_db->metadata()->recycleBin(), selectedEntries.first());
if (inRecycleBin || !m_db->metadata()->recycleBinEnabled()) {
QMessageBox::StandardButton result;
if (selected.size() == 1) {
@ -525,10 +525,10 @@ void DatabaseWidget::deleteGroup()
return;
}
bool inRecylceBin = Tools::hasChild(m_db->metadata()->recycleBin(), currentGroup);
bool inRecycleBin = Tools::hasChild(m_db->metadata()->recycleBin(), currentGroup);
bool isRecycleBin = (currentGroup == m_db->metadata()->recycleBin());
bool isRecycleBinSubgroup = Tools::hasChild(currentGroup, m_db->metadata()->recycleBin());
if (inRecylceBin || isRecycleBin || isRecycleBinSubgroup || !m_db->metadata()->recycleBinEnabled()) {
if (inRecycleBin || isRecycleBin || isRecycleBinSubgroup || !m_db->metadata()->recycleBinEnabled()) {
QMessageBox::StandardButton result = MessageBox::question(
this, tr("Delete group?"),
tr("Do you really want to delete the group \"%1\" for good?")

View File

@ -90,7 +90,7 @@ void EditEntryWidget::setupMain()
m_mainUi->togglePasswordButton->setIcon(filePath()->onOffIcon("actions", "password-show"));
connect(m_mainUi->togglePasswordButton, SIGNAL(toggled(bool)), m_mainUi->passwordEdit, SLOT(setShowPassword(bool)));
connect(m_mainUi->tooglePasswordGeneratorButton, SIGNAL(toggled(bool)), SLOT(togglePasswordGeneratorButton(bool)));
connect(m_mainUi->togglePasswordGeneratorButton, SIGNAL(toggled(bool)), SLOT(togglePasswordGeneratorButton(bool)));
connect(m_mainUi->expireCheck, SIGNAL(toggled(bool)), m_mainUi->expireDatePicker, SLOT(setEnabled(bool)));
m_mainUi->passwordRepeatEdit->enableVerifyMode(m_mainUi->passwordEdit);
connect(m_mainUi->passwordGenerator, SIGNAL(appliedPassword(QString)), SLOT(setGeneratedPassword(QString)));
@ -299,8 +299,8 @@ void EditEntryWidget::setForms(const Entry* entry, bool restore)
m_mainUi->expireCheck->setEnabled(!m_history);
m_mainUi->expireDatePicker->setReadOnly(m_history);
m_mainUi->notesEdit->setReadOnly(m_history);
m_mainUi->tooglePasswordGeneratorButton->setChecked(false);
m_mainUi->tooglePasswordGeneratorButton->setDisabled(m_history);
m_mainUi->togglePasswordGeneratorButton->setChecked(false);
m_mainUi->togglePasswordGeneratorButton->setDisabled(m_history);
m_mainUi->passwordGenerator->reset();
m_advancedUi->addAttachmentButton->setEnabled(!m_history);
updateAttachmentButtonsEnabled(m_advancedUi->attachmentsView->currentIndex());
@ -529,7 +529,7 @@ void EditEntryWidget::setGeneratedPassword(const QString& password)
m_mainUi->passwordEdit->setText(password);
m_mainUi->passwordRepeatEdit->setText(password);
m_mainUi->tooglePasswordGeneratorButton->setChecked(false);
m_mainUi->togglePasswordGeneratorButton->setChecked(false);
}
void EditEntryWidget::insertAttribute()

View File

@ -76,7 +76,7 @@
</widget>
</item>
<item>
<widget class="QToolButton" name="tooglePasswordGeneratorButton">
<widget class="QToolButton" name="togglePasswordGeneratorButton">
<property name="text">
<string>Generate</string>
</property>
@ -166,7 +166,7 @@
<tabstop>passwordEdit</tabstop>
<tabstop>passwordRepeatEdit</tabstop>
<tabstop>togglePasswordButton</tabstop>
<tabstop>tooglePasswordGeneratorButton</tabstop>
<tabstop>togglePasswordGeneratorButton</tabstop>
<tabstop>urlEdit</tabstop>
<tabstop>expireCheck</tabstop>
<tabstop>expireDatePicker</tabstop>

View File

@ -190,18 +190,18 @@ bool FileKey::loadXml(QIODevice* device)
bool FileKey::loadXmlMeta(QXmlStreamReader& xmlReader)
{
bool corectVersion = false;
bool correctVersion = false;
while (!xmlReader.error() && xmlReader.readNextStartElement()) {
if (xmlReader.name() == "Version") {
// TODO: error message about incompatible key file version
if (xmlReader.readElementText() == "1.00") {
corectVersion = true;
correctVersion = true;
}
}
}
return corectVersion;
return correctVersion;
}
QByteArray FileKey::loadXmlKey(QXmlStreamReader& xmlReader)

View File

@ -135,7 +135,7 @@ void QtIOCompressorPrivate::flushZlib(int flushMode)
if (!writeBytes(buffer, outputSize))
return;
// If the mode is Z_FNISH we must loop until we get Z_STREAM_END,
// If the mode is Z_FINISH we must loop until we get Z_STREAM_END,
// else we loop as long as zlib is able to fill the output buffer.
} while ((flushMode == Z_FINISH && status != Z_STREAM_END) || (flushMode != Z_FINISH && zlibStream.avail_out == 0));
@ -522,11 +522,11 @@ qint64 QtIOCompressor::readData(char *data, qint64 maxSize)
// Read data if if the input buffer is empty. There could be data in the buffer
// from a previous readData call.
if (d->zlibStream.avail_in == 0) {
qint64 bytesAvalible = d->device->read(reinterpret_cast<char *>(d->buffer), d->bufferSize);
qint64 bytesAvailable = d->device->read(reinterpret_cast<char *>(d->buffer), d->bufferSize);
d->zlibStream.next_in = d->buffer;
d->zlibStream.avail_in = bytesAvalible;
d->zlibStream.avail_in = bytesAvailable;
if (bytesAvalible == -1) {
if (bytesAvailable == -1) {
d->state = QtIOCompressorPrivate::Error;
setErrorString(QT_TRANSLATE_NOOP("QtIOCompressor", "Error reading data from underlying device: ") + d->device->errorString());
return -1;
@ -534,9 +534,9 @@ qint64 QtIOCompressor::readData(char *data, qint64 maxSize)
if (d->state != QtIOCompressorPrivate::InStream) {
// If we are not in a stream and get 0 bytes, we are probably trying to read from an empty device.
if(bytesAvalible == 0)
if(bytesAvailable == 0)
return 0;
else if (bytesAvalible > 0)
else if (bytesAvailable > 0)
d->state = QtIOCompressorPrivate::InStream;
}
}

View File

@ -236,15 +236,15 @@ void TestEntryModel::testAutoTypeAssociationsModel()
QCOMPARE(model->rowCount(), 0);
AutoTypeAssociations* assocications = new AutoTypeAssociations(this);
model->setAutoTypeAssociations(assocications);
AutoTypeAssociations* associations = new AutoTypeAssociations(this);
model->setAutoTypeAssociations(associations);
QCOMPARE(model->rowCount(), 0);
AutoTypeAssociations::Association assoc;
assoc.window = "1";
assoc.sequence = "2";
assocications->add(assoc);
associations->add(assoc);
QCOMPARE(model->rowCount(), 1);
QCOMPARE(model->data(model->index(0, 0)).toString(), QString("1"));
@ -252,17 +252,17 @@ void TestEntryModel::testAutoTypeAssociationsModel()
assoc.window = "3";
assoc.sequence = "4";
assocications->update(0, assoc);
associations->update(0, assoc);
QCOMPARE(model->data(model->index(0, 0)).toString(), QString("3"));
QCOMPARE(model->data(model->index(0, 1)).toString(), QString("4"));
assocications->add(assoc);
assocications->remove(0);
associations->add(assoc);
associations->remove(0);
QCOMPARE(model->rowCount(), 1);
delete modelTest;
delete model;
delete assocications;
delete associations;
}
void TestEntryModel::testProxyModel()

View File

@ -328,7 +328,7 @@ void TestGui::testEntryEntropy()
QTest::keyClicks(titleEdit, "test");
// Open the password generator
QToolButton* generatorButton = editEntryWidget->findChild<QToolButton*>("tooglePasswordGeneratorButton");
QToolButton* generatorButton = editEntryWidget->findChild<QToolButton*>("togglePasswordGeneratorButton");
QTest::mouseClick(generatorButton, Qt::LeftButton);
// Type in some password