| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "core/fpdfapi/fpdf_page/pageint.h" | 7 #include "core/fpdfapi/fpdf_page/pageint.h" |
| 8 | 8 |
| 9 #include <limits.h> | 9 #include <limits.h> |
| 10 | 10 |
| (...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 CPDF_Array* pEncode = pDict->GetArrayBy("Encode"); | 534 CPDF_Array* pEncode = pDict->GetArrayBy("Encode"); |
| 535 CPDF_Array* pDecode = pDict->GetArrayBy("Decode"); | 535 CPDF_Array* pDecode = pDict->GetArrayBy("Decode"); |
| 536 m_nBitsPerSample = pDict->GetIntegerBy("BitsPerSample"); | 536 m_nBitsPerSample = pDict->GetIntegerBy("BitsPerSample"); |
| 537 if (m_nBitsPerSample > 32) { | 537 if (m_nBitsPerSample > 32) { |
| 538 return FALSE; | 538 return FALSE; |
| 539 } | 539 } |
| 540 m_SampleMax = 0xffffffff >> (32 - m_nBitsPerSample); | 540 m_SampleMax = 0xffffffff >> (32 - m_nBitsPerSample); |
| 541 m_pSampleStream = new CPDF_StreamAcc; | 541 m_pSampleStream = new CPDF_StreamAcc; |
| 542 m_pSampleStream->LoadAllData(pStream, FALSE); | 542 m_pSampleStream->LoadAllData(pStream, FALSE); |
| 543 m_pEncodeInfo = FX_Alloc(SampleEncodeInfo, m_nInputs); | 543 m_pEncodeInfo = FX_Alloc(SampleEncodeInfo, m_nInputs); |
| 544 FX_SAFE_DWORD nTotalSampleBits = 1; | 544 FX_SAFE_UINT32 nTotalSampleBits = 1; |
| 545 for (uint32_t i = 0; i < m_nInputs; i++) { | 545 for (uint32_t i = 0; i < m_nInputs; i++) { |
| 546 m_pEncodeInfo[i].sizes = pSize ? pSize->GetIntegerAt(i) : 0; | 546 m_pEncodeInfo[i].sizes = pSize ? pSize->GetIntegerAt(i) : 0; |
| 547 if (!pSize && i == 0) | 547 if (!pSize && i == 0) |
| 548 m_pEncodeInfo[i].sizes = pDict->GetIntegerBy("Size"); | 548 m_pEncodeInfo[i].sizes = pDict->GetIntegerBy("Size"); |
| 549 nTotalSampleBits *= m_pEncodeInfo[i].sizes; | 549 nTotalSampleBits *= m_pEncodeInfo[i].sizes; |
| 550 if (pEncode) { | 550 if (pEncode) { |
| 551 m_pEncodeInfo[i].encode_min = pEncode->GetFloatAt(i * 2); | 551 m_pEncodeInfo[i].encode_min = pEncode->GetFloatAt(i * 2); |
| 552 m_pEncodeInfo[i].encode_max = pEncode->GetFloatAt(i * 2 + 1); | 552 m_pEncodeInfo[i].encode_max = pEncode->GetFloatAt(i * 2 + 1); |
| 553 } else { | 553 } else { |
| 554 m_pEncodeInfo[i].encode_min = 0; | 554 m_pEncodeInfo[i].encode_min = 0; |
| 555 if (m_pEncodeInfo[i].sizes == 1) | 555 if (m_pEncodeInfo[i].sizes == 1) |
| 556 m_pEncodeInfo[i].encode_max = 1; | 556 m_pEncodeInfo[i].encode_max = 1; |
| 557 else | 557 else |
| 558 m_pEncodeInfo[i].encode_max = (FX_FLOAT)m_pEncodeInfo[i].sizes - 1; | 558 m_pEncodeInfo[i].encode_max = (FX_FLOAT)m_pEncodeInfo[i].sizes - 1; |
| 559 } | 559 } |
| 560 } | 560 } |
| 561 nTotalSampleBits *= m_nBitsPerSample; | 561 nTotalSampleBits *= m_nBitsPerSample; |
| 562 nTotalSampleBits *= m_nOutputs; | 562 nTotalSampleBits *= m_nOutputs; |
| 563 FX_SAFE_DWORD nTotalSampleBytes = nTotalSampleBits; | 563 FX_SAFE_UINT32 nTotalSampleBytes = nTotalSampleBits; |
| 564 nTotalSampleBytes += 7; | 564 nTotalSampleBytes += 7; |
| 565 nTotalSampleBytes /= 8; | 565 nTotalSampleBytes /= 8; |
| 566 if (!nTotalSampleBytes.IsValid() || nTotalSampleBytes.ValueOrDie() == 0 || | 566 if (!nTotalSampleBytes.IsValid() || nTotalSampleBytes.ValueOrDie() == 0 || |
| 567 nTotalSampleBytes.ValueOrDie() > m_pSampleStream->GetSize()) { | 567 nTotalSampleBytes.ValueOrDie() > m_pSampleStream->GetSize()) { |
| 568 return FALSE; | 568 return FALSE; |
| 569 } | 569 } |
| 570 m_pDecodeInfo = FX_Alloc(SampleDecodeInfo, m_nOutputs); | 570 m_pDecodeInfo = FX_Alloc(SampleDecodeInfo, m_nOutputs); |
| 571 for (uint32_t i = 0; i < m_nOutputs; i++) { | 571 for (uint32_t i = 0; i < m_nOutputs; i++) { |
| 572 if (pDecode) { | 572 if (pDecode) { |
| 573 m_pDecodeInfo[i].decode_min = pDecode->GetFloatAt(2 * i); | 573 m_pDecodeInfo[i].decode_min = pDecode->GetFloatAt(2 * i); |
| (...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 905 if (m_pRanges) { | 905 if (m_pRanges) { |
| 906 for (uint32_t i = 0; i < m_nOutputs; i++) { | 906 for (uint32_t i = 0; i < m_nOutputs; i++) { |
| 907 if (results[i] < m_pRanges[i * 2]) | 907 if (results[i] < m_pRanges[i * 2]) |
| 908 results[i] = m_pRanges[i * 2]; | 908 results[i] = m_pRanges[i * 2]; |
| 909 else if (results[i] > m_pRanges[i * 2 + 1]) | 909 else if (results[i] > m_pRanges[i * 2 + 1]) |
| 910 results[i] = m_pRanges[i * 2 + 1]; | 910 results[i] = m_pRanges[i * 2 + 1]; |
| 911 } | 911 } |
| 912 } | 912 } |
| 913 return TRUE; | 913 return TRUE; |
| 914 } | 914 } |
| OLD | NEW |