Qt: Do not use temporary reference to utf8 pin
authorDirk Mueller <dirk@dmllr.de>
Wed, 21 Oct 2015 12:41:53 +0000 (14:41 +0200)
committerAndre Heinecke <aheinecke@intevation.de>
Thu, 22 Oct 2015 08:40:12 +0000 (10:40 +0200)
* qt/main.cpp (qt_cmd_handler): Keep utf8 pin byte array.

--
The pin pointer was invalid after the UTF8 conversion
as the converted byte array only was temporary in that
call and the data pointer becomes invalid after it's
destruction.

Commit message amended by Andre Heinecke. The original
commit message was:

const char* does not keep the temporary string returned
from toUtf8() active, since it doesn't keep the reference counter
set. So you usually just copy out garbage instead of the
pin that was entered. Just keep the QByteArray which keeps
the reference active.

GnuPG-bug-id: 2133

qt/main.cpp

index 70e08de..c7518fa 100644 (file)
@@ -190,15 +190,15 @@ qt_cmd_handler (pinentry_t pe)
       if (!ret)
        return -1;
 
-      const char *pin = pinentry.pin().toUtf8().constData();
+      QByteArray pin = pinentry.pin().toUtf8 ();
 
-      int len = strlen (pin);
+      int len = strlen (pin.constData ());
       if (len >= 0)
        {
          pinentry_setbufferlen (pe, len + 1);
          if (pe->pin)
            {
-             strcpy (pe->pin, pin);
+             strcpy (pe->pin, pin.constData ());
              return len;
            }
        }