Allocate passphrase on demand.
Don't store passphrase as char* member variable. This would crash the application when exporting private keys. See https://dev.gnupg.org/T5151#139421
This commit is contained in:
@@ -14,13 +14,13 @@
|
|||||||
LoopbackPassphraseProvider::LoopbackPassphraseProvider()
|
LoopbackPassphraseProvider::LoopbackPassphraseProvider()
|
||||||
: PassphraseProvider()
|
: PassphraseProvider()
|
||||||
{
|
{
|
||||||
m_passphrase = strdup("");
|
m_passphrase = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
LoopbackPassphraseProvider::LoopbackPassphraseProvider(const string& passphrase)
|
LoopbackPassphraseProvider::LoopbackPassphraseProvider(const string& passphrase)
|
||||||
: PassphraseProvider()
|
: PassphraseProvider()
|
||||||
{
|
{
|
||||||
m_passphrase = strdup(passphrase.c_str());
|
m_passphrase = passphrase;
|
||||||
}
|
}
|
||||||
|
|
||||||
LoopbackPassphraseProvider::~LoopbackPassphraseProvider()
|
LoopbackPassphraseProvider::~LoopbackPassphraseProvider()
|
||||||
@@ -42,7 +42,10 @@ char* LoopbackPassphraseProvider::getPassphrase(const char* useridHint,
|
|||||||
cout << previousWasBad << endl; // Always 0, even with bad password
|
cout << previousWasBad << endl; // Always 0, even with bad password
|
||||||
cout << canceled << endl; // Always 0
|
cout << canceled << endl; // Always 0
|
||||||
*/
|
*/
|
||||||
return m_passphrase;
|
/*
|
||||||
|
* See https://dev.gnupg.org/T5151#139421
|
||||||
|
*/
|
||||||
|
return strdup(m_passphrase.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoopbackPassphraseProvider::SetPassphrase(const string& passphrase)
|
void LoopbackPassphraseProvider::SetPassphrase(const string& passphrase)
|
||||||
@@ -50,7 +53,7 @@ void LoopbackPassphraseProvider::SetPassphrase(const string& passphrase)
|
|||||||
/*
|
/*
|
||||||
* Memory leak here ?
|
* Memory leak here ?
|
||||||
*/
|
*/
|
||||||
m_passphrase = strdup(passphrase.c_str());
|
m_passphrase = passphrase;
|
||||||
}
|
}
|
||||||
|
|
||||||
const string LoopbackPassphraseProvider::GetPassphrase()
|
const string LoopbackPassphraseProvider::GetPassphrase()
|
||||||
|
|||||||
@@ -48,7 +48,13 @@ public:
|
|||||||
const string GetPassphrase();
|
const string GetPassphrase();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
char * m_passphrase;
|
/*
|
||||||
|
* Don't use char* m_passphrase. It is manipulated by gpg and exporting
|
||||||
|
* secret keys become messy, to the point of crashing the application if
|
||||||
|
* passphrase is bad.
|
||||||
|
* See https://dev.gnupg.org/T5151#139421
|
||||||
|
*/
|
||||||
|
string m_passphrase;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user