7#include "core/fxcodec/jbig2/JBig2_BitStream.h"
11#include "third_party/base/numerics/safe_conversions.h"
15pdfium::span<
const uint8_t> ValidatedSpan(pdfium::span<
const uint8_t> sp) {
16 if (sp.size() > 256 * 1024 * 1024)
34 if (dwBitPos > LengthInBits())
38 if (dwBitPos + dwBits <= LengthInBits())
41 dwBitPos = LengthInBits() - dwBitPos;
43 for (; dwBitPos > 0; --dwBitPos) {
45 (*dwResult << 1) | ((m_Span[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01);
56 if (dwBitPos > LengthInBits())
60 if (dwBitPos + dwBits <= LengthInBits())
63 dwBitPos = LengthInBits() - dwBitPos;
65 for (; dwBitPos > 0; --dwBitPos) {
67 (*nResult << 1) | ((m_Span[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01);
77 *dwResult = (m_Span[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01;
86 *bResult = (m_Span[m_dwByteIdx] >> (7 - m_dwBitIdx)) & 0x01;
95 *cResult = m_Span[m_dwByteIdx];
101 if (m_dwByteIdx + 3 >= m_Span.size())
104 *dwResult = (m_Span[m_dwByteIdx] << 24) | (m_Span[m_dwByteIdx + 1] << 16) |
105 (m_Span[m_dwByteIdx + 2] << 8) | m_Span[m_dwByteIdx + 3];
111 if (m_dwByteIdx + 1 >= m_Span.size())
114 *dwResult = (m_Span[m_dwByteIdx] << 8) | m_Span[m_dwByteIdx + 1];
120 if (m_dwBitIdx != 0) {
127 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;
152 return (m_dwByteIdx << 3) + m_dwBitIdx;
156 m_dwByteIdx = dwBitPos >> 3;
157 m_dwBitIdx = dwBitPos & 7;
161 return m_Span.data();
165 return pdfium::base::checked_cast<uint32_t>(m_Span.size());
169 return m_Span.subspan(m_dwByteIdx).data();
173 m_dwByteIdx += dwOffset;
181 if (m_dwBitIdx == 7) {
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 offset(uint32_t dwOffset)
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)
uint32_t getLength() const
int32_t read1Byte(uint8_t *cResult)
int32_t readNBits(uint32_t dwBits, uint32_t *dwResult)
const uint8_t * getBuf() const
int32_t readShortInteger(uint16_t *wResult)