Browse Source

Ensure that we fetch all indirect objects (i.e. |Ref|s) in ColorSpace_parseToIR

Recently I've landed a number patches which fixed issues with ColorSpaces. In most of these cases the cause of the failures were, either partially or entirely, related to the fact that we didn't resolve indirect objects (i.e. the code was missing `xref.fetchIfRef(...)`).

The purpose of this patch is to fix the few remaining cases where indirect objects *could* potentially cause failures.
Given that we have seen how this causes failures in practice, I thus think that it makes sense to try and avoid further issues, instead of waiting for users to file even more bugs for this part of the code-base.
Jonas Jenwald 10 years ago
parent
commit
bc865b9e2d
  1. 6
      src/core/colorspace.js

6
src/core/colorspace.js

@ -304,7 +304,7 @@ var ColorSpace = (function ColorSpaceClosure() { @@ -304,7 +304,7 @@ var ColorSpace = (function ColorSpaceClosure() {
}
break;
case 'Pattern':
var basePatternCS = xref.fetchIfRef(cs[1]) || null;
var basePatternCS = cs[1] || null;
if (basePatternCS) {
basePatternCS = ColorSpace.parseToIR(basePatternCS, xref, res);
}
@ -312,7 +312,7 @@ var ColorSpace = (function ColorSpaceClosure() { @@ -312,7 +312,7 @@ var ColorSpace = (function ColorSpaceClosure() {
case 'Indexed':
case 'I':
var baseIndexedCS = ColorSpace.parseToIR(cs[1], xref, res);
var hiVal = cs[2] + 1;
var hiVal = xref.fetchIfRef(cs[2]) + 1;
var lookup = xref.fetchIfRef(cs[3]);
if (isStream(lookup)) {
lookup = lookup.getBytes();
@ -320,7 +320,7 @@ var ColorSpace = (function ColorSpaceClosure() { @@ -320,7 +320,7 @@ var ColorSpace = (function ColorSpaceClosure() {
return ['IndexedCS', baseIndexedCS, hiVal, lookup];
case 'Separation':
case 'DeviceN':
var name = cs[1];
var name = xref.fetchIfRef(cs[1]);
numComps = 1;
if (isName(name)) {
numComps = 1;

Loading…
Cancel
Save