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

Side by Side Diff: core/fxcodec/codec/fx_codec_progress.cpp

Issue 2430743003: in the attempt to fix 627393, changed IFX_FileRead's readBlock to return the length it reads
Patch Set: delete the include folder 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/fxcodec/codec/ccodec_progressivedecoder.h" 7 #include "core/fxcodec/codec/ccodec_progressivedecoder.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 } 332 }
333 } else { 333 } else {
334 uint32_t dwConsume = m_SrcSize - dwAvail; 334 uint32_t dwConsume = m_SrcSize - dwAvail;
335 if (dwAvail) { 335 if (dwAvail) {
336 FXSYS_memmove(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail); 336 FXSYS_memmove(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail);
337 } 337 }
338 if (dwSize > dwConsume) { 338 if (dwSize > dwConsume) {
339 dwSize = dwConsume; 339 dwSize = dwConsume;
340 } 340 }
341 } 341 }
342 if (!m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize)) { 342 if (m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize) != dwSize &&
343 !m_pFile->IsEOF()) {
343 err_status = FXCODEC_STATUS_ERR_READ; 344 err_status = FXCODEC_STATUS_ERR_READ;
344 return false; 345 return false;
345 } 346 }
346 m_offSet += dwSize; 347 m_offSet += dwSize;
347 pJpegModule->Input(m_pJpegContext, m_pSrcBuf, dwSize + dwAvail); 348 pJpegModule->Input(m_pJpegContext, m_pSrcBuf, dwSize + dwAvail);
348 return true; 349 return true;
349 } 350 }
350 351
351 bool CCodec_ProgressiveDecoder::PngReadHeaderFunc(void* pModule, 352 bool CCodec_ProgressiveDecoder::PngReadHeaderFunc(void* pModule,
352 int width, 353 int width,
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 } 606 }
606 } else { 607 } else {
607 uint32_t dwConsume = m_SrcSize - dwAvail; 608 uint32_t dwConsume = m_SrcSize - dwAvail;
608 if (dwAvail) { 609 if (dwAvail) {
609 FXSYS_memmove(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail); 610 FXSYS_memmove(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail);
610 } 611 }
611 if (dwSize > dwConsume) { 612 if (dwSize > dwConsume) {
612 dwSize = dwConsume; 613 dwSize = dwConsume;
613 } 614 }
614 } 615 }
615 if (!m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize)) { 616 if (m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize) != dwSize &&
617 !m_pFile->IsEOF()) {
616 err_status = FXCODEC_STATUS_ERR_READ; 618 err_status = FXCODEC_STATUS_ERR_READ;
617 return false; 619 return false;
618 } 620 }
619 m_offSet += dwSize; 621 m_offSet += dwSize;
620 pGifModule->Input(m_pGifContext, m_pSrcBuf, dwSize + dwAvail); 622 pGifModule->Input(m_pGifContext, m_pSrcBuf, dwSize + dwAvail);
621 return true; 623 return true;
622 } 624 }
623 625
624 void CCodec_ProgressiveDecoder::GifRecordCurrentPositionCallback( 626 void CCodec_ProgressiveDecoder::GifRecordCurrentPositionCallback(
625 void* pModule, 627 void* pModule,
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
895 } 897 }
896 } else { 898 } else {
897 uint32_t dwConsume = m_SrcSize - dwAvail; 899 uint32_t dwConsume = m_SrcSize - dwAvail;
898 if (dwAvail) { 900 if (dwAvail) {
899 FXSYS_memmove(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail); 901 FXSYS_memmove(m_pSrcBuf, m_pSrcBuf + dwConsume, dwAvail);
900 } 902 }
901 if (dwSize > dwConsume) { 903 if (dwSize > dwConsume) {
902 dwSize = dwConsume; 904 dwSize = dwConsume;
903 } 905 }
904 } 906 }
905 if (!m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize)) { 907 if (m_pFile->ReadBlock(m_pSrcBuf + dwAvail, m_offSet, dwSize) != dwSize &&
908 !m_pFile->IsEOF()) {
906 err_status = FXCODEC_STATUS_ERR_READ; 909 err_status = FXCODEC_STATUS_ERR_READ;
907 return false; 910 return false;
908 } 911 }
909 m_offSet += dwSize; 912 m_offSet += dwSize;
910 pBmpModule->Input(m_pBmpContext, m_pSrcBuf, dwSize + dwAvail); 913 pBmpModule->Input(m_pBmpContext, m_pSrcBuf, dwSize + dwAvail);
911 return true; 914 return true;
912 } 915 }
913 916
914 bool CCodec_ProgressiveDecoder::BmpInputImagePositionBufCallback( 917 bool CCodec_ProgressiveDecoder::BmpInputImagePositionBufCallback(
915 void* pModule, 918 void* pModule,
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1057 return false; 1060 return false;
1058 } 1061 }
1059 pBmpModule->InputImagePositionBufCallback = 1062 pBmpModule->InputImagePositionBufCallback =
1060 BmpInputImagePositionBufCallback; 1063 BmpInputImagePositionBufCallback;
1061 pBmpModule->ReadScanlineCallback = BmpReadScanlineCallback; 1064 pBmpModule->ReadScanlineCallback = BmpReadScanlineCallback;
1062 m_pBmpContext = pBmpModule->Start((void*)this); 1065 m_pBmpContext = pBmpModule->Start((void*)this);
1063 if (!m_pBmpContext) { 1066 if (!m_pBmpContext) {
1064 m_status = FXCODEC_STATUS_ERR_MEMORY; 1067 m_status = FXCODEC_STATUS_ERR_MEMORY;
1065 return false; 1068 return false;
1066 } 1069 }
1067 bool bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); 1070 bool bResult =
1071 m_pFile->ReadBlock(m_pSrcBuf, 0, size) == size || m_pFile->IsEOF();
1068 if (!bResult) { 1072 if (!bResult) {
1069 m_status = FXCODEC_STATUS_ERR_READ; 1073 m_status = FXCODEC_STATUS_ERR_READ;
1070 return false; 1074 return false;
1071 } 1075 }
1072 m_offSet += size; 1076 m_offSet += size;
1073 pBmpModule->Input(m_pBmpContext, m_pSrcBuf, size); 1077 pBmpModule->Input(m_pBmpContext, m_pSrcBuf, size);
1074 uint32_t* pPalette = nullptr; 1078 uint32_t* pPalette = nullptr;
1075 int32_t readResult = pBmpModule->ReadHeader( 1079 int32_t readResult = pBmpModule->ReadHeader(
1076 m_pBmpContext, &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom, 1080 m_pBmpContext, &m_SrcWidth, &m_SrcHeight, &m_BmpIsTopBottom,
1077 &m_SrcComponents, &m_SrcPaletteNumber, &pPalette, pAttribute); 1081 &m_SrcComponents, &m_SrcPaletteNumber, &pPalette, pAttribute);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1109 CCodec_JpegModule* pJpegModule = m_pCodecMgr->GetJpegModule(); 1113 CCodec_JpegModule* pJpegModule = m_pCodecMgr->GetJpegModule();
1110 if (!pJpegModule) { 1114 if (!pJpegModule) {
1111 m_status = FXCODEC_STATUS_ERR_MEMORY; 1115 m_status = FXCODEC_STATUS_ERR_MEMORY;
1112 return false; 1116 return false;
1113 } 1117 }
1114 m_pJpegContext = pJpegModule->Start(); 1118 m_pJpegContext = pJpegModule->Start();
1115 if (!m_pJpegContext) { 1119 if (!m_pJpegContext) {
1116 m_status = FXCODEC_STATUS_ERR_MEMORY; 1120 m_status = FXCODEC_STATUS_ERR_MEMORY;
1117 return false; 1121 return false;
1118 } 1122 }
1119 bool bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); 1123 bool bResult =
1124 m_pFile->ReadBlock(m_pSrcBuf, 0, size) == size || m_pFile->IsEOF();
1120 if (!bResult) { 1125 if (!bResult) {
1121 m_status = FXCODEC_STATUS_ERR_READ; 1126 m_status = FXCODEC_STATUS_ERR_READ;
1122 return false; 1127 return false;
1123 } 1128 }
1124 m_offSet += size; 1129 m_offSet += size;
1125 pJpegModule->Input(m_pJpegContext, m_pSrcBuf, size); 1130 pJpegModule->Input(m_pJpegContext, m_pSrcBuf, size);
1126 int32_t readResult = 1131 int32_t readResult =
1127 pJpegModule->ReadHeader(m_pJpegContext, &m_SrcWidth, &m_SrcHeight, 1132 pJpegModule->ReadHeader(m_pJpegContext, &m_SrcWidth, &m_SrcHeight,
1128 &m_SrcComponents, pAttribute); 1133 &m_SrcComponents, pAttribute);
1129 while (readResult == 2) { 1134 while (readResult == 2) {
(...skipping 28 matching lines...) Expand all
1158 CCodec_ProgressiveDecoder::PngReadHeaderFunc; 1163 CCodec_ProgressiveDecoder::PngReadHeaderFunc;
1159 pPngModule->AskScanlineBufCallback = 1164 pPngModule->AskScanlineBufCallback =
1160 CCodec_ProgressiveDecoder::PngAskScanlineBufFunc; 1165 CCodec_ProgressiveDecoder::PngAskScanlineBufFunc;
1161 pPngModule->FillScanlineBufCompletedCallback = 1166 pPngModule->FillScanlineBufCompletedCallback =
1162 CCodec_ProgressiveDecoder::PngFillScanlineBufCompletedFunc; 1167 CCodec_ProgressiveDecoder::PngFillScanlineBufCompletedFunc;
1163 m_pPngContext = pPngModule->Start((void*)this); 1168 m_pPngContext = pPngModule->Start((void*)this);
1164 if (!m_pPngContext) { 1169 if (!m_pPngContext) {
1165 m_status = FXCODEC_STATUS_ERR_MEMORY; 1170 m_status = FXCODEC_STATUS_ERR_MEMORY;
1166 return false; 1171 return false;
1167 } 1172 }
1168 bool bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); 1173 bool bResult =
1174 m_pFile->ReadBlock(m_pSrcBuf, 0, size) == size || m_pFile->IsEOF();
1169 if (!bResult) { 1175 if (!bResult) {
1170 m_status = FXCODEC_STATUS_ERR_READ; 1176 m_status = FXCODEC_STATUS_ERR_READ;
1171 return false; 1177 return false;
1172 } 1178 }
1173 m_offSet += size; 1179 m_offSet += size;
1174 bResult = pPngModule->Input(m_pPngContext, m_pSrcBuf, size, pAttribute); 1180 bResult = pPngModule->Input(m_pPngContext, m_pSrcBuf, size, pAttribute);
1175 while (bResult) { 1181 while (bResult) {
1176 uint32_t remain_size = (uint32_t)m_pFile->GetSize() - m_offSet; 1182 uint32_t remain_size = (uint32_t)m_pFile->GetSize() - m_offSet;
1177 uint32_t input_size = 1183 uint32_t input_size =
1178 remain_size > FXCODEC_BLOCK_SIZE ? FXCODEC_BLOCK_SIZE : remain_size; 1184 remain_size > FXCODEC_BLOCK_SIZE ? FXCODEC_BLOCK_SIZE : remain_size;
1179 if (input_size == 0) { 1185 if (input_size == 0) {
1180 if (m_pPngContext) { 1186 if (m_pPngContext) {
1181 pPngModule->Finish(m_pPngContext); 1187 pPngModule->Finish(m_pPngContext);
1182 } 1188 }
1183 m_pPngContext = nullptr; 1189 m_pPngContext = nullptr;
1184 m_status = FXCODEC_STATUS_ERR_FORMAT; 1190 m_status = FXCODEC_STATUS_ERR_FORMAT;
1185 return false; 1191 return false;
1186 } 1192 }
1187 if (m_pSrcBuf && input_size > m_SrcSize) { 1193 if (m_pSrcBuf && input_size > m_SrcSize) {
1188 FX_Free(m_pSrcBuf); 1194 FX_Free(m_pSrcBuf);
1189 m_pSrcBuf = FX_Alloc(uint8_t, input_size); 1195 m_pSrcBuf = FX_Alloc(uint8_t, input_size);
1190 FXSYS_memset(m_pSrcBuf, 0, input_size); 1196 FXSYS_memset(m_pSrcBuf, 0, input_size);
1191 m_SrcSize = input_size; 1197 m_SrcSize = input_size;
1192 } 1198 }
1193 bResult = m_pFile->ReadBlock(m_pSrcBuf, m_offSet, input_size); 1199 bResult =
1200 m_pFile->ReadBlock(m_pSrcBuf, m_offSet, input_size) == input_size ||
1201 m_pFile->IsEOF();
1194 if (!bResult) { 1202 if (!bResult) {
1195 m_status = FXCODEC_STATUS_ERR_READ; 1203 m_status = FXCODEC_STATUS_ERR_READ;
1196 return false; 1204 return false;
1197 } 1205 }
1198 m_offSet += input_size; 1206 m_offSet += input_size;
1199 bResult = 1207 bResult =
1200 pPngModule->Input(m_pPngContext, m_pSrcBuf, input_size, pAttribute); 1208 pPngModule->Input(m_pPngContext, m_pSrcBuf, input_size, pAttribute);
1201 } 1209 }
1202 ASSERT(!bResult); 1210 ASSERT(!bResult);
1203 if (m_pPngContext) { 1211 if (m_pPngContext) {
(...skipping 18 matching lines...) Expand all
1222 CCodec_ProgressiveDecoder::GifAskLocalPaletteBufCallback; 1230 CCodec_ProgressiveDecoder::GifAskLocalPaletteBufCallback;
1223 pGifModule->InputRecordPositionBufCallback = 1231 pGifModule->InputRecordPositionBufCallback =
1224 CCodec_ProgressiveDecoder::GifInputRecordPositionBufCallback; 1232 CCodec_ProgressiveDecoder::GifInputRecordPositionBufCallback;
1225 pGifModule->ReadScanlineCallback = 1233 pGifModule->ReadScanlineCallback =
1226 CCodec_ProgressiveDecoder::GifReadScanlineCallback; 1234 CCodec_ProgressiveDecoder::GifReadScanlineCallback;
1227 m_pGifContext = pGifModule->Start((void*)this); 1235 m_pGifContext = pGifModule->Start((void*)this);
1228 if (!m_pGifContext) { 1236 if (!m_pGifContext) {
1229 m_status = FXCODEC_STATUS_ERR_MEMORY; 1237 m_status = FXCODEC_STATUS_ERR_MEMORY;
1230 return false; 1238 return false;
1231 } 1239 }
1232 bool bResult = m_pFile->ReadBlock(m_pSrcBuf, 0, size); 1240 bool bResult =
1241 m_pFile->ReadBlock(m_pSrcBuf, 0, size) == size || m_pFile->IsEOF();
1233 if (!bResult) { 1242 if (!bResult) {
1234 m_status = FXCODEC_STATUS_ERR_READ; 1243 m_status = FXCODEC_STATUS_ERR_READ;
1235 return false; 1244 return false;
1236 } 1245 }
1237 m_offSet += size; 1246 m_offSet += size;
1238 pGifModule->Input(m_pGifContext, m_pSrcBuf, size); 1247 pGifModule->Input(m_pGifContext, m_pSrcBuf, size);
1239 m_SrcComponents = 1; 1248 m_SrcComponents = 1;
1240 int32_t readResult = pGifModule->ReadHeader( 1249 int32_t readResult = pGifModule->ReadHeader(
1241 m_pGifContext, &m_SrcWidth, &m_SrcHeight, &m_GifPltNumber, 1250 m_pGifContext, &m_SrcWidth, &m_SrcHeight, &m_GifPltNumber,
1242 (void**)&m_pGifPalette, &m_GifBgIndex, nullptr); 1251 (void**)&m_pGifPalette, &m_GifBgIndex, nullptr);
(...skipping 887 matching lines...) Expand 10 before | Expand all | Expand 10 after
2130 m_pFile = nullptr; 2139 m_pFile = nullptr;
2131 m_status = FXCODEC_STATUS_DECODE_FINISH; 2140 m_status = FXCODEC_STATUS_DECODE_FINISH;
2132 return m_status; 2141 return m_status;
2133 } 2142 }
2134 if (m_pSrcBuf && input_size > m_SrcSize) { 2143 if (m_pSrcBuf && input_size > m_SrcSize) {
2135 FX_Free(m_pSrcBuf); 2144 FX_Free(m_pSrcBuf);
2136 m_pSrcBuf = FX_Alloc(uint8_t, input_size); 2145 m_pSrcBuf = FX_Alloc(uint8_t, input_size);
2137 FXSYS_memset(m_pSrcBuf, 0, input_size); 2146 FXSYS_memset(m_pSrcBuf, 0, input_size);
2138 m_SrcSize = input_size; 2147 m_SrcSize = input_size;
2139 } 2148 }
2140 bool bResult = m_pFile->ReadBlock(m_pSrcBuf, m_offSet, input_size); 2149 bool bResult =
2150 m_pFile->ReadBlock(m_pSrcBuf, m_offSet, input_size) == input_size ||
2151 m_pFile->IsEOF();
2141 if (!bResult) { 2152 if (!bResult) {
2142 m_pDeviceBitmap = nullptr; 2153 m_pDeviceBitmap = nullptr;
2143 m_pFile = nullptr; 2154 m_pFile = nullptr;
2144 m_status = FXCODEC_STATUS_ERR_READ; 2155 m_status = FXCODEC_STATUS_ERR_READ;
2145 return m_status; 2156 return m_status;
2146 } 2157 }
2147 m_offSet += input_size; 2158 m_offSet += input_size;
2148 bResult = 2159 bResult =
2149 pPngModule->Input(m_pPngContext, m_pSrcBuf, input_size, nullptr); 2160 pPngModule->Input(m_pPngContext, m_pSrcBuf, input_size, nullptr);
2150 if (!bResult) { 2161 if (!bResult) {
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
2366 return m_status; 2377 return m_status;
2367 } 2378 }
2368 default: 2379 default:
2369 return FXCODEC_STATUS_ERROR; 2380 return FXCODEC_STATUS_ERROR;
2370 } 2381 }
2371 } 2382 }
2372 2383
2373 CCodec_ProgressiveDecoder* CCodec_ModuleMgr::CreateProgressiveDecoder() { 2384 CCodec_ProgressiveDecoder* CCodec_ModuleMgr::CreateProgressiveDecoder() {
2374 return new CCodec_ProgressiveDecoder(this); 2385 return new CCodec_ProgressiveDecoder(this);
2375 } 2386 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698