| 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 <limits.h> | 7 #include <limits.h> |
| 8 #include "../../../include/fxcrt/fx_basic.h" | 8 #include "../../../include/fxcrt/fx_basic.h" |
| 9 #include "../../../include/fxcrt/fx_coordinates.h" | 9 #include "../../../include/fxcrt/fx_coordinates.h" |
| 10 #include "../../../src/fxcrt/fx_safe_types.h" | 10 #include "../../../src/fxcrt/fx_safe_types.h" |
| (...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 760 pDst[3] = (FX_BYTE)wTmp; | 760 pDst[3] = (FX_BYTE)wTmp; |
| 761 } | 761 } |
| 762 pLineSrc += m_nStride; | 762 pLineSrc += m_nStride; |
| 763 pLineDst += pImage->m_nStride; | 763 pLineDst += pImage->m_nStride; |
| 764 } | 764 } |
| 765 } | 765 } |
| 766 return pImage; | 766 return pImage; |
| 767 } | 767 } |
| 768 void CJBig2_Image::expand(FX_INT32 h, FX_BOOL v) | 768 void CJBig2_Image::expand(FX_INT32 h, FX_BOOL v) |
| 769 { | 769 { |
| 770 if (!m_pData) { | 770 if (!m_pData || h <= m_nHeight) { |
| 771 return; | 771 return; |
| 772 } | 772 } |
| 773 FX_SAFE_DWORD safeMemSize = pdfium::base::checked_cast<FX_DWORD>(h); | 773 FX_DWORD dwH = pdfium::base::checked_cast<FX_DWORD>(h); |
| 774 safeMemSize *= pdfium::base::checked_cast<FX_DWORD>(m_nStride); | 774 FX_DWORD dwStride = pdfium::base::checked_cast<FX_DWORD>(m_nStride); |
| 775 FX_DWORD dwHeight = pdfium::base::checked_cast<FX_DWORD>(m_nHeight); |
| 776 FX_SAFE_DWORD safeMemSize = dwH; |
| 777 safeMemSize *= dwStride; |
| 775 if (!safeMemSize.IsValid()) { | 778 if (!safeMemSize.IsValid()) { |
| 776 return; | 779 return; |
| 777 } | 780 } |
| 781 //The guaranteed reallocated memory is to be < 4GB (unsigned int). |
| 778 m_pData = (FX_BYTE*)m_pModule->JBig2_Realloc(m_pData, safeMemSize.ValueOrDie
()); | 782 m_pData = (FX_BYTE*)m_pModule->JBig2_Realloc(m_pData, safeMemSize.ValueOrDie
()); |
| 779 if(h > m_nHeight) { | 783 //The result of dwHeight * dwStride doesn't overflow after the |
| 780 JBIG2_memset(m_pData + m_nHeight * m_nStride, v ? 0xff : 0, (h - m_nHeig
ht)*m_nStride); | 784 //checking of safeMemSize. |
| 781 } | 785 //The same as the result of (dwH - dwHeight) * dwStride) because |
| 786 //dwH - dwHeight is always less than dwH(h) which is checked in |
| 787 //the calculation of dwH * dwStride. |
| 788 JBIG2_memset(m_pData + dwHeight * dwStride, v ? 0xff : 0, (dwH - dwHeight) *
dwStride); |
| 782 m_nHeight = h; | 789 m_nHeight = h; |
| 783 } | 790 } |
| 784 FX_BOOL CJBig2_Image::composeTo_opt2(CJBig2_Image *pDst, FX_INT32 x, FX_INT32 y,
JBig2ComposeOp op) | 791 FX_BOOL CJBig2_Image::composeTo_opt2(CJBig2_Image *pDst, FX_INT32 x, FX_INT32 y,
JBig2ComposeOp op) |
| 785 { | 792 { |
| 786 FX_INT32 xs0 = 0, ys0 = 0, xs1 = 0, ys1 = 0, xd0 = 0, yd0 =
0, xd1 = 0, | 793 FX_INT32 xs0 = 0, ys0 = 0, xs1 = 0, ys1 = 0, xd0 = 0, yd0 =
0, xd1 = 0, |
| 787 yd1 = 0, xx = 0, yy = 0, w = 0, h = 0, middleDwords =
0, lineLeft = 0; | 794 yd1 = 0, xx = 0, yy = 0, w = 0, h = 0, middleDwords =
0, lineLeft = 0; |
| 788 | 795 |
| 789 FX_DWORD s1 = 0, d1 = 0, d2 = 0, shift = 0, shift1 = 0, shift2 =
0, | 796 FX_DWORD s1 = 0, d1 = 0, d2 = 0, shift = 0, shift1 = 0, shift2 =
0, |
| 790 tmp = 0, tmp1 = 0, tmp2 = 0, maskL = 0, maskR = 0, maskM =
0; | 797 tmp = 0, tmp1 = 0, tmp2 = 0, maskL = 0, maskR = 0, maskM =
0; |
| 791 | 798 |
| (...skipping 822 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1614 dp[2] = (FX_BYTE)(tmp >> 8); | 1621 dp[2] = (FX_BYTE)(tmp >> 8); |
| 1615 dp[3] = (FX_BYTE)tmp; | 1622 dp[3] = (FX_BYTE)tmp; |
| 1616 } | 1623 } |
| 1617 lineSrc += m_nStride; | 1624 lineSrc += m_nStride; |
| 1618 lineDst += pDst->m_nStride; | 1625 lineDst += pDst->m_nStride; |
| 1619 } | 1626 } |
| 1620 } | 1627 } |
| 1621 } | 1628 } |
| 1622 return 1; | 1629 return 1; |
| 1623 } | 1630 } |
| OLD | NEW |