Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

punycode: Update to v1.1.1 #3561

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 9 additions & 11 deletions lib/punycode.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,6 @@
/** Error messages */
errors = {
'overflow': 'Overflow: input needs wider integers to process.',
'ucs2decode': 'UCS-2(decode): illegal sequence',
'ucs2encode': 'UCS-2(encode): illegal value',
'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
'invalid-input': 'Invalid input'
},
Expand Down Expand Up @@ -112,14 +110,17 @@
extra;
while (counter < length) {
value = string.charCodeAt(counter++);
if ((value & 0xF800) == 0xD800) {
if ((value & 0xF800) == 0xD800 && counter < length) {
// high surrogate, and there is a next character
extra = string.charCodeAt(counter++);
if ((value & 0xFC00) != 0xD800 || (extra & 0xFC00) != 0xDC00) {
error('ucs2decode');
if ((extra & 0xFC00) == 0xDC00) { // low surrogate
output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
} else {
output.push(value, extra);
}
value = ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000;
} else {
output.push(value);
}
output.push(value);
}
return output;
}
Expand All @@ -135,9 +136,6 @@
function ucs2encode(array) {
return map(array, function(value) {
var output = '';
if ((value & 0xF800) == 0xD800) {
error('ucs2encode');
}
if (value > 0xFFFF) {
value -= 0x10000;
output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
Expand Down Expand Up @@ -472,7 +470,7 @@
* @memberOf punycode
* @type String
*/
'version': '1.0.0',
'version': '1.1.1',
/**
* An object of methods to convert from JavaScript's internal character
* representation (UCS-2) to decimal Unicode code points, and back.
Expand Down
13 changes: 13 additions & 0 deletions test/simple/test-punycode.js
Original file line number Diff line number Diff line change
Expand Up @@ -179,4 +179,17 @@ for (var encoded in tests) {
}
}

// BMP code point
assert.equal(punycode.ucs2.encode([0x61]), 'a');
// supplementary code point (surrogate pair)
assert.equal(punycode.ucs2.encode([0x1D306]), '\uD834\uDF06');
// high surrogate
assert.equal(punycode.ucs2.encode([0xD800]), '\uD800');
// high surrogate followed by non-surrogates
assert.equal(punycode.ucs2.encode([0xD800, 0x61, 0x62]), '\uD800ab');
// low surrogate
assert.equal(punycode.ucs2.encode([0xDC00]), '\uDC00');
// low surrogate followed by non-surrogates
assert.equal(punycode.ucs2.encode([0xDC00, 0x61, 0x62]), '\uDC00ab');

assert.equal(errors, 0);