7#include "core/fxcodec/jbig2/JBig2_BitStream.h"
11#include "core/fxcrt/fx_safe_types.h"
12#include "core/fxcrt/numerics/safe_conversions.h"
16pdfium::span<
const uint8_t> ValidatedSpan(pdfium::span<
const uint8_t> sp) {
17 if (sp.size() > 256 * 1024 * 1024)
35 if (dwBitPos > LengthInBits())
39 if (dwBitPos + dwBits <= LengthInBits())
42 dwBitPos = LengthInBits() - dwBitPos;
44 for (; dwBitPos > 0; --dwBitPos) {
46 (*dwResult << 1) | ((m_Span[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01);
57 if (dwBitPos > LengthInBits())
61 if (dwBitPos + dwBits <= LengthInBits())
64 dwBitPos = LengthInBits() - dwBitPos;
66 for (; dwBitPos > 0; --dwBitPos) {
68 (*nResult << 1) | ((m_Span[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01);
78 *dwResult = (m_Span[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01;
87 *bResult = (m_Span[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01;
96 *cResult = m_Span[m_dwByteIdx];
102 if (m_dwByteIdx + 3 >= m_Span.size())
105 *dwResult = (m_Span[m_dwByteIdx] << 24) | (m_Span[m_dwByteIdx + 1] << 16) |
106 (m_Span[m_dwByteIdx + 2] << 8) | m_Span[m_dwByteIdx + 3];
112 if (m_dwByteIdx + 1 >= m_Span.size())
115 *dwResult = (m_Span[m_dwByteIdx] << 8) | m_Span[m_dwByteIdx + 1];
121 if (m_dwBitIdx != 0) {
128 return IsInBounds() ? m_Span[m_dwByteIdx] : 0;
136 return IsInBounds() ? m_Span[m_dwByteIdx] : 0xFF;
140 return m_dwByteIdx + 1 < m_Span.size() ? m_Span[m_dwByteIdx + 1] : 0xFF;
149 std::min(dwOffset, pdfium::checked_cast<uint32_t>(getBufSpan().size()));
154 new_offset += dwDelta;
155 if (new_offset.IsValid()) {
161 return (m_dwByteIdx << 3) + m_dwBitIdx;
165 m_dwByteIdx = dwBitPos >> 3;
166 m_dwBitIdx = dwBitPos & 7;
170 return m_Span.subspan(m_dwByteIdx).data();
175 result -= m_dwByteIdx;
176 return result.ValueOrDie();
180 if (m_dwBitIdx == 7) {
189 return m_dwByteIdx < getBufSpan().size();
195 return result.ValueOrDie();
int32_t readNBits(uint32_t dwBits, int32_t *nResult)
uint8_t getCurByte() const
uint32_t getBitPos() const
uint8_t getCurByte_arith() const
void setOffset(uint32_t dwOffset)
int32_t readInteger(uint32_t *dwResult)
uint32_t getByteLeft() const
void addOffset(uint32_t dwDelta)
int32_t read1Bit(uint32_t *dwResult)
const uint8_t * getPointer() const
int32_t read1Bit(bool *bResult)
CJBig2_BitStream(pdfium::span< const uint8_t > pSrcStream, uint64_t key)
uint8_t getNextByte_arith() const
uint32_t getOffset() const
void setBitPos(uint32_t dwBitPos)
int32_t read1Byte(uint8_t *cResult)
int32_t readNBits(uint32_t dwBits, uint32_t *dwResult)
int32_t readShortInteger(uint16_t *wResult)
pdfium::CheckedNumeric< uint32_t > FX_SAFE_UINT32