Merge pull request #540 from openpgpjs/err_handling

Tolerant flag for suppressing packet read errors
This commit is contained in:
Bart Butler 2017-04-05 16:38:20 -07:00 committed by GitHub
commit 5db776c254
4 changed files with 17 additions and 2 deletions

View File

@ -44,6 +44,7 @@ export default {
use_native: true, // use native node.js crypto and Web Crypto apis (if available) use_native: true, // use native node.js crypto and Web Crypto apis (if available)
zero_copy: false, // use transferable objects between the Web Worker and main thread zero_copy: false, // use transferable objects between the Web Worker and main thread
debug: false, debug: false,
tolerant: true, // ignore unsupported/unrecognizable packets instead of throwing an error
show_version: true, show_version: true,
show_comment: true, show_comment: true,
versionstring: "OpenPGP.js VERSION", versionstring: "OpenPGP.js VERSION",

View File

@ -120,7 +120,7 @@ Compressed.prototype.decompress = function () {
throw new Error('Compression algorithm BZip2 [BZ2] is not implemented.'); throw new Error('Compression algorithm BZip2 [BZ2] is not implemented.');
default: default:
throw new Error("Compression algorithm unknown :" + this.alogrithm); throw new Error("Compression algorithm unknown :" + this.algorithm);
} }
this.packets.read(decompressed); this.packets.read(decompressed);

View File

@ -15,6 +15,7 @@ import util from '../util';
import packetParser from './packet.js'; import packetParser from './packet.js';
import * as packets from './all_packets.js'; import * as packets from './all_packets.js';
import enums from '../enums.js'; import enums from '../enums.js';
import config from '../config';
/** /**
* @constructor * @constructor
@ -44,6 +45,9 @@ Packetlist.prototype.read = function (bytes) {
pushed = true; pushed = true;
packet.read(parsed.packet); packet.read(parsed.packet);
} catch(e) { } catch(e) {
if (!config.tolerant || parsed.tag == enums.packet.symmetricallyEncrypted || parsed.tag == enums.packet.literal || parsed.tag == enums.packet.compressed) {
throw e;
}
if (pushed) { if (pushed) {
this.pop(); // drop unsupported packet this.pop(); // drop unsupported packet
} }

View File

@ -527,7 +527,8 @@ describe('Key', function() {
'=Q/kB', '=Q/kB',
'-----END PGP PUBLIC KEY BLOCK-----'].join('\n'); '-----END PGP PUBLIC KEY BLOCK-----'].join('\n');
it('Parsing armored text with RSA key and ECC subkey', function(done) { it('Parsing armored text with RSA key and ECC subkey in tolerant mode', function(done) {
openpgp.config.tolerant = true;
var pubKeys = openpgp.key.readArmored(rsa_ecc_pub); var pubKeys = openpgp.key.readArmored(rsa_ecc_pub);
expect(pubKeys).to.exist; expect(pubKeys).to.exist;
expect(pubKeys.err).to.not.exist; expect(pubKeys.err).to.not.exist;
@ -536,6 +537,15 @@ describe('Key', function() {
done(); done();
}); });
it('Parsing armored text with RSA key and ECC subkey in non-tolerant mode', function(done) {
openpgp.config.tolerant = false;
var pubKeys = openpgp.key.readArmored(rsa_ecc_pub);
expect(pubKeys).to.exist;
expect(pubKeys.err).to.exist;
done();
});
var multi_uid_key = var multi_uid_key =
['-----BEGIN PGP PUBLIC KEY BLOCK-----', ['-----BEGIN PGP PUBLIC KEY BLOCK-----',
'Version: GnuPG v1', 'Version: GnuPG v1',