Use the Alternate entry, if it exists, in ICCBased Colour Space dictionaries (issue 5836, issue 5939, issue 6055)
Fixes 5836. Fixes 5939. Fixes 6055.
This commit is contained in:
		
							parent
							
								
									bf20334bea
								
							
						
					
					
						commit
						bc5e43b45c
					
				| @ -262,7 +262,7 @@ var ColorSpace = (function ColorSpaceClosure() { | |||||||
|     } else if (isArray(cs)) { |     } else if (isArray(cs)) { | ||||||
|       mode = xref.fetchIfRef(cs[0]).name; |       mode = xref.fetchIfRef(cs[0]).name; | ||||||
|       this.mode = mode; |       this.mode = mode; | ||||||
|       var numComps, params; |       var numComps, params, alt; | ||||||
| 
 | 
 | ||||||
|       switch (mode) { |       switch (mode) { | ||||||
|         case 'DeviceGray': |         case 'DeviceGray': | ||||||
| @ -284,6 +284,17 @@ var ColorSpace = (function ColorSpaceClosure() { | |||||||
|           var stream = xref.fetchIfRef(cs[1]); |           var stream = xref.fetchIfRef(cs[1]); | ||||||
|           var dict = stream.dict; |           var dict = stream.dict; | ||||||
|           numComps = dict.get('N'); |           numComps = dict.get('N'); | ||||||
|  |           alt = dict.get('Alternate'); | ||||||
|  |           if (alt) { | ||||||
|  |             var altIR = ColorSpace.parseToIR(alt, xref, res); | ||||||
|  |             // Parse the /Alternate CS to ensure that the number of components
 | ||||||
|  |             // are correct, and also (indirectly) that it is not a PatternCS.
 | ||||||
|  |             var altCS = ColorSpace.fromIR(altIR); | ||||||
|  |             if (altCS.numComps === numComps) { | ||||||
|  |               return altIR; | ||||||
|  |             } | ||||||
|  |             warn('ICCBased color space: Ignoring incorrect /Alternate entry.'); | ||||||
|  |           } | ||||||
|           if (numComps === 1) { |           if (numComps === 1) { | ||||||
|             return 'DeviceGrayCS'; |             return 'DeviceGrayCS'; | ||||||
|           } else if (numComps === 3) { |           } else if (numComps === 3) { | ||||||
| @ -316,11 +327,11 @@ var ColorSpace = (function ColorSpaceClosure() { | |||||||
|           } else if (isArray(name)) { |           } else if (isArray(name)) { | ||||||
|             numComps = name.length; |             numComps = name.length; | ||||||
|           } |           } | ||||||
|           var alt = ColorSpace.parseToIR(cs[2], xref, res); |           alt = ColorSpace.parseToIR(cs[2], xref, res); | ||||||
|           var tintFnIR = PDFFunction.getIR(xref, xref.fetchIfRef(cs[3])); |           var tintFnIR = PDFFunction.getIR(xref, xref.fetchIfRef(cs[3])); | ||||||
|           return ['AlternateCS', numComps, alt, tintFnIR]; |           return ['AlternateCS', numComps, alt, tintFnIR]; | ||||||
|         case 'Lab': |         case 'Lab': | ||||||
|           params = cs[1].getAll(); |           params = xref.fetchIfRef(cs[1]).getAll(); | ||||||
|           return ['LabCS', params]; |           return ['LabCS', params]; | ||||||
|         default: |         default: | ||||||
|           error('unimplemented color space object "' + mode + '"'); |           error('unimplemented color space object "' + mode + '"'); | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								test/pdfs/issue5939.pdf.link
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								test/pdfs/issue5939.pdf.link
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | http://web.archive.org/web/20150613184455/https://www.usenix.org/system/files/login/articles/login_apr15_02_grosvenor_041315.pdf | ||||||
| @ -728,6 +728,15 @@ | |||||||
|        "rounds": 1, |        "rounds": 1, | ||||||
|        "type": "eq" |        "type": "eq" | ||||||
|     }, |     }, | ||||||
|  |     {  "id": "issue5939", | ||||||
|  |        "file": "pdfs/issue5939.pdf", | ||||||
|  |        "md5": "43c61e06ad407c158763f0860c99bb04", | ||||||
|  |        "rounds": 1, | ||||||
|  |        "link": true, | ||||||
|  |        "firstPage": 1, | ||||||
|  |        "lastPage": 1, | ||||||
|  |        "type": "eq" | ||||||
|  |     }, | ||||||
|     {  "id": "cmykjpeg", |     {  "id": "cmykjpeg", | ||||||
|        "file": "pdfs/cmykjpeg.pdf", |        "file": "pdfs/cmykjpeg.pdf", | ||||||
|        "md5": "85d162b48ce98503a382d96f574f70a2", |        "md5": "85d162b48ce98503a382d96f574f70a2", | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user