Index: core/src/fxcrt/extension.h |
diff --git a/core/src/fxcrt/extension.h b/core/src/fxcrt/extension.h |
index b8dce7c97d9a5df829dae6fd639a090db9e40972..ad26e0623fb84502fd86673afd5e46c83df097fe 100644 |
--- a/core/src/fxcrt/extension.h |
+++ b/core/src/fxcrt/extension.h |
@@ -7,8 +7,6 @@ |
#ifndef _FXCRT_EXTENSION_IMP_ |
#define _FXCRT_EXTENSION_IMP_ |
-#include "../../../third_party/numerics/safe_math.h" |
- |
class IFXCRT_FileAccess |
{ |
public: |
@@ -68,9 +66,13 @@ public: |
} |
virtual FX_BOOL SetRange(FX_FILESIZE offset, FX_FILESIZE size) |
{ |
- if (offset < 0 || offset + size > m_pFile->GetSize()) { |
+ FX_SAFE_FILESIZE pos = size; |
Tom Sepez
2014/07/30 18:50:24
nit: I would write this as
if (offset < 0 || size
|
+ pos += offset; |
+ |
+ if (!pos.IsValid() || offset < 0 || size < 0 || pos.ValueOrDie() >= m_pFile->GetSize()) { |
return FALSE; |
} |
+ |
m_nOffset = offset, m_nSize = size; |
m_bUseRange = TRUE; |
m_pFile->SetPosition(m_nOffset); |
@@ -82,13 +84,15 @@ public: |
} |
virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) |
{ |
+ FX_SAFE_FILESIZE pos = offset; |
+ |
if (m_bUseRange) { |
- if (offset + size > (size_t)GetSize()) { |
+ pos += m_nOffset; |
+ if (!pos.IsValid() || pos.ValueOrDie() >= (size_t)GetSize()) { |
return FALSE; |
} |
- offset += m_nOffset; |
} |
- return (FX_BOOL)m_pFile->ReadPos(buffer, size, offset); |
+ return (FX_BOOL)m_pFile->ReadPos(buffer, size, pos.ValueOrDie()); |
} |
virtual size_t ReadBlock(void* buffer, size_t size) |
{ |
@@ -184,10 +188,9 @@ public: |
} |
virtual FX_BOOL SetRange(FX_FILESIZE offset, FX_FILESIZE size) |
{ |
- base::CheckedNumeric<FX_FILESIZE> range = size; |
- range += size; |
- |
- if (!range.IsValid() || offset <= 0 || size <= 0 || range.ValueOrDie() > m_nCurSize) { |
+ FX_SAFE_FILESIZE range = size; |
+ range += offset; |
+ if (!range.IsValid() || offset <= 0 || size <= 0 || range.ValueOrDie() >= m_nCurSize) { |
Tom Sepez
2014/07/30 18:50:24
nit: again, I'd make the <= 0 checks first before
|
return FALSE; |
} |
@@ -206,7 +209,7 @@ public: |
return FALSE; |
} |
- base::CheckedNumeric<FX_FILESIZE> safeOffset = offset; |
+ FX_SAFE_FILESIZE safeOffset = offset; |
if (m_bUseRange) { |
safeOffset += m_nOffset; |
} |
@@ -217,9 +220,9 @@ public: |
offset = safeOffset.ValueOrDie(); |
- base::CheckedNumeric<size_t> newPos = size; |
+ FX_SAFE_SIZET newPos = size; |
newPos += offset; |
- if (!newPos.IsValid() || newPos.ValueOrDefault(0) == 0 || newPos.ValueOrDie() > m_nCurSize) { |
+ if (!newPos.IsValid() || newPos.ValueOrDefault(0) == 0 || newPos.ValueOrDie() >= m_nCurSize) { |
return FALSE; |
} |
@@ -269,7 +272,7 @@ public: |
offset += (FX_FILESIZE)m_nOffset; |
} |
if (m_dwFlags & FX_MEMSTREAM_Consecutive) { |
- base::CheckedNumeric<size_t> newPos = size; |
+ FX_SAFE_SIZET newPos = size; |
newPos += offset; |
if (!newPos.IsValid()) |
return FALSE; |
@@ -295,7 +298,7 @@ public: |
return TRUE; |
} |
- base::CheckedNumeric<size_t> newPos = size; |
+ FX_SAFE_SIZET newPos = size; |
newPos += offset; |
if (!newPos.IsValid()) |
Tom Sepez
2014/07/30 18:50:24
nit: braces here around single-line if to match th
|
return FALSE; |