[git] GPGME - branch, javascript-binding, updated. gpgme-1.11.1-101-g74684f2

by Maximilian Krambach cvs at cvs.gnupg.org
Fri Aug 17 19:27:59 CEST 2018


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GnuPG Made Easy".

The branch, javascript-binding has been updated
       via  74684f24c663af12c88b196fecd5f44863b893e4 (commit)
      from  3cbafb97ec4d94c1b9a2232a74f19f432ba67384 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 74684f24c663af12c88b196fecd5f44863b893e4
Author: Maximilian Krambach <maximilian.krambach at intevation.de>
Date:   Fri Aug 17 19:20:35 2018 +0200

    js: decode arriving gpg message strings
    
    --
    
    * Arriving strings (i.e. user id names, error messages) are not
      always in javascript encoding. This is an attempt to go through
      the whole gpgme answer (with the exception of payload data) and
      to fix the encoding of these

diff --git a/lang/js/BrowserTestExtension/tests/KeyInfos.js b/lang/js/BrowserTestExtension/tests/KeyInfos.js
index 03773a4..1829f22 100644
--- a/lang/js/BrowserTestExtension/tests/KeyInfos.js
+++ b/lang/js/BrowserTestExtension/tests/KeyInfos.js
@@ -22,7 +22,7 @@
  */
 
 /* global describe, it, expect, before, Gpgmejs */
-/* global inputvalues, fixedLengthString */
+/* global inputvalues*/
 
 describe('Key information', function () {
     let context = null;
@@ -43,4 +43,15 @@ describe('Key information', function () {
             done();
         });
     });
+
+    it('A userId keeps their encoding', function(done){
+        context.Keyring.importKey(inputvalues.publicKeyNonAscii.key, true)
+            .then(function(result){
+                expect(result.Keys[0]).to.be.an('object');
+                const user = result.Keys[0].key.get('userids')[0];
+                expect(user.get('name')).to.equal(
+                    inputvalues.publicKeyNonAscii.userid);
+                done();
+            });
+    });
 });
\ No newline at end of file
diff --git a/lang/js/BrowserTestExtension/tests/inputvalues.js b/lang/js/BrowserTestExtension/tests/inputvalues.js
index 7dda47c..b33d985 100644
--- a/lang/js/BrowserTestExtension/tests/inputvalues.js
+++ b/lang/js/BrowserTestExtension/tests/inputvalues.js
@@ -89,7 +89,40 @@ const inputvalues = {// eslint-disable-line no-unused-vars
         '-----END PGP SIGNATURE-----\n',
     },
 
-    someInputParameter: 'bad string'
+    someInputParameter: 'bad string',
+
+    publicKeyNonAscii: {
+        userid: 'Müller €uro',
+        key: '-----BEGIN PGP PUBLIC KEY BLOCK-----\n' + '\n' +
+          'mQENBFt2/VIBCADIWBIMxExZlHda4XIVnM9nsIfUYLebJSC/krEriyWgzytU8/fQ\n' +
+          'S05cfnYx7RXvOOq4k8aa7mu80ovg3q77idXauLreAUwng4Njw0nMxWq/vtoMiZ60\n' +
+          '9f8EmfthZophhkQF2HIPHyqXMDZzMLWv4oTr2UJ9BKudL1XtbK51y9TbiyfQygBl\n' +
+          '8bl+zrOo70/dN6aunvuo6Hlu5cEzkj2QrzZlqTdfG5qv6KVEMut1eAbxZAmvSnna\n' +
+          'R4wqiRCT3/eRXGJbDL/8GaCEYkwi9FBrimjOTV0MpcLNwAU4aGfDxMUsxML9xJ+/\n' +
+          '/6GFxzYf7Lmk5UhvoewR58uQkHkTVPjZ9hXZABEBAAG0KE3DvGxsZXIg4oKsdXJv\n' +
+          'IDxtdWVsbGVyZXVyb0BleGFtcGxlLm9yZz6JAVQEEwEIAD4WIQQVNixp3XT/DuGT\n' +
+          'F4MFmkL4L5UZdAUCW3b9UgIbAwUJA8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIX\n' +
+          'gAAKCRAFmkL4L5UZdAhiCACowW1aC8DYGtJyAaBO2MqWhyw1wVCbQN9uFsQZPydY\n' +
+          'v3BEbCDrRc0HyfV1PVoRQsgkiNMes1S2tz2IMJoEOTMaz3WjPM8yK0dDbo5sfx/o\n' +
+          '/XaXeKhyYNqRkz2dPzorg1sHyHe0ki/HoQiANEJ8mByMtlwnPWlhnINAX+27eL17\n' +
+          'JC8juhBYUchqoIBAl+ajYKSThdLzrUkcL7QfJjZb3pPytJSTTdFc0rD6ERDbfXXc\n' +
+          '/vnE2SDYme+XXn7H5tNe67tPM8M96vbp+uM+n2t/z96C+Pqb6GJFMBa35PM+/qQO\n' +
+          'yr0I2oaQnTecx2AfBXGZvd81wMYikAJ9rAOWyMQZHJWouQENBFt2/VIBCADXCvKD\n' +
+          '3wRWCOzRWtLTs7hpAjCDxp6niPkwxKuUf9r/sUPmn0pWdZHYlbPDev9psN9bnJ+C\n' +
+          '+wzzPZ1zgSYKIAN0IMoh0L7BRAoau7VWQ3Q7hP6HIbdzOTEGyklSoh9pIh6IlwZZ\n' +
+          'XfPlFlnn7FeH1UeA711E174SUpDRKYSfT+mFObQUuQewGi9QC3gBsz5MPLQQLzML\n' +
+          'yimIOT+8i64fHHSKChw5ZDckBffej31/YHPQ7+JsWFV+G/6xDfbwnaFZFAUwo+1L\n' +
+          '4w9UiMyCNkIWCkulzJ2Hbz66xzFMi/8zMYxr08Af+PpsXaWTQHAa5V4GNJSInDEB\n' +
+          '7gy/CGLcY90EozoDABEBAAGJATwEGAEIACYWIQQVNixp3XT/DuGTF4MFmkL4L5UZ\n' +
+          'dAUCW3b9UgIbDAUJA8JnAAAKCRAFmkL4L5UZdPqoB/9kpqxqa82k7JMcq7UiwQY7\n' +
+          'CdqCUPKF88ciOWKBpZmpl8V7zgM7kEXwmM6ocHcznXi8xM7eOfDIJcBeqFVIE4OT\n' +
+          '63OCMuvZICM9Kiu48wLNAw5W/YGAOBH7ySQzZM2XrtvwfFtJ3lR00t5f4FVtriA5\n' +
+          '47BjYYG5tTdJc8HwEHs045S99xKCWqwuDgO9qskIi6iPePUkuhpaVBLuEj2Goku6\n' +
+          'i8aql/vKYQS67L7UHJiEbjLe+wP9k3FvWUFTx39lAubsDzb4Abhe+qRqs2TKD7Go\n' +
+          'k35ZriRIYllmx4c9KyWL7Mvzcp+84Sq9LeMfsN4JstBDJ7jn6g19SjO5dmtxSuP0\n' +
+          '=zZSJ\n' +
+          '-----END PGP PUBLIC KEY BLOCK-----\n'
+    }
 };
 
 // (Pseudo-)Random String covering all of utf8.
diff --git a/lang/js/src/Connection.js b/lang/js/src/Connection.js
index b010575..8d381f1 100644
--- a/lang/js/src/Connection.js
+++ b/lang/js/src/Connection.js
@@ -26,6 +26,7 @@
 import { permittedOperations } from './permittedOperations';
 import { gpgme_error } from './Errors';
 import { GPGME_Message, createMessage } from './Message';
+import { decode } from './Helpers';
 
 /**
  * A Connection handles the nativeMessaging interaction via a port. As the
@@ -239,7 +240,7 @@ class Answer{
                 case 'type':
                     if (_decodedResponse.type === 'error'){
                         return (gpgme_error('GNUPG_ERROR',
-                            decodeURIComponent(escape(_decodedResponse.msg))));
+                            decode(_decodedResponse.msg)));
                     } else if (poa.type.indexOf(_decodedResponse.type) < 0){
                         return gpgme_error('CONN_UNEXPECTED_ANSWER');
                     }
@@ -270,7 +271,7 @@ class Answer{
                                 ('00' + c.charCodeAt(0).toString(16)).slice(-2);
                                 }).join(''));
                     } else {
-                        _response[key] = _decodedResponse[key];
+                        _response[key] = decode(_decodedResponse[key]);
                     }
                     break;
                 }
diff --git a/lang/js/src/Helpers.js b/lang/js/src/Helpers.js
index accc2af..379015f 100644
--- a/lang/js/src/Helpers.js
+++ b/lang/js/src/Helpers.js
@@ -108,3 +108,30 @@ export function isFingerprint(value){
 export function isLongId(value){
     return hextest(value, 16);
 }
+
+/**
+ * Recursively decodes input (utf8) to output (utf-16; javascript) strings
+ * @param {Object | Array | String} property
+ */
+export function decode(property){
+    if (typeof property === 'string'){
+        return decodeURIComponent(escape(property));
+    } else if (Array.isArray(property)){
+        let res = [];
+        for (let arr=0; arr < property.length; arr++){
+            res.push(decode(property[arr]));
+        }
+        return res;
+    } else if (typeof property === 'object'){
+        const keys = Object.keys(property);
+        if (keys.length){
+            let res = {};
+            for (let k=0; k < keys.length; k++ ){
+                res[keys[k]] = decode(property[keys[k]]);
+            }
+            return res;
+        }
+        return property;
+    }
+    return property;
+}
\ No newline at end of file

-----------------------------------------------------------------------

Summary of changes:
 lang/js/BrowserTestExtension/tests/KeyInfos.js    | 13 ++++++++-
 lang/js/BrowserTestExtension/tests/inputvalues.js | 35 ++++++++++++++++++++++-
 lang/js/src/Connection.js                         |  5 ++--
 lang/js/src/Helpers.js                            | 27 +++++++++++++++++
 4 files changed, 76 insertions(+), 4 deletions(-)


hooks/post-receive
-- 
GnuPG Made Easy
http://git.gnupg.org




More information about the Gnupg-commits mailing list