| 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 "../../include/fxcrt/fx_basic.h" | 7 #include "../../include/fxcrt/fx_basic.h" |
| 8 #include "../../../third_party/numerics/safe_math.h" | 8 #include "../../../third_party/base/numerics/safe_math.h" |
| 9 | 9 |
| 10 CFX_BasicArray::CFX_BasicArray(int unit_size) | 10 CFX_BasicArray::CFX_BasicArray(int unit_size) |
| 11 : m_pData(NULL) | 11 : m_pData(NULL) |
| 12 , m_nSize(0) | 12 , m_nSize(0) |
| 13 , m_nMaxSize(0) | 13 , m_nMaxSize(0) |
| 14 { | 14 { |
| 15 if (unit_size < 0 || unit_size > (1 << 28)) { | 15 if (unit_size < 0 || unit_size > (1 << 28)) { |
| 16 m_nUnitSize = 4; | 16 m_nUnitSize = 4; |
| 17 } else { | 17 } else { |
| 18 m_nUnitSize = unit_size; | 18 m_nUnitSize = unit_size; |
| 19 } | 19 } |
| 20 } | 20 } |
| 21 CFX_BasicArray::~CFX_BasicArray() | 21 CFX_BasicArray::~CFX_BasicArray() |
| 22 { | 22 { |
| 23 FX_Free(m_pData); | 23 FX_Free(m_pData); |
| 24 } | 24 } |
| 25 FX_BOOL CFX_BasicArray::SetSize(int nNewSize) | 25 FX_BOOL CFX_BasicArray::SetSize(int nNewSize) |
| 26 { | 26 { |
| 27 if (nNewSize <= 0) { | 27 if (nNewSize <= 0) { |
| 28 FX_Free(m_pData); | 28 FX_Free(m_pData); |
| 29 m_pData = NULL; | 29 m_pData = NULL; |
| 30 m_nSize = m_nMaxSize = 0; | 30 m_nSize = m_nMaxSize = 0; |
| 31 return 0 == nNewSize; | 31 return 0 == nNewSize; |
| 32 } | 32 } |
| 33 | 33 |
| 34 if (m_pData == NULL) { | 34 if (m_pData == NULL) { |
| 35 base::CheckedNumeric<int> totalSize = nNewSize; | 35 pdfium::base::CheckedNumeric<int> totalSize = nNewSize; |
| 36 totalSize *= m_nUnitSize; | 36 totalSize *= m_nUnitSize; |
| 37 if (!totalSize.IsValid()) { | 37 if (!totalSize.IsValid()) { |
| 38 m_nSize = m_nMaxSize = 0; | 38 m_nSize = m_nMaxSize = 0; |
| 39 return FALSE; | 39 return FALSE; |
| 40 } | 40 } |
| 41 m_pData = FX_Alloc(FX_BYTE, totalSize.ValueOrDie()); | 41 m_pData = FX_Alloc(FX_BYTE, totalSize.ValueOrDie()); |
| 42 if (!m_pData) { | 42 if (!m_pData) { |
| 43 m_nSize = m_nMaxSize = 0; | 43 m_nSize = m_nMaxSize = 0; |
| 44 return FALSE; | 44 return FALSE; |
| 45 } | 45 } |
| 46 m_nSize = m_nMaxSize = nNewSize; | 46 m_nSize = m_nMaxSize = nNewSize; |
| 47 } else if (nNewSize <= m_nMaxSize) { | 47 } else if (nNewSize <= m_nMaxSize) { |
| 48 if (nNewSize > m_nSize) { | 48 if (nNewSize > m_nSize) { |
| 49 FXSYS_memset32(m_pData + m_nSize * m_nUnitSize, 0, (nNewSize - m_nSi
ze) * m_nUnitSize); | 49 FXSYS_memset32(m_pData + m_nSize * m_nUnitSize, 0, (nNewSize - m_nSi
ze) * m_nUnitSize); |
| 50 } | 50 } |
| 51 m_nSize = nNewSize; | 51 m_nSize = nNewSize; |
| 52 } else { | 52 } else { |
| 53 int nNewMax = nNewSize < m_nMaxSize ? m_nMaxSize : nNewSize; | 53 int nNewMax = nNewSize < m_nMaxSize ? m_nMaxSize : nNewSize; |
| 54 base::CheckedNumeric<int> totalSize = nNewMax; | 54 pdfium::base::CheckedNumeric<int> totalSize = nNewMax; |
| 55 totalSize *= m_nUnitSize; | 55 totalSize *= m_nUnitSize; |
| 56 if (!totalSize.IsValid() || nNewMax < m_nSize) { | 56 if (!totalSize.IsValid() || nNewMax < m_nSize) { |
| 57 return FALSE; | 57 return FALSE; |
| 58 } | 58 } |
| 59 FX_LPBYTE pNewData = FX_Realloc(FX_BYTE, m_pData, totalSize.ValueOrDie()
); | 59 FX_LPBYTE pNewData = FX_Realloc(FX_BYTE, m_pData, totalSize.ValueOrDie()
); |
| 60 if (pNewData == NULL) { | 60 if (pNewData == NULL) { |
| 61 return FALSE; | 61 return FALSE; |
| 62 } | 62 } |
| 63 FXSYS_memset32(pNewData + m_nSize * m_nUnitSize, 0, (nNewMax - m_nSize)
* m_nUnitSize); | 63 FXSYS_memset32(pNewData + m_nSize * m_nUnitSize, 0, (nNewMax - m_nSize)
* m_nUnitSize); |
| 64 m_pData = pNewData; | 64 m_pData = pNewData; |
| 65 m_nSize = nNewSize; | 65 m_nSize = nNewSize; |
| 66 m_nMaxSize = nNewMax; | 66 m_nMaxSize = nNewMax; |
| 67 } | 67 } |
| 68 return TRUE; | 68 return TRUE; |
| 69 } | 69 } |
| 70 FX_BOOL CFX_BasicArray::Append(const CFX_BasicArray& src) | 70 FX_BOOL CFX_BasicArray::Append(const CFX_BasicArray& src) |
| 71 { | 71 { |
| 72 int nOldSize = m_nSize; | 72 int nOldSize = m_nSize; |
| 73 base::CheckedNumeric<int> newSize = m_nSize; | 73 pdfium::base::CheckedNumeric<int> newSize = m_nSize; |
| 74 newSize += src.m_nSize; | 74 newSize += src.m_nSize; |
| 75 if (m_nUnitSize != src.m_nUnitSize || !newSize.IsValid() || !SetSize(newSize
.ValueOrDie())) { | 75 if (m_nUnitSize != src.m_nUnitSize || !newSize.IsValid() || !SetSize(newSize
.ValueOrDie())) { |
| 76 return FALSE; | 76 return FALSE; |
| 77 } | 77 } |
| 78 | 78 |
| 79 FXSYS_memcpy32(m_pData + nOldSize * m_nUnitSize, src.m_pData, src.m_nSize *
m_nUnitSize); | 79 FXSYS_memcpy32(m_pData + nOldSize * m_nUnitSize, src.m_pData, src.m_nSize *
m_nUnitSize); |
| 80 return TRUE; | 80 return TRUE; |
| 81 } | 81 } |
| 82 FX_BOOL CFX_BasicArray::Copy(const CFX_BasicArray& src) | 82 FX_BOOL CFX_BasicArray::Copy(const CFX_BasicArray& src) |
| 83 { | 83 { |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 FX_Free(pIndex[i % m_IndexSize]); | 348 FX_Free(pIndex[i % m_IndexSize]); |
| 349 pIndex[i % m_IndexSize] = NULL; | 349 pIndex[i % m_IndexSize] = NULL; |
| 350 } | 350 } |
| 351 } else { | 351 } else { |
| 352 FX_Free(m_pIndex); | 352 FX_Free(m_pIndex); |
| 353 m_pIndex = NULL; | 353 m_pIndex = NULL; |
| 354 } | 354 } |
| 355 } | 355 } |
| 356 m_DataSize -= count; | 356 m_DataSize -= count; |
| 357 } | 357 } |
| OLD | NEW |