diff --git a/LoopbackPassphraseProvider.cpp b/LoopbackPassphraseProvider.cpp index 7392e84..6dae74f 100644 --- a/LoopbackPassphraseProvider.cpp +++ b/LoopbackPassphraseProvider.cpp @@ -14,13 +14,13 @@ LoopbackPassphraseProvider::LoopbackPassphraseProvider() : PassphraseProvider() { - m_passphrase = strdup(""); + m_passphrase = ""; } LoopbackPassphraseProvider::LoopbackPassphraseProvider(const string& passphrase) : PassphraseProvider() { - m_passphrase = strdup(passphrase.c_str()); + m_passphrase = passphrase; } LoopbackPassphraseProvider::~LoopbackPassphraseProvider() @@ -42,7 +42,10 @@ char* LoopbackPassphraseProvider::getPassphrase(const char* useridHint, cout << previousWasBad << endl; // Always 0, even with bad password 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) @@ -50,7 +53,7 @@ void LoopbackPassphraseProvider::SetPassphrase(const string& passphrase) /* * Memory leak here ? */ - m_passphrase = strdup(passphrase.c_str()); + m_passphrase = passphrase; } const string LoopbackPassphraseProvider::GetPassphrase() diff --git a/LoopbackPassphraseProvider.h b/LoopbackPassphraseProvider.h index f64a630..a0d6176 100644 --- a/LoopbackPassphraseProvider.h +++ b/LoopbackPassphraseProvider.h @@ -48,7 +48,13 @@ public: const string GetPassphrase(); 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; };