Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Side by Side Diff: core/fxcrt/fx_extension.cpp

Issue 2430743003: in the attempt to fix 627393, changed IFX_FileRead's readBlock to return the length it reads
Patch Set: fix an undefined variable Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/fxcrt/extension.h" 7 #include "core/fxcrt/extension.h"
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 return; 97 return;
98 } 98 }
99 delete this; 99 delete this;
100 } 100 }
101 101
102 FX_FILESIZE CFX_MemoryStream::GetSize() { 102 FX_FILESIZE CFX_MemoryStream::GetSize() {
103 return (FX_FILESIZE)m_nCurSize; 103 return (FX_FILESIZE)m_nCurSize;
104 } 104 }
105 105
106 bool CFX_MemoryStream::IsEOF() { 106 bool CFX_MemoryStream::IsEOF() {
107 return m_nCurPos >= (size_t)GetSize(); 107 return m_nCurPos >= pdfium::base::checked_cast<size_t>(GetSize());
108 } 108 }
109 109
110 FX_FILESIZE CFX_MemoryStream::GetPosition() { 110 FX_FILESIZE CFX_MemoryStream::GetPosition() {
111 return (FX_FILESIZE)m_nCurPos; 111 return (FX_FILESIZE)m_nCurPos;
112 } 112 }
113 113
114 bool CFX_MemoryStream::ReadBlock(void* buffer, 114 size_t CFX_MemoryStream::ReadBlock(void* buffer,
115 FX_FILESIZE offset, 115 FX_FILESIZE offset,
116 size_t size) { 116 size_t size) {
117 if (!buffer || !size) 117 if (!buffer || !size)
118 return false; 118 return 0;
119 119
120 FX_SAFE_SIZE_T newPos = size; 120 FX_SAFE_SIZE_T newPos = size;
121 newPos += offset; 121 newPos += offset;
122 if (!newPos.IsValid() || newPos.ValueOrDefault(0) == 0 || 122 if (!newPos.IsValid() || newPos.ValueOrDefault(0) == 0 ||
123 newPos.ValueOrDie() > m_nCurSize) { 123 newPos.ValueOrDie() > m_nCurSize) {
124 return false; 124 return 0;
125 } 125 }
126 126
127 m_nCurPos = newPos.ValueOrDie(); 127 m_nCurPos = newPos.ValueOrDie();
128 if (m_dwFlags & FX_MEMSTREAM_Consecutive) { 128 if (m_dwFlags & FX_MEMSTREAM_Consecutive) {
129 FXSYS_memcpy(buffer, m_Blocks[0] + (size_t)offset, size); 129 FXSYS_memcpy(buffer, m_Blocks[0] + (size_t)offset, size);
130 return true; 130 return size;
131 } 131 }
132 size_t readSize = size;
132 size_t nStartBlock = (size_t)offset / m_nGrowSize; 133 size_t nStartBlock = (size_t)offset / m_nGrowSize;
133 offset -= (FX_FILESIZE)(nStartBlock * m_nGrowSize); 134 offset -= (FX_FILESIZE)(nStartBlock * m_nGrowSize);
134 while (size) { 135 while (size) {
135 size_t nRead = m_nGrowSize - (size_t)offset; 136 size_t nRead = m_nGrowSize - (size_t)offset;
136 if (nRead > size) { 137 if (nRead > size) {
137 nRead = size; 138 nRead = size;
138 } 139 }
139 FXSYS_memcpy(buffer, m_Blocks[(int)nStartBlock] + (size_t)offset, nRead); 140 FXSYS_memcpy(buffer, m_Blocks[(int)nStartBlock] + (size_t)offset, nRead);
140 buffer = ((uint8_t*)buffer) + nRead; 141 buffer = ((uint8_t*)buffer) + nRead;
141 size -= nRead; 142 size -= nRead;
142 nStartBlock++; 143 nStartBlock++;
143 offset = 0; 144 offset = 0;
144 } 145 }
145 return true; 146 return readSize;
146 } 147 }
147 148
148 size_t CFX_MemoryStream::ReadBlock(void* buffer, size_t size) { 149 size_t CFX_MemoryStream::ReadBlock(void* buffer, size_t size) {
149 if (m_nCurPos >= m_nCurSize) { 150 if (m_nCurPos >= m_nCurSize) {
150 return 0; 151 return 0;
151 } 152 }
152 size_t nRead = std::min(size, m_nCurSize - m_nCurPos); 153 size_t nRead = std::min(size, m_nCurSize - m_nCurPos);
153 if (!ReadBlock(buffer, (int32_t)m_nCurPos, nRead)) { 154 if (ReadBlock(buffer, (int32_t)m_nCurPos, nRead) != nRead && !IsEOF()) {
154 return 0; 155 return 0;
155 } 156 }
156 return nRead; 157 return nRead;
157 } 158 }
158 159
159 bool CFX_MemoryStream::WriteBlock(const void* buffer, 160 bool CFX_MemoryStream::WriteBlock(const void* buffer,
160 FX_FILESIZE offset, 161 FX_FILESIZE offset,
161 size_t size) { 162 size_t size) {
162 if (!buffer || !size) 163 if (!buffer || !size)
163 return false; 164 return false;
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 } 299 }
299 300
300 bool CFX_CRTFileStream::IsEOF() { 301 bool CFX_CRTFileStream::IsEOF() {
301 return GetPosition() >= GetSize(); 302 return GetPosition() >= GetSize();
302 } 303 }
303 304
304 FX_FILESIZE CFX_CRTFileStream::GetPosition() { 305 FX_FILESIZE CFX_CRTFileStream::GetPosition() {
305 return m_pFile->GetPosition(); 306 return m_pFile->GetPosition();
306 } 307 }
307 308
308 bool CFX_CRTFileStream::ReadBlock(void* buffer, 309 size_t CFX_CRTFileStream::ReadBlock(void* buffer,
309 FX_FILESIZE offset, 310 FX_FILESIZE offset,
310 size_t size) { 311 size_t size) {
311 return m_pFile->ReadPos(buffer, size, offset) > 0; 312 return m_pFile->ReadPos(buffer, size, offset);
312 } 313 }
313 314
314 size_t CFX_CRTFileStream::ReadBlock(void* buffer, size_t size) { 315 size_t CFX_CRTFileStream::ReadBlock(void* buffer, size_t size) {
315 return m_pFile->Read(buffer, size); 316 return m_pFile->Read(buffer, size);
316 } 317 }
317 318
318 bool CFX_CRTFileStream::WriteBlock(const void* buffer, 319 bool CFX_CRTFileStream::WriteBlock(const void* buffer,
319 FX_FILESIZE offset, 320 FX_FILESIZE offset,
320 size_t size) { 321 size_t size) {
321 return !!m_pFile->WritePos(buffer, size, offset); 322 return !!m_pFile->WritePos(buffer, size, offset);
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 b = ((const uint8_t*)pGUID)[i]; 611 b = ((const uint8_t*)pGUID)[i];
611 *pBuf++ = gs_FX_pHexChars[b >> 4]; 612 *pBuf++ = gs_FX_pHexChars[b >> 4];
612 *pBuf++ = gs_FX_pHexChars[b & 0x0F]; 613 *pBuf++ = gs_FX_pHexChars[b & 0x0F];
613 if (bSeparator && (i == 3 || i == 5 || i == 7 || i == 9)) { 614 if (bSeparator && (i == 3 || i == 5 || i == 7 || i == 9)) {
614 *pBuf++ = L'-'; 615 *pBuf++ = L'-';
615 } 616 }
616 } 617 }
617 bsStr.ReleaseBuffer(bSeparator ? 36 : 32); 618 bsStr.ReleaseBuffer(bSeparator ? 36 : 32);
618 } 619 }
619 #endif // PDF_ENABLE_XFA 620 #endif // PDF_ENABLE_XFA
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698