Fix removing whitespace from the last line of cleartext signed messages
Also, move normalizing line endings and removing whitespace to util functions
This commit is contained in:
parent
4e204d7331
commit
ebeedd3443
|
@ -19,6 +19,7 @@
|
||||||
* @requires config
|
* @requires config
|
||||||
* @requires encoding/armor
|
* @requires encoding/armor
|
||||||
* @requires enums
|
* @requires enums
|
||||||
|
* @requires util
|
||||||
* @requires packet
|
* @requires packet
|
||||||
* @requires signature
|
* @requires signature
|
||||||
* @module cleartext
|
* @module cleartext
|
||||||
|
@ -27,6 +28,7 @@
|
||||||
import config from './config';
|
import config from './config';
|
||||||
import armor from './encoding/armor';
|
import armor from './encoding/armor';
|
||||||
import enums from './enums';
|
import enums from './enums';
|
||||||
|
import util from './util';
|
||||||
import packet from './packet';
|
import packet from './packet';
|
||||||
import { Signature } from './signature';
|
import { Signature } from './signature';
|
||||||
import { createVerificationObjects, createSignaturePackets } from './message';
|
import { createVerificationObjects, createSignaturePackets } from './message';
|
||||||
|
@ -43,7 +45,7 @@ export function CleartextMessage(text, signature) {
|
||||||
return new CleartextMessage(text, signature);
|
return new CleartextMessage(text, signature);
|
||||||
}
|
}
|
||||||
// normalize EOL to canonical form <CR><LF>
|
// normalize EOL to canonical form <CR><LF>
|
||||||
this.text = text.replace(/\r\n/g, "\n").replace(/\r/g, "\n").replace(/[ \t]+\n/g, "\n").replace(/\n/g, "\r\n");
|
this.text = util.canonicalizeEOL(util.removeTrailingSpaces(text));
|
||||||
if (signature && !(signature instanceof Signature)) {
|
if (signature && !(signature instanceof Signature)) {
|
||||||
throw new Error('Invalid signature input');
|
throw new Error('Invalid signature input');
|
||||||
}
|
}
|
||||||
|
@ -122,7 +124,7 @@ CleartextMessage.prototype.verifyDetached = function(signature, keys, date=new D
|
||||||
*/
|
*/
|
||||||
CleartextMessage.prototype.getText = function() {
|
CleartextMessage.prototype.getText = function() {
|
||||||
// normalize end of line to \n
|
// normalize end of line to \n
|
||||||
return this.text.replace(/\r\n/g, "\n");
|
return util.nativeEOL(this.text);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -66,7 +66,7 @@ Literal.prototype.getText = function() {
|
||||||
// decode UTF8
|
// decode UTF8
|
||||||
const text = util.decode_utf8(util.Uint8Array_to_str(this.data));
|
const text = util.decode_utf8(util.Uint8Array_to_str(this.data));
|
||||||
// normalize EOL to \n
|
// normalize EOL to \n
|
||||||
this.text = text.replace(/\r\n/g, '\n');
|
this.text = util.nativeEOL(text);
|
||||||
return this.text;
|
return this.text;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ Literal.prototype.getBytes = function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// normalize EOL to \r\n
|
// normalize EOL to \r\n
|
||||||
const text = this.text.replace(/\r\n/g, '\n').replace(/\r/g, '\n').replace(/\n/g, '\r\n');
|
const text = util.canonicalizeEOL(this.text);
|
||||||
// encode UTF8
|
// encode UTF8
|
||||||
this.data = util.str_to_Uint8Array(util.encode_utf8(text));
|
this.data = util.str_to_Uint8Array(util.encode_utf8(text));
|
||||||
return this.data;
|
return this.data;
|
||||||
|
|
|
@ -556,7 +556,7 @@ Signature.prototype.toSign = function (type, data) {
|
||||||
case t.text: {
|
case t.text: {
|
||||||
let text = data.getText();
|
let text = data.getText();
|
||||||
// normalize EOL to \r\n
|
// normalize EOL to \r\n
|
||||||
text = text.replace(/\r\n/g, '\n').replace(/\r/g, '\n').replace(/\n/g, '\r\n');
|
text = util.canonicalizeEOL(text);
|
||||||
// encode UTF8
|
// encode UTF8
|
||||||
return util.str_to_Uint8Array(util.encode_utf8(text));
|
return util.str_to_Uint8Array(util.encode_utf8(text));
|
||||||
}
|
}
|
||||||
|
|
21
src/util.js
21
src/util.js
|
@ -574,5 +574,26 @@ export default {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return /</.test(data) && />$/.test(data);
|
return /</.test(data) && />$/.test(data);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Normalize line endings to \r\n
|
||||||
|
*/
|
||||||
|
canonicalizeEOL: function(text) {
|
||||||
|
return text.replace(/\r\n/g, "\n").replace(/\r/g, "\n").replace(/\n/g, "\r\n");
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert line endings from canonicalized \r\n to native \n
|
||||||
|
*/
|
||||||
|
nativeEOL: function(text) {
|
||||||
|
return text.replace(/\r\n/g, "\n");
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove trailing spaces and tabs from each line
|
||||||
|
*/
|
||||||
|
removeTrailingSpaces: function(text) {
|
||||||
|
return text.replace(/[ \t]+$/mg, "");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user