#include "core/fpdfapi/page/cpdf_streamparser.h"
#include <ctype.h>
#include <algorithm>
#include <memory>
#include <utility>
#include "constants/stream_dict_common.h"
#include "core/fpdfapi/page/cpdf_docpagedata.h"
#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_boolean.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/cpdf_name.h"
#include "core/fpdfapi/parser/cpdf_null.h"
#include "core/fpdfapi/parser/cpdf_number.h"
#include "core/fpdfapi/parser/cpdf_stream.h"
#include "core/fpdfapi/parser/cpdf_string.h"
#include "core/fpdfapi/parser/fpdf_parser_decode.h"
#include "core/fpdfapi/parser/fpdf_parser_utility.h"
#include "core/fxcodec/data_and_bytes_consumed.h"
#include "core/fxcodec/jpeg/jpegmodule.h"
#include "core/fxcodec/scanlinedecoder.h"
#include "core/fxcrt/check.h"
#include "core/fxcrt/data_vector.h"
#include "core/fxcrt/fx_extension.h"
#include "core/fxcrt/fx_safe_types.h"
#include "core/fxcrt/span_util.h"
#include "core/fxge/calculate_pitch.h"
namespace {
const uint32_t kMaxNestedParsingLevel = …;
const size_t kMaxStringLength = …;
const char kTrue[] = …;
const char kFalse[] = …;
const char kNull[] = …;
uint32_t DecodeAllScanlines(std::unique_ptr<ScanlineDecoder> pDecoder) { … }
uint32_t DecodeInlineStream(pdfium::span<const uint8_t> src_span,
int width,
int height,
const ByteString& decoder,
RetainPtr<const CPDF_Dictionary> pParam,
uint32_t orig_size) { … }
}
CPDF_StreamParser::CPDF_StreamParser(pdfium::span<const uint8_t> span)
: … { … }
CPDF_StreamParser::CPDF_StreamParser(pdfium::span<const uint8_t> span,
const WeakPtr<ByteStringPool>& pPool)
: … { … }
CPDF_StreamParser::~CPDF_StreamParser() = default;
RetainPtr<CPDF_Stream> CPDF_StreamParser::ReadInlineStream(
CPDF_Document* pDoc,
RetainPtr<CPDF_Dictionary> pDict,
const CPDF_Object* pCSObj) { … }
CPDF_StreamParser::ElementType CPDF_StreamParser::ParseNextElement() { … }
RetainPtr<CPDF_Object> CPDF_StreamParser::ReadNextObject(
bool bAllowNestedArray,
bool bInArray,
uint32_t dwRecursionLevel) { … }
void CPDF_StreamParser::GetNextWord(bool& bIsNumber) { … }
ByteString CPDF_StreamParser::ReadString() { … }
DataVector<uint8_t> CPDF_StreamParser::ReadHexString() { … }
bool CPDF_StreamParser::PositionIsInBounds() const { … }