diff --git a/src/core/core_utils.js b/src/core/core_utils.js index 932f755767f834..939302367ff221 100644 --- a/src/core/core_utils.js +++ b/src/core/core_utils.js @@ -205,7 +205,23 @@ function escapePDFName(str) { let start = 0; for (let i = 0, ii = str.length; i < ii; i++) { const char = str.charCodeAt(i); - if (char < 0x21 || char > 0x7e || char === 0x23) { + // whites or delimiter aren't regular chars + // so escape them + if ( + char < 0x21 || + char > 0x7e || + char === 0x23 /* # */ || + char === 0x28 /* ( */ || + char === 0x29 /* ) */ || + char === 0x3c /* < */ || + char === 0x3e /* > */ || + char === 0x5b /* [ */ || + char === 0x5d /* ] */ || + char === 0x7b /* { */ || + char === 0x7d /* } */ || + char === 0x2f /* / */ || + char === 0x25 /* % */ + ) { if (start < i) { buffer.push(str.substring(start, i)); } diff --git a/test/unit/core_utils_spec.js b/test/unit/core_utils_spec.js index 74c99558d7e2d1..a9d813cb393c8e 100644 --- a/test/unit/core_utils_spec.js +++ b/test/unit/core_utils_spec.js @@ -237,6 +237,9 @@ describe("core_utils", function () { "#fehe#fell#ffo#ff" ); expect(escapePDFName("#h#e#l#l#o")).toEqual("#23h#23e#23l#23l#23o"); + expect(escapePDFName("#()<>[]{}/%")).toEqual( + "#23#28#29#3c#3e#5b#5d#7b#7d#2f#25" + ); }); }); });