| Index: core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
|
| diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
|
| index 984e08d882cd04f95c9ce223500c18ac8ac40f3e..a94e5bb01d7eccd9933bab45d10e2c4f3592bce5 100644
|
| --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
|
| +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
|
| @@ -2521,28 +2521,31 @@ CPDF_Stream* CPDF_SyntaxParser::ReadStream(CPDF_Dictionary* pDict,
|
| len -= 1;
|
| }
|
| }
|
| - if (len <= 0) {
|
| + if (len < 0) {
|
| return nullptr;
|
| }
|
| pDict->SetAtInteger(FX_BSTRC("Length"), len);
|
| }
|
| m_Pos = streamStartPos;
|
| }
|
| - if (len <= 0) {
|
| + if (len < 0) {
|
| return nullptr;
|
| }
|
| - uint8_t* pData = FX_Alloc(uint8_t, len);
|
| - ReadBlock(pData, len);
|
| - if (pCryptoHandler) {
|
| - CFX_BinaryBuf dest_buf;
|
| - dest_buf.EstimateSize(pCryptoHandler->DecryptGetSize(len));
|
| - void* context = pCryptoHandler->DecryptStart(objnum, gennum);
|
| - pCryptoHandler->DecryptStream(context, pData, len, dest_buf);
|
| - pCryptoHandler->DecryptFinish(context, dest_buf);
|
| - FX_Free(pData);
|
| - pData = dest_buf.GetBuffer();
|
| - len = dest_buf.GetSize();
|
| - dest_buf.DetachBuffer();
|
| + uint8_t* pData = nullptr;
|
| + if (len > 0) {
|
| + pData = FX_Alloc(uint8_t, len);
|
| + ReadBlock(pData, len);
|
| + if (pCryptoHandler) {
|
| + CFX_BinaryBuf dest_buf;
|
| + dest_buf.EstimateSize(pCryptoHandler->DecryptGetSize(len));
|
| + void* context = pCryptoHandler->DecryptStart(objnum, gennum);
|
| + pCryptoHandler->DecryptStream(context, pData, len, dest_buf);
|
| + pCryptoHandler->DecryptFinish(context, dest_buf);
|
| + FX_Free(pData);
|
| + pData = dest_buf.GetBuffer();
|
| + len = dest_buf.GetSize();
|
| + dest_buf.DetachBuffer();
|
| + }
|
| }
|
| CPDF_Stream* pStream = new CPDF_Stream(pData, len, pDict);
|
| if (pContext) {
|
|
|