| Index: core/fpdfapi/fpdf_page/fpdf_page_parser.cpp
|
| diff --git a/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp b/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp
|
| index 5dc8480423e328a35248951fe52bc17810979b22..5d5b75b60ec6a1ec70f13b2d972cc794171ed3dd 100644
|
| --- a/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp
|
| +++ b/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp
|
| @@ -6,7 +6,6 @@
|
|
|
| #include "core/fpdfapi/fpdf_page/pageint.h"
|
|
|
| -#include <algorithm>
|
| #include <memory>
|
| #include <utility>
|
| #include <vector>
|
| @@ -693,7 +692,7 @@ void CPDF_StreamContentParser::Handle_SetColorSpace_Fill() {
|
| return;
|
|
|
| m_pCurStates->m_ColorState.MakePrivateCopy();
|
| - m_pCurStates->m_ColorState->GetFillColor()->SetColorSpace(pCS);
|
| + m_pCurStates->m_ColorState->m_FillColor.SetColorSpace(pCS);
|
| }
|
|
|
| void CPDF_StreamContentParser::Handle_SetColorSpace_Stroke() {
|
| @@ -702,7 +701,7 @@ void CPDF_StreamContentParser::Handle_SetColorSpace_Stroke() {
|
| return;
|
|
|
| m_pCurStates->m_ColorState.MakePrivateCopy();
|
| - m_pCurStates->m_ColorState->GetStrokeColor()->SetColorSpace(pCS);
|
| + m_pCurStates->m_ColorState->m_StrokeColor.SetColorSpace(pCS);
|
| }
|
|
|
| void CPDF_StreamContentParser::Handle_SetDash() {
|
| @@ -846,16 +845,14 @@ void CPDF_StreamContentParser::Handle_EOFillPath() {
|
|
|
| void CPDF_StreamContentParser::Handle_SetGray_Fill() {
|
| FX_FLOAT value = GetNumber(0);
|
| - m_pCurStates->m_ColorState.MakePrivateCopy();
|
| - m_pCurStates->m_ColorState->SetFillColor(
|
| - CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY), &value, 1);
|
| + CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY);
|
| + m_pCurStates->m_ColorState.SetFillColor(pCS, &value, 1);
|
| }
|
|
|
| void CPDF_StreamContentParser::Handle_SetGray_Stroke() {
|
| FX_FLOAT value = GetNumber(0);
|
| - m_pCurStates->m_ColorState.MakePrivateCopy();
|
| - m_pCurStates->m_ColorState->SetStrokeColor(
|
| - CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY), &value, 1);
|
| + CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY);
|
| + m_pCurStates->m_ColorState.SetStrokeColor(pCS, &value, 1);
|
| }
|
|
|
| void CPDF_StreamContentParser::Handle_SetExtendGraphState() {
|
| @@ -903,12 +900,11 @@ void CPDF_StreamContentParser::Handle_SetCMYKColor_Fill() {
|
| return;
|
|
|
| FX_FLOAT values[4];
|
| - for (int i = 0; i < 4; i++)
|
| + for (int i = 0; i < 4; i++) {
|
| values[i] = GetNumber(3 - i);
|
| -
|
| - m_pCurStates->m_ColorState.MakePrivateCopy();
|
| - m_pCurStates->m_ColorState->SetFillColor(
|
| - CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK), values, 4);
|
| + }
|
| + CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
|
| + m_pCurStates->m_ColorState.SetFillColor(pCS, values, 4);
|
| }
|
|
|
| void CPDF_StreamContentParser::Handle_SetCMYKColor_Stroke() {
|
| @@ -916,12 +912,11 @@ void CPDF_StreamContentParser::Handle_SetCMYKColor_Stroke() {
|
| return;
|
|
|
| FX_FLOAT values[4];
|
| - for (int i = 0; i < 4; i++)
|
| + for (int i = 0; i < 4; i++) {
|
| values[i] = GetNumber(3 - i);
|
| -
|
| - m_pCurStates->m_ColorState.MakePrivateCopy();
|
| - m_pCurStates->m_ColorState->SetStrokeColor(
|
| - CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK), values, 4);
|
| + }
|
| + CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
|
| + m_pCurStates->m_ColorState.SetStrokeColor(pCS, values, 4);
|
| }
|
|
|
| void CPDF_StreamContentParser::Handle_LineTo() {
|
| @@ -986,12 +981,11 @@ void CPDF_StreamContentParser::Handle_SetRGBColor_Fill() {
|
| return;
|
|
|
| FX_FLOAT values[3];
|
| - for (int i = 0; i < 3; i++)
|
| + for (int i = 0; i < 3; i++) {
|
| values[i] = GetNumber(2 - i);
|
| -
|
| - m_pCurStates->m_ColorState.MakePrivateCopy();
|
| - m_pCurStates->m_ColorState->SetFillColor(
|
| - CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), values, 3);
|
| + }
|
| + CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB);
|
| + m_pCurStates->m_ColorState.SetFillColor(pCS, values, 3);
|
| }
|
|
|
| void CPDF_StreamContentParser::Handle_SetRGBColor_Stroke() {
|
| @@ -999,12 +993,11 @@ void CPDF_StreamContentParser::Handle_SetRGBColor_Stroke() {
|
| return;
|
|
|
| FX_FLOAT values[3];
|
| - for (int i = 0; i < 3; i++)
|
| + for (int i = 0; i < 3; i++) {
|
| values[i] = GetNumber(2 - i);
|
| -
|
| - m_pCurStates->m_ColorState.MakePrivateCopy();
|
| - m_pCurStates->m_ColorState->SetStrokeColor(
|
| - CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB), values, 3);
|
| + }
|
| + CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB);
|
| + m_pCurStates->m_ColorState.SetStrokeColor(pCS, values, 3);
|
| }
|
|
|
| void CPDF_StreamContentParser::Handle_SetRenderIntent() {}
|
| @@ -1020,22 +1013,26 @@ void CPDF_StreamContentParser::Handle_StrokePath() {
|
|
|
| void CPDF_StreamContentParser::Handle_SetColor_Fill() {
|
| FX_FLOAT values[4];
|
| - uint32_t nargs = std::min(m_ParamCount, 4u);
|
| - for (uint32_t i = 0; i < nargs; i++)
|
| + int nargs = m_ParamCount;
|
| + if (nargs > 4) {
|
| + nargs = 4;
|
| + }
|
| + for (int i = 0; i < nargs; i++) {
|
| values[i] = GetNumber(nargs - i - 1);
|
| -
|
| - m_pCurStates->m_ColorState.MakePrivateCopy();
|
| - m_pCurStates->m_ColorState->SetFillColor(nullptr, values, nargs);
|
| + }
|
| + m_pCurStates->m_ColorState.SetFillColor(nullptr, values, nargs);
|
| }
|
|
|
| void CPDF_StreamContentParser::Handle_SetColor_Stroke() {
|
| FX_FLOAT values[4];
|
| - uint32_t nargs = std::min(m_ParamCount, 4u);
|
| - for (uint32_t i = 0; i < nargs; i++)
|
| + int nargs = m_ParamCount;
|
| + if (nargs > 4) {
|
| + nargs = 4;
|
| + }
|
| + for (int i = 0; i < nargs; i++) {
|
| values[i] = GetNumber(nargs - i - 1);
|
| -
|
| - m_pCurStates->m_ColorState.MakePrivateCopy();
|
| - m_pCurStates->m_ColorState->SetStrokeColor(nullptr, values, nargs);
|
| + }
|
| + m_pCurStates->m_ColorState.SetStrokeColor(nullptr, values, nargs);
|
| }
|
|
|
| void CPDF_StreamContentParser::Handle_SetColorPS_Fill() {
|
| @@ -1057,12 +1054,10 @@ void CPDF_StreamContentParser::Handle_SetColorPS_Fill() {
|
| if (nvalues != nargs) {
|
| CPDF_Pattern* pPattern = FindPattern(GetString(0), false);
|
| if (pPattern) {
|
| - m_pCurStates->m_ColorState.MakePrivateCopy();
|
| - m_pCurStates->m_ColorState->SetFillPattern(pPattern, values, nvalues);
|
| + m_pCurStates->m_ColorState.SetFillPattern(pPattern, values, nvalues);
|
| }
|
| } else {
|
| - m_pCurStates->m_ColorState.MakePrivateCopy();
|
| - m_pCurStates->m_ColorState->SetFillColor(nullptr, values, nvalues);
|
| + m_pCurStates->m_ColorState.SetFillColor(nullptr, values, nvalues);
|
| }
|
| FX_Free(values);
|
| }
|
| @@ -1087,12 +1082,10 @@ void CPDF_StreamContentParser::Handle_SetColorPS_Stroke() {
|
| if (nvalues != nargs) {
|
| CPDF_Pattern* pPattern = FindPattern(GetString(0), false);
|
| if (pPattern) {
|
| - m_pCurStates->m_ColorState.MakePrivateCopy();
|
| - m_pCurStates->m_ColorState->SetStrokePattern(pPattern, values, nvalues);
|
| + m_pCurStates->m_ColorState.SetStrokePattern(pPattern, values, nvalues);
|
| }
|
| } else {
|
| - m_pCurStates->m_ColorState.MakePrivateCopy();
|
| - m_pCurStates->m_ColorState->SetStrokeColor(nullptr, values, nvalues);
|
| + m_pCurStates->m_ColorState.SetStrokeColor(nullptr, values, nvalues);
|
| }
|
| FX_Free(values);
|
| }
|
|
|