Fix the charCodeOf method in IdentityToUnicodeMap in order to prevent text selection from breaking
				
					
				
			After PR 6590, `font.spaceWidth` is now called in more cases than before (in `PartialEvaluator_getTextContent`), which exposed an underlying issue with `IdentityToUnicodeMap_charCodeOf` throwing an error. This breaks text-selection in some PDF files found in the wild, hence this patch replaces the `error` with an actual function instead (modelled after `IdentityCMap_charCodeOf`).
This commit is contained in:
		
							parent
							
								
									e2aca385c6
								
							
						
					
					
						commit
						4810b7b8fc
					
				| @ -15,7 +15,7 @@ | |||||||
| /* globals FONT_IDENTITY_MATRIX, FontType, warn, GlyphsUnicode, error, string32, | /* globals FONT_IDENTITY_MATRIX, FontType, warn, GlyphsUnicode, error, string32, | ||||||
|            readUint32, Stream, FontRendererFactory, shadow, stringToBytes, |            readUint32, Stream, FontRendererFactory, shadow, stringToBytes, | ||||||
|            bytesToString, info, assert, IdentityCMap, Name, CMapFactory, PDFJS, |            bytesToString, info, assert, IdentityCMap, Name, CMapFactory, PDFJS, | ||||||
|            isNum, Lexer, isArray, ISOAdobeCharset, ExpertCharset, |            isNum, Lexer, isArray, ISOAdobeCharset, ExpertCharset, isInt, | ||||||
|            ExpertSubsetCharset, Util, DingbatsGlyphsUnicode */ |            ExpertSubsetCharset, Util, DingbatsGlyphsUnicode */ | ||||||
| 
 | 
 | ||||||
| 'use strict'; | 'use strict'; | ||||||
| @ -2256,7 +2256,7 @@ var IdentityToUnicodeMap = (function IdentityToUnicodeMapClosure() { | |||||||
|     }, |     }, | ||||||
| 
 | 
 | ||||||
|     charCodeOf: function (v) { |     charCodeOf: function (v) { | ||||||
|       error('should not call .charCodeOf'); |       return (isInt(v) && v >= this.firstChar && v <= this.lastChar) ? v : -1; | ||||||
|     } |     } | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
| @ -4700,7 +4700,7 @@ var Font = (function FontClosure() { | |||||||
|           } |           } | ||||||
|         } |         } | ||||||
|         // ... via toUnicode map
 |         // ... via toUnicode map
 | ||||||
|         if (!charcode && 'toUnicode' in this) { |         if (!charcode && this.toUnicode) { | ||||||
|           charcode = this.toUnicode.charCodeOf(glyphUnicode); |           charcode = this.toUnicode.charCodeOf(glyphUnicode); | ||||||
|         } |         } | ||||||
|         // setting it to unicode if negative or undefined
 |         // setting it to unicode if negative or undefined
 | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								test/pdfs/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								test/pdfs/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -179,6 +179,7 @@ | |||||||
| !issue5549.pdf | !issue5549.pdf | ||||||
| !issue5475.pdf | !issue5475.pdf | ||||||
| !annotation-border-styles.pdf | !annotation-border-styles.pdf | ||||||
|  | !IdentityToUnicodeMap_charCodeOf.pdf | ||||||
| !issue5481.pdf | !issue5481.pdf | ||||||
| !issue5567.pdf | !issue5567.pdf | ||||||
| !issue5701.pdf | !issue5701.pdf | ||||||
|  | |||||||
							
								
								
									
										68
									
								
								test/pdfs/IdentityToUnicodeMap_charCodeOf.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								test/pdfs/IdentityToUnicodeMap_charCodeOf.pdf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,68 @@ | |||||||
|  | %PDF-1.7 | ||||||
|  | %âãÏÓ | ||||||
|  | 1 0 obj  | ||||||
|  | << | ||||||
|  | /Pages 2 0 R | ||||||
|  | /Type /Catalog | ||||||
|  | >> | ||||||
|  | endobj  | ||||||
|  | 2 0 obj  | ||||||
|  | << | ||||||
|  | /Kids [3 0 R] | ||||||
|  | /Count 1 | ||||||
|  | /Type /Pages | ||||||
|  | >> | ||||||
|  | endobj  | ||||||
|  | 3 0 obj  | ||||||
|  | << | ||||||
|  | /Parent 2 0 R | ||||||
|  | /MediaBox [0 0 200 50] | ||||||
|  | /Resources  | ||||||
|  | << | ||||||
|  | /Font  | ||||||
|  | << | ||||||
|  | /F1 4 0 R | ||||||
|  | >> | ||||||
|  | >> | ||||||
|  | /Contents 5 0 R | ||||||
|  | /Type /Page | ||||||
|  | >> | ||||||
|  | endobj  | ||||||
|  | 4 0 obj  | ||||||
|  | << | ||||||
|  | /BaseFont /Times-Roman | ||||||
|  | /Subtype /Type1 | ||||||
|  | /ToUnicode /Identity-H | ||||||
|  | /Encoding /WinAnsiEncoding | ||||||
|  | /Type /Font | ||||||
|  | >> | ||||||
|  | endobj  | ||||||
|  | 5 0 obj  | ||||||
|  | << | ||||||
|  | /Length 37 | ||||||
|  | >> | ||||||
|  | stream | ||||||
|  | BT | ||||||
|  | 10 20 TD | ||||||
|  | /F1 20 Tf | ||||||
|  | (ABCdef) Tj | ||||||
|  | ET | ||||||
|  | 
 | ||||||
|  | endstream  | ||||||
|  | endobj xref | ||||||
|  | 0 6 | ||||||
|  | 0000000000 65535 f  | ||||||
|  | 0000000015 00000 n  | ||||||
|  | 0000000066 00000 n  | ||||||
|  | 0000000125 00000 n  | ||||||
|  | 0000000254 00000 n  | ||||||
|  | 0000000378 00000 n  | ||||||
|  | trailer | ||||||
|  | 
 | ||||||
|  | << | ||||||
|  | /Root 1 0 R | ||||||
|  | /Size 6 | ||||||
|  | >> | ||||||
|  | startxref | ||||||
|  | 467 | ||||||
|  | %%EOF | ||||||
| @ -1453,6 +1453,13 @@ | |||||||
|       "lastPage": 1, |       "lastPage": 1, | ||||||
|       "type": "eq" |       "type": "eq" | ||||||
|     }, |     }, | ||||||
|  |     {  "id": "IdentityToUnicodeMap_charCodeOf", | ||||||
|  |        "file": "pdfs/IdentityToUnicodeMap_charCodeOf.pdf", | ||||||
|  |        "md5": "da030686418c5e37d889127a05dafb83", | ||||||
|  |        "rounds": 1, | ||||||
|  |        "link": false, | ||||||
|  |        "type": "text" | ||||||
|  |     }, | ||||||
|     {  "id": "bug894572", |     {  "id": "bug894572", | ||||||
|        "file": "pdfs/bug894572.pdf", |        "file": "pdfs/bug894572.pdf", | ||||||
|        "md5": "e54a6b0451939f685ed37e3d46e16158", |        "md5": "e54a6b0451939f685ed37e3d46e16158", | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user