MCPcopy Create free account
hub / github.com/UsefulSoftwareCo/executor / inflateRaw

Function inflateRaw

packages/plugins/apps/src/git-client/packfile.ts:186–265  ·  view source on GitHub ↗
(
  buf: Uint8Array,
  pos: number,
  limits: Pick<ParsePackLimits, "maxObjectBytes"> = DEFAULT_LIMITS,
)

Source from the content-addressed store, hash-verified

184}
185
186function inflateRaw(
187 buf: Uint8Array,
188 pos: number,
189 limits: Pick<ParsePackLimits, "maxObjectBytes"> = DEFAULT_LIMITS,
190): { out: Uint8Array; endPos: number } {
191 const br = new BitReader(buf, pos);
192 const out: number[] = [];
193 let final = 0;
194 do {
195 final = br.bit();
196 const type = br.bits(2);
197 if (type === 0) {
198 br.align();
199 requireAvailable(buf, br.pos, 4, "stored deflate block header");
200 const len = buf[br.pos] | (buf[br.pos + 1] << 8);
201 const nlen = buf[br.pos + 2] | (buf[br.pos + 3] << 8);
202 if (((len ^ 0xffff) & 0xffff) !== nlen) {
203 throw new PackParseError("bad stored deflate length");
204 }
205 br.pos += 4; // len + nlen
206 requireAvailable(buf, br.pos, len, "stored deflate block");
207 for (let i = 0; i < len; i++) pushInflated(out, buf[br.pos++]!, limits.maxObjectBytes);
208 } else {
209 let litH: Huff, distH: Huff;
210 if (type === 1) {
211 const ll = new Array(288);
212 for (let i = 0; i < 144; i++) ll[i] = 8;
213 for (let i = 144; i < 256; i++) ll[i] = 9;
214 for (let i = 256; i < 280; i++) ll[i] = 7;
215 for (let i = 280; i < 288; i++) ll[i] = 8;
216 litH = buildHuff(ll, 288);
217 distH = buildHuff(new Array(30).fill(5), 30);
218 } else {
219 const hlit = br.bits(5) + 257;
220 const hdist = br.bits(5) + 1;
221 const hclen = br.bits(4) + 4;
222 const clen = new Array(19).fill(0);
223 for (let i = 0; i < hclen; i++) clen[CLEN_ORDER[i]] = br.bits(3);
224 const clH = buildHuff(clen, 19);
225 const lengths: number[] = [];
226 while (lengths.length < hlit + hdist) {
227 const sym = decodeSym(br, clH);
228 if (sym < 16) lengths.push(sym);
229 else if (sym === 16) {
230 const r = br.bits(2) + 3;
231 const prev = lengths[lengths.length - 1];
232 for (let i = 0; i < r; i++) lengths.push(prev);
233 } else if (sym === 17) {
234 const r = br.bits(3) + 3;
235 for (let i = 0; i < r; i++) lengths.push(0);
236 } else {
237 const r = br.bits(7) + 11;
238 for (let i = 0; i < r; i++) lengths.push(0);
239 }
240 }
241 litH = buildHuff(lengths.slice(0, hlit), hlit);
242 distH = buildHuff(lengths.slice(hlit), hdist);
243 }

Callers 1

inflateZlibFunction · 0.85

Calls 8

bitMethod · 0.95
bitsMethod · 0.95
alignMethod · 0.95
requireAvailableFunction · 0.85
pushInflatedFunction · 0.85
buildHuffFunction · 0.85
decodeSymFunction · 0.85
pushMethod · 0.80

Tested by

no test coverage detected