MCPcopy
hub / github.com/google/brotli / decodeMetaBlockLength

Function decodeMetaBlockLength

js/decode.ts:187–238  ·  view source on GitHub ↗
(s: State)

Source from the content-addressed store, hash-verified

185 return 0;
186}
187function decodeMetaBlockLength(s: State): number {
188 if (s.bitOffset >= 16) {
189 s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);
190 s.bitOffset -= 16;
191 }
192 s.inputEnd = readFewBits(s, 1);
193 s.metaBlockLength = 0;
194 s.isUncompressed = 0;
195 s.isMetadata = 0;
196 if ((s.inputEnd !== 0) && readFewBits(s, 1) !== 0) {
197 return 0;
198 }
199 const sizeNibbles: number = readFewBits(s, 2) + 4;
200 if (sizeNibbles === 7) {
201 s.isMetadata = 1;
202 if (readFewBits(s, 1) !== 0) {
203 return makeError(s, -6);
204 }
205 const sizeBytes: number = readFewBits(s, 2);
206 if (sizeBytes === 0) {
207 return 0;
208 }
209 for (let i = 0; i < sizeBytes; ++i) {
210 if (s.bitOffset >= 16) {
211 s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);
212 s.bitOffset -= 16;
213 }
214 const bits: number = readFewBits(s, 8);
215 if (bits === 0 && i + 1 === sizeBytes && sizeBytes > 1) {
216 return makeError(s, -8);
217 }
218 s.metaBlockLength += bits << (i * 8);
219 }
220 } else {
221 for (let i = 0; i < sizeNibbles; ++i) {
222 if (s.bitOffset >= 16) {
223 s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16);
224 s.bitOffset -= 16;
225 }
226 const bits: number = readFewBits(s, 4);
227 if (bits === 0 && i + 1 === sizeNibbles && sizeNibbles > 4) {
228 return makeError(s, -8);
229 }
230 s.metaBlockLength += bits << (i * 4);
231 }
232 }
233 s.metaBlockLength++;
234 if (s.inputEnd === 0) {
235 s.isUncompressed = readFewBits(s, 1);
236 }
237 return 0;
238}
239function readSymbol(tableGroup: Int32Array, tableIdx: number, s: State): number {
240 let offset: number = tableGroup[tableIdx];
241 const v: number = s.accumulator32 >>> s.bitOffset;

Callers 1

readNextMetablockHeaderFunction · 0.70

Calls 2

readFewBitsFunction · 0.70
makeErrorFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…