Add restrictions to alternate color spaces.

- ICC color spaces cannot have a Pattern color space as Alternate
- Separation and DeviceN color spaces cannot have a special color space
as Alternate. Special color spaces are {Separation, DeviceN, Indexed and
Pattern}.

Bug: chromium:794492
Change-Id: Ia2199382c759d8d1d13c605c22d6495e935265ad
Reviewed-on: https://pdfium-review.googlesource.com/21310
Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
Reviewed-by: dsinclair <dsinclair@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp
index c09562c..89d5285 100644
--- a/core/fpdfapi/page/cpdf_colorspace.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace.cpp
@@ -947,6 +947,9 @@
   if (!pAlterCS)
     return false;
 
+  if (pAlterCS->GetFamily() == PDFCS_PATTERN)
+    return false;
+
   if (pAlterCS->CountComponents() != m_nComponents)
     return false;
 
@@ -1102,6 +1105,9 @@
   if (!m_pAltCS)
     return false;
 
+  if (m_pAltCS->IsSpecial())
+    return false;
+
   CPDF_Object* pFuncObj = pArray->GetDirectObjectAt(3);
   if (pFuncObj && !pFuncObj->IsName())
     m_pFunc = CPDF_Function::Load(pFuncObj);
@@ -1181,6 +1187,9 @@
   if (!m_pAltCS || !m_pFunc)
     return false;
 
+  if (m_pAltCS->IsSpecial())
+    return false;
+
   return m_pFunc->CountOutputs() >= m_pAltCS->CountComponents();
 }
 
diff --git a/core/fpdfapi/page/cpdf_colorspace.h b/core/fpdfapi/page/cpdf_colorspace.h
index ff10dfc..9bd7c8d 100644
--- a/core/fpdfapi/page/cpdf_colorspace.h
+++ b/core/fpdfapi/page/cpdf_colorspace.h
@@ -57,6 +57,11 @@
   void GetDefaultColor(float* buf) const;
   uint32_t CountComponents() const;
   int GetFamily() const { return m_Family; }
+  bool IsSpecial() const {
+    return GetFamily() == PDFCS_SEPARATION || GetFamily() == PDFCS_DEVICEN ||
+           GetFamily() == PDFCS_INDEXED || GetFamily() == PDFCS_PATTERN;
+  }
+
   virtual void GetDefaultValue(int iComponent,
                                float* value,
                                float* min,