@push.rocks/smartlinuxrepo 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/arch/reader.js +2 -2
- package/dist_ts/debian/control.d.ts +7 -1
- package/dist_ts/debian/control.js +26 -4
- package/dist_ts/debian/indexbuilder.js +8 -10
- package/dist_ts/debian/reader.js +6 -2
- package/dist_ts/debian/rules.d.ts +7 -0
- package/dist_ts/debian/rules.js +20 -1
- package/dist_ts/readers/decompress.d.ts +13 -3
- package/dist_ts/readers/decompress.js +401 -26
- package/dist_ts/shared/architecture.d.ts +5 -1
- package/dist_ts/shared/architecture.js +6 -2
- package/dist_ts/shared/limits.d.ts +1 -1
- package/package.json +1 -1
- package/readme.md +4 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/arch/reader.ts +1 -1
- package/ts/debian/control.ts +25 -3
- package/ts/debian/indexbuilder.ts +11 -9
- package/ts/debian/reader.ts +5 -1
- package/ts/debian/rules.ts +21 -0
- package/ts/readers/decompress.ts +441 -29
- package/ts/shared/architecture.ts +5 -1
- package/ts/shared/limits.ts +1 -1
|
@@ -8,14 +8,14 @@ export function openDecompressingReader(inputArg, compressionArg, optionsArg) {
|
|
|
8
8
|
source = new PassThroughSource(inputArg);
|
|
9
9
|
break;
|
|
10
10
|
case 'gzip':
|
|
11
|
-
source = new
|
|
11
|
+
source = new GzipSource(inputArg);
|
|
12
12
|
break;
|
|
13
13
|
case 'zstd':
|
|
14
14
|
if (!isZstdDecodingSafe(process.versions.node)) {
|
|
15
15
|
throw new Error(`zstd decoding needs Node.js ${ZSTD_NODE_FLOOR} (nodejs/node#64593 reports a zstd frame that ends early); ` +
|
|
16
16
|
`this process runs Node.js ${process.versions.node}`);
|
|
17
17
|
}
|
|
18
|
-
source = new
|
|
18
|
+
source = new ZstdSource(inputArg, optionsArg.maxZstdFrames);
|
|
19
19
|
break;
|
|
20
20
|
case 'xz':
|
|
21
21
|
source = new XzSource(inputArg);
|
|
@@ -117,28 +117,35 @@ class PassThroughSource {
|
|
|
117
117
|
}
|
|
118
118
|
async close() { }
|
|
119
119
|
}
|
|
120
|
-
/**
|
|
121
|
-
|
|
122
|
-
|
|
120
|
+
/**
|
|
121
|
+
* gzip through `node:zlib` `createGunzip`, with stream backpressure. Gunzip
|
|
122
|
+
* decodes concatenated members, as Go's default reader does, but it stops at a
|
|
123
|
+
* NUL byte after a member and ignores the rest of the input, a valid member
|
|
124
|
+
* included; its `bytesWritten` counts only the bytes it consumed. So when the
|
|
125
|
+
* decoder ends by itself it must have consumed every byte read from the inner
|
|
126
|
+
* reader, and the inner reader must be at its end; anything else is
|
|
127
|
+
* `malformed-archive`. A source closed before that skips the check.
|
|
128
|
+
*/
|
|
129
|
+
class GzipSource {
|
|
130
|
+
input;
|
|
123
131
|
feeder;
|
|
124
132
|
decoder;
|
|
125
133
|
iterator;
|
|
134
|
+
/** Bytes read from the inner reader. */
|
|
135
|
+
inputBytes = 0;
|
|
136
|
+
inputEnded = false;
|
|
126
137
|
inputFailed = false;
|
|
127
138
|
inputError = undefined;
|
|
139
|
+
/** The read in flight on the inner reader; there is never more than one. */
|
|
140
|
+
pendingRead = null;
|
|
141
|
+
/** Set when the decoder has ended: the feeder starts no further read. */
|
|
142
|
+
stopped = false;
|
|
128
143
|
finished = false;
|
|
129
|
-
constructor(inputArg
|
|
130
|
-
this.
|
|
144
|
+
constructor(inputArg) {
|
|
145
|
+
this.input = inputArg;
|
|
131
146
|
const pump = async function* () {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
try {
|
|
135
|
-
chunk = await inputArg.read(READ_CHUNK_BYTES);
|
|
136
|
-
}
|
|
137
|
-
catch (error) {
|
|
138
|
-
this.inputFailed = true;
|
|
139
|
-
this.inputError = error;
|
|
140
|
-
throw error;
|
|
141
|
-
}
|
|
147
|
+
while (!this.stopped) {
|
|
148
|
+
const chunk = await this.readInput(READ_CHUNK_BYTES);
|
|
142
149
|
if (chunk === null) {
|
|
143
150
|
return;
|
|
144
151
|
}
|
|
@@ -146,7 +153,7 @@ class ZlibSource {
|
|
|
146
153
|
}
|
|
147
154
|
};
|
|
148
155
|
this.feeder = plugins.stream.Readable.from(pump.call(this), { objectMode: false });
|
|
149
|
-
this.decoder =
|
|
156
|
+
this.decoder = plugins.zlib.createGunzip();
|
|
150
157
|
// errors surface through the iterator below; the callback only completes the pipeline
|
|
151
158
|
plugins.stream.pipeline(this.feeder, this.decoder, () => { });
|
|
152
159
|
this.iterator = this.decoder[Symbol.asyncIterator]();
|
|
@@ -155,27 +162,395 @@ class ZlibSource {
|
|
|
155
162
|
if (this.finished) {
|
|
156
163
|
return null;
|
|
157
164
|
}
|
|
165
|
+
let result;
|
|
158
166
|
try {
|
|
159
|
-
|
|
160
|
-
if (result.done) {
|
|
161
|
-
this.finished = true;
|
|
162
|
-
return null;
|
|
163
|
-
}
|
|
164
|
-
return result.value;
|
|
167
|
+
result = await this.iterator.next();
|
|
165
168
|
}
|
|
166
169
|
catch (error) {
|
|
167
170
|
this.finished = true;
|
|
168
171
|
if (this.inputFailed) {
|
|
169
172
|
throw this.inputError;
|
|
170
173
|
}
|
|
171
|
-
throw mapZlibError(error,
|
|
174
|
+
throw mapZlibError(error, 'gzip');
|
|
175
|
+
}
|
|
176
|
+
if (!result.done) {
|
|
177
|
+
return result.value;
|
|
178
|
+
}
|
|
179
|
+
this.finished = true;
|
|
180
|
+
await this.checkEnd();
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
async close() {
|
|
184
|
+
this.finished = true;
|
|
185
|
+
this.stopped = true;
|
|
186
|
+
this.feeder.destroy();
|
|
187
|
+
this.decoder.destroy();
|
|
188
|
+
}
|
|
189
|
+
/** Reads the inner reader and counts what it returns. */
|
|
190
|
+
readInput(maxArg) {
|
|
191
|
+
const pending = this.input.read(maxArg).then((chunk) => {
|
|
192
|
+
this.pendingRead = null;
|
|
193
|
+
if (chunk === null) {
|
|
194
|
+
this.inputEnded = true;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
this.inputBytes += chunk.length;
|
|
198
|
+
}
|
|
199
|
+
return chunk;
|
|
200
|
+
}, (error) => {
|
|
201
|
+
this.pendingRead = null;
|
|
202
|
+
this.inputFailed = true;
|
|
203
|
+
this.inputError = error;
|
|
204
|
+
throw error;
|
|
205
|
+
});
|
|
206
|
+
this.pendingRead = pending;
|
|
207
|
+
return pending;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* The decoder ended by itself. It must have consumed every byte read from
|
|
211
|
+
* the inner reader, and one more read must report the end of input.
|
|
212
|
+
*/
|
|
213
|
+
async checkEnd() {
|
|
214
|
+
this.stopped = true;
|
|
215
|
+
if (this.pendingRead !== null && this.decoder.bytesWritten === this.inputBytes) {
|
|
216
|
+
// a read the feeder started settles first: its bytes count, and no two reads overlap
|
|
217
|
+
await this.pendingRead;
|
|
218
|
+
}
|
|
219
|
+
if (this.inputFailed) {
|
|
220
|
+
throw this.inputError;
|
|
221
|
+
}
|
|
222
|
+
const consumedAll = this.decoder.bytesWritten === this.inputBytes && (this.inputEnded || (await this.readInput(1)) === null);
|
|
223
|
+
if (!consumedAll) {
|
|
224
|
+
throw new LinuxRepoError('malformed-archive', 'bytes follow the last gzip member', { field: 'gzip stream' });
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/** RFC 8878 §3.1.1: the Zstandard frame magic number 0xFD2FB528, little-endian. */
|
|
229
|
+
const ZSTD_FRAME_MAGIC = Uint8Array.of(0x28, 0xb5, 0x2f, 0xfd);
|
|
230
|
+
/** RFC 8878 §3.1.2: a skippable frame magic number 0x184D2A5?, little-endian, after its first byte 0x5?. */
|
|
231
|
+
const ZSTD_SKIPPABLE_MAGIC = Uint8Array.of(0x50, 0x2a, 0x4d, 0x18);
|
|
232
|
+
/** Dictionary_ID field bytes by Dictionary_ID_Flag (RFC 8878 §3.1.1.1.1). */
|
|
233
|
+
const ZSTD_DICTIONARY_ID_BYTES = [0, 1, 2, 4];
|
|
234
|
+
/** Frame_Content_Size field bytes by Frame_Content_Size_Flag; flag 0 means 1 byte with Single_Segment_Flag, else 0. */
|
|
235
|
+
const ZSTD_CONTENT_SIZE_BYTES = [0, 2, 4, 8];
|
|
236
|
+
const ZSTD_BLOCK_TYPE_RLE = 1;
|
|
237
|
+
const ZSTD_BLOCK_TYPE_RESERVED = 3;
|
|
238
|
+
/** Place values of the bytes of a little-endian integer. */
|
|
239
|
+
const LITTLE_ENDIAN_PLACE = [1, 0x100, 0x10000, 0x1000000];
|
|
240
|
+
/**
|
|
241
|
+
* zstd through one `node:zlib` `createZstdDecompress` for the whole stream,
|
|
242
|
+
* fed by the codec's own RFC 8878 frame walk. node:zlib's zstd decoder before
|
|
243
|
+
* Node.js 26 drops the rest of a write after a frame (a second frame in the
|
|
244
|
+
* same write is lost, one in the next write is decoded), and every release
|
|
245
|
+
* ignores non-frame bytes after a frame. So the walk decides the frame
|
|
246
|
+
* boundaries, and no write to the decoder holds the end of one frame and any
|
|
247
|
+
* byte after it: every frame therefore costs at least one write (about 35 µs),
|
|
248
|
+
* which is why `maxZstdFrames` caps the Zstandard frames of a stream.
|
|
249
|
+
* - The walk reads the inner reader in chunks of `READ_CHUNK_BYTES` and parses
|
|
250
|
+
* each chunk synchronously; it writes the longest runs of Zstandard-frame
|
|
251
|
+
* bytes as views into the chunk, each ending at the end of the chunk or at a
|
|
252
|
+
* frame end, so a frame costs one write per chunk it spans, never one per
|
|
253
|
+
* header or block. Magic-number bytes from an earlier read are written as a
|
|
254
|
+
* copy before the run. It keeps no bytes across reads, only the state below.
|
|
255
|
+
* - Skippable frames are skipped, never written; they do not count against
|
|
256
|
+
* the cap. Anything else at a frame start, a set reserved header bit and
|
|
257
|
+
* block type 3 are `malformed-archive`, raised as soon as the byte is read.
|
|
258
|
+
* - Input that ends inside a frame, a magic-number prefix included, or is
|
|
259
|
+
* empty, is `truncated`; at least one Zstandard frame is required.
|
|
260
|
+
* - When the decoder ends by itself it must have consumed every byte written:
|
|
261
|
+
* libzstd and the walk read the same header fields, so one check at the end
|
|
262
|
+
* fails closed. A walk error is rethrown unchanged; a source closed before
|
|
263
|
+
* the end skips the check.
|
|
264
|
+
*/
|
|
265
|
+
class ZstdSource {
|
|
266
|
+
input;
|
|
267
|
+
maxFrames;
|
|
268
|
+
feeder;
|
|
269
|
+
decoder;
|
|
270
|
+
iterator;
|
|
271
|
+
/** Frame bytes the walk has written to the decoder. */
|
|
272
|
+
written = 0;
|
|
273
|
+
walkFailed = false;
|
|
274
|
+
walkError = undefined;
|
|
275
|
+
/** Set when the source closes: the walk starts no further read. */
|
|
276
|
+
stopped = false;
|
|
277
|
+
finished = false;
|
|
278
|
+
state = 'magic';
|
|
279
|
+
/** Bytes of the current magic number, skippable frame size or block header read so far. */
|
|
280
|
+
fieldBytes = 0;
|
|
281
|
+
/** Whether the magic number being read is a skippable frame's. */
|
|
282
|
+
skippable = false;
|
|
283
|
+
/** A skippable frame size or block header as read so far, little-endian. */
|
|
284
|
+
fieldValue = 0;
|
|
285
|
+
/** Bytes left in the current header fields, block content, checksum or skippable content. */
|
|
286
|
+
remaining = 0;
|
|
287
|
+
descriptor = 0;
|
|
288
|
+
lastBlock = false;
|
|
289
|
+
zstandardFrames = 0;
|
|
290
|
+
sawInput = false;
|
|
291
|
+
constructor(inputArg, maxFramesArg) {
|
|
292
|
+
this.input = inputArg;
|
|
293
|
+
this.maxFrames = maxFramesArg;
|
|
294
|
+
this.feeder = plugins.stream.Readable.from(this.walk(), { objectMode: false });
|
|
295
|
+
this.decoder = plugins.zlib.createZstdDecompress();
|
|
296
|
+
// errors surface through the iterator below; the callback only completes the pipeline
|
|
297
|
+
plugins.stream.pipeline(this.feeder, this.decoder, () => { });
|
|
298
|
+
this.iterator = this.decoder[Symbol.asyncIterator]();
|
|
299
|
+
}
|
|
300
|
+
async next() {
|
|
301
|
+
if (this.finished) {
|
|
302
|
+
return null;
|
|
303
|
+
}
|
|
304
|
+
let result;
|
|
305
|
+
try {
|
|
306
|
+
result = await this.iterator.next();
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
await this.close();
|
|
310
|
+
if (this.walkFailed) {
|
|
311
|
+
throw this.walkError;
|
|
312
|
+
}
|
|
313
|
+
throw mapZlibError(error, 'zstd');
|
|
314
|
+
}
|
|
315
|
+
if (!result.done) {
|
|
316
|
+
return result.value;
|
|
172
317
|
}
|
|
318
|
+
const consumed = this.decoder.bytesWritten;
|
|
319
|
+
await this.close();
|
|
320
|
+
if (this.walkFailed) {
|
|
321
|
+
throw this.walkError;
|
|
322
|
+
}
|
|
323
|
+
if (consumed !== this.written) {
|
|
324
|
+
throw zstdMalformed(`the zstd decoder ended after ${consumed} of the ${this.written} frame bytes`);
|
|
325
|
+
}
|
|
326
|
+
return null;
|
|
173
327
|
}
|
|
174
328
|
async close() {
|
|
175
329
|
this.finished = true;
|
|
330
|
+
this.stopped = true;
|
|
176
331
|
this.feeder.destroy();
|
|
177
332
|
this.decoder.destroy();
|
|
178
333
|
}
|
|
334
|
+
/** Reads and parses the inner reader chunk by chunk and yields the runs of Zstandard-frame bytes to write. */
|
|
335
|
+
async *walk() {
|
|
336
|
+
const runs = [];
|
|
337
|
+
for (;;) {
|
|
338
|
+
// only errors the walk raises or reads count as walk errors, not ones a destroyed feeder injects at a yield
|
|
339
|
+
try {
|
|
340
|
+
const chunk = await this.input.read(READ_CHUNK_BYTES);
|
|
341
|
+
if (this.stopped) {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
if (chunk === null) {
|
|
345
|
+
this.endOfInput();
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
this.parse(chunk, runs);
|
|
349
|
+
}
|
|
350
|
+
catch (error) {
|
|
351
|
+
this.walkFailed = true;
|
|
352
|
+
this.walkError = error;
|
|
353
|
+
throw error;
|
|
354
|
+
}
|
|
355
|
+
for (const run of runs) {
|
|
356
|
+
this.written += run.length;
|
|
357
|
+
yield run;
|
|
358
|
+
}
|
|
359
|
+
runs.length = 0;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
/** Advances the state over `chunkArg` and appends the runs of Zstandard-frame bytes it holds to `runsArg`. */
|
|
363
|
+
parse(chunkArg, runsArg) {
|
|
364
|
+
const length = chunkArg.length;
|
|
365
|
+
if (length > 0) {
|
|
366
|
+
this.sawInput = true;
|
|
367
|
+
}
|
|
368
|
+
const outsideFrame = this.state === 'magic' || this.state === 'skippable-size' || this.state === 'skippable-body';
|
|
369
|
+
/** Start of the current run in this chunk, or -1 outside a Zstandard frame. */
|
|
370
|
+
let runStart = outsideFrame ? -1 : 0;
|
|
371
|
+
/** Magic-number bytes read before this chunk. */
|
|
372
|
+
let earlier = this.state === 'magic' ? this.fieldBytes : 0;
|
|
373
|
+
let index = 0;
|
|
374
|
+
while (index < length) {
|
|
375
|
+
switch (this.state) {
|
|
376
|
+
case 'magic': {
|
|
377
|
+
const byte = chunkArg[index];
|
|
378
|
+
if (this.fieldBytes === 0) {
|
|
379
|
+
this.skippable = (byte & 0xf0) === ZSTD_SKIPPABLE_MAGIC[0];
|
|
380
|
+
if (!this.skippable && byte !== ZSTD_FRAME_MAGIC[0]) {
|
|
381
|
+
throw zstdMalformed('bytes at a zstd frame start are not a zstd frame');
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
else if (byte !== (this.skippable ? ZSTD_SKIPPABLE_MAGIC : ZSTD_FRAME_MAGIC)[this.fieldBytes]) {
|
|
385
|
+
throw zstdMalformed('bytes at a zstd frame start are not a zstd frame');
|
|
386
|
+
}
|
|
387
|
+
index += 1;
|
|
388
|
+
this.fieldBytes += 1;
|
|
389
|
+
if (this.fieldBytes < 4) {
|
|
390
|
+
break;
|
|
391
|
+
}
|
|
392
|
+
this.fieldBytes = 0;
|
|
393
|
+
if (this.skippable) {
|
|
394
|
+
this.fieldValue = 0;
|
|
395
|
+
this.state = 'skippable-size';
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
this.zstandardFrames += 1;
|
|
399
|
+
if (this.zstandardFrames > this.maxFrames) {
|
|
400
|
+
throw limitExceeded('maxEntries', this.maxFrames, 'zstd frames');
|
|
401
|
+
}
|
|
402
|
+
if (earlier > 0) {
|
|
403
|
+
runsArg.push(ZSTD_FRAME_MAGIC.slice(0, earlier));
|
|
404
|
+
runStart = 0;
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
runStart = index - 4;
|
|
408
|
+
}
|
|
409
|
+
this.state = 'frame-header';
|
|
410
|
+
}
|
|
411
|
+
earlier = 0;
|
|
412
|
+
break;
|
|
413
|
+
}
|
|
414
|
+
case 'skippable-size':
|
|
415
|
+
this.fieldValue += chunkArg[index] * LITTLE_ENDIAN_PLACE[this.fieldBytes];
|
|
416
|
+
index += 1;
|
|
417
|
+
this.fieldBytes += 1;
|
|
418
|
+
if (this.fieldBytes === 4) {
|
|
419
|
+
this.fieldBytes = 0;
|
|
420
|
+
this.remaining = this.fieldValue;
|
|
421
|
+
this.state = this.remaining === 0 ? 'magic' : 'skippable-body';
|
|
422
|
+
}
|
|
423
|
+
break;
|
|
424
|
+
case 'skippable-body': {
|
|
425
|
+
const take = Math.min(this.remaining, length - index);
|
|
426
|
+
index += take;
|
|
427
|
+
this.remaining -= take;
|
|
428
|
+
if (this.remaining === 0) {
|
|
429
|
+
this.state = 'magic';
|
|
430
|
+
}
|
|
431
|
+
break;
|
|
432
|
+
}
|
|
433
|
+
case 'frame-header': {
|
|
434
|
+
const flags = chunkArg[index];
|
|
435
|
+
index += 1;
|
|
436
|
+
if ((flags & 0x08) !== 0) {
|
|
437
|
+
throw zstdMalformed('a zstd frame header sets the reserved bit');
|
|
438
|
+
}
|
|
439
|
+
const contentSizeFlag = flags >> 6;
|
|
440
|
+
const singleSegment = (flags >> 5) & 1;
|
|
441
|
+
this.descriptor = flags;
|
|
442
|
+
this.remaining =
|
|
443
|
+
(singleSegment === 1 ? 0 : 1) +
|
|
444
|
+
ZSTD_DICTIONARY_ID_BYTES[flags & 3] +
|
|
445
|
+
(contentSizeFlag === 0 ? singleSegment : ZSTD_CONTENT_SIZE_BYTES[contentSizeFlag]);
|
|
446
|
+
this.fieldValue = 0;
|
|
447
|
+
this.state = this.remaining === 0 ? 'block-header' : 'header-fields';
|
|
448
|
+
break;
|
|
449
|
+
}
|
|
450
|
+
case 'header-fields': {
|
|
451
|
+
const take = Math.min(this.remaining, length - index);
|
|
452
|
+
index += take;
|
|
453
|
+
this.remaining -= take;
|
|
454
|
+
if (this.remaining === 0) {
|
|
455
|
+
this.state = 'block-header';
|
|
456
|
+
}
|
|
457
|
+
break;
|
|
458
|
+
}
|
|
459
|
+
case 'block-header': {
|
|
460
|
+
this.fieldValue += chunkArg[index] * LITTLE_ENDIAN_PLACE[this.fieldBytes];
|
|
461
|
+
index += 1;
|
|
462
|
+
this.fieldBytes += 1;
|
|
463
|
+
if (this.fieldBytes < 3) {
|
|
464
|
+
break;
|
|
465
|
+
}
|
|
466
|
+
const header = this.fieldValue;
|
|
467
|
+
this.fieldBytes = 0;
|
|
468
|
+
this.fieldValue = 0;
|
|
469
|
+
const blockType = (header >> 1) & 3;
|
|
470
|
+
if (blockType === ZSTD_BLOCK_TYPE_RESERVED) {
|
|
471
|
+
throw zstdMalformed('a zstd block has the reserved block type');
|
|
472
|
+
}
|
|
473
|
+
this.lastBlock = (header & 1) === 1;
|
|
474
|
+
this.remaining = blockType === ZSTD_BLOCK_TYPE_RLE ? 1 : header >>> 3;
|
|
475
|
+
if (this.remaining > 0) {
|
|
476
|
+
this.state = 'block-body';
|
|
477
|
+
}
|
|
478
|
+
else if (this.endBlock()) {
|
|
479
|
+
runsArg.push(chunkArg.subarray(runStart, index));
|
|
480
|
+
runStart = -1;
|
|
481
|
+
}
|
|
482
|
+
break;
|
|
483
|
+
}
|
|
484
|
+
case 'block-body':
|
|
485
|
+
case 'checksum': {
|
|
486
|
+
const take = Math.min(this.remaining, length - index);
|
|
487
|
+
index += take;
|
|
488
|
+
this.remaining -= take;
|
|
489
|
+
if (this.remaining > 0) {
|
|
490
|
+
break;
|
|
491
|
+
}
|
|
492
|
+
if (this.state === 'checksum' || this.endBlock()) {
|
|
493
|
+
this.state = 'magic';
|
|
494
|
+
runsArg.push(chunkArg.subarray(runStart, index));
|
|
495
|
+
runStart = -1;
|
|
496
|
+
}
|
|
497
|
+
break;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
if (runStart >= 0 && runStart < length) {
|
|
502
|
+
runsArg.push(chunkArg.subarray(runStart, length));
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
/** A block's content has been read: returns true when that ends the frame, else moves to the next field. */
|
|
506
|
+
endBlock() {
|
|
507
|
+
if (!this.lastBlock) {
|
|
508
|
+
this.state = 'block-header';
|
|
509
|
+
return false;
|
|
510
|
+
}
|
|
511
|
+
if ((this.descriptor & 0x04) !== 0) {
|
|
512
|
+
this.remaining = 4;
|
|
513
|
+
this.state = 'checksum';
|
|
514
|
+
return false;
|
|
515
|
+
}
|
|
516
|
+
this.state = 'magic';
|
|
517
|
+
return true;
|
|
518
|
+
}
|
|
519
|
+
/** The inner reader has ended: only a frame start after at least one Zstandard frame is a clean end. */
|
|
520
|
+
endOfInput() {
|
|
521
|
+
switch (this.state) {
|
|
522
|
+
case 'magic':
|
|
523
|
+
if (this.fieldBytes > 0) {
|
|
524
|
+
throw zstdTruncated('a zstd frame magic number');
|
|
525
|
+
}
|
|
526
|
+
if (this.zstandardFrames > 0) {
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
if (!this.sawInput) {
|
|
530
|
+
throw zstdTruncated('the zstd stream');
|
|
531
|
+
}
|
|
532
|
+
throw zstdMalformed('the zstd stream holds no Zstandard frame');
|
|
533
|
+
case 'skippable-size':
|
|
534
|
+
throw zstdTruncated('a zstd skippable frame header');
|
|
535
|
+
case 'skippable-body':
|
|
536
|
+
throw zstdTruncated('a zstd skippable frame');
|
|
537
|
+
case 'frame-header':
|
|
538
|
+
case 'header-fields':
|
|
539
|
+
throw zstdTruncated('a zstd frame header');
|
|
540
|
+
case 'block-header':
|
|
541
|
+
throw zstdTruncated('a zstd block header');
|
|
542
|
+
case 'block-body':
|
|
543
|
+
throw zstdTruncated('a zstd block');
|
|
544
|
+
case 'checksum':
|
|
545
|
+
throw zstdTruncated('a zstd frame checksum');
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
function zstdTruncated(whereArg) {
|
|
550
|
+
return new LinuxRepoError('truncated', `input ended inside ${whereArg}`, { field: 'zstd stream' });
|
|
551
|
+
}
|
|
552
|
+
function zstdMalformed(messageArg) {
|
|
553
|
+
return new LinuxRepoError('malformed-archive', messageArg, { field: 'zstd stream' });
|
|
179
554
|
}
|
|
180
555
|
function mapZlibError(errorArg, kindArg) {
|
|
181
556
|
const code = errorArg?.code;
|
|
@@ -266,4 +641,4 @@ class XzSource {
|
|
|
266
641
|
}
|
|
267
642
|
}
|
|
268
643
|
}
|
|
269
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb21wcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3JlYWRlcnMvZGVjb21wcmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFvQixNQUFNLFlBQVksQ0FBQztBQXdDM0UsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxRQUFxQixFQUNyQixjQUFpQyxFQUNqQyxVQUE4QjtJQUU5QixJQUFJLE1BQW9CLENBQUM7SUFDekIsUUFBUSxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLE1BQU07WUFDVCxNQUFNLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QyxNQUFNO1FBQ1IsS0FBSyxNQUFNO1lBQ1QsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxQyxNQUFNO1FBQ1IsS0FBSyxNQUFNO1lBQ1QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxJQUFJLEtBQUssQ0FDYiwrQkFBK0IsZUFBZSw2REFBNkQ7b0JBQ3pHLDZCQUE2QixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUN2RCxDQUFDO1lBQ0osQ0FBQztZQUNELE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDMUMsTUFBTTtRQUNSLEtBQUssSUFBSTtZQUNQLE1BQU0sR0FBRyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoQyxNQUFNO1FBQ1I7WUFDRSxNQUFNLElBQUksY0FBYyxDQUFDLHlCQUF5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
|
|
644
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb21wcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3JlYWRlcnMvZGVjb21wcmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFvQixNQUFNLFlBQVksQ0FBQztBQWtEM0UsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxRQUFxQixFQUNyQixjQUFpQyxFQUNqQyxVQUE4QjtJQUU5QixJQUFJLE1BQW9CLENBQUM7SUFDekIsUUFBUSxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLE1BQU07WUFDVCxNQUFNLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6QyxNQUFNO1FBQ1IsS0FBSyxNQUFNO1lBQ1QsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLE1BQU07UUFDUixLQUFLLE1BQU07WUFDVCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxNQUFNLElBQUksS0FBSyxDQUNiLCtCQUErQixlQUFlLDZEQUE2RDtvQkFDekcsNkJBQTZCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQ3ZELENBQUM7WUFDSixDQUFDO1lBQ0QsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDNUQsTUFBTTtRQUNSLEtBQUssSUFBSTtZQUNQLE1BQU0sR0FBRyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoQyxNQUFNO1FBQ1I7WUFDRSxNQUFNLElBQUksY0FBYyxDQUFDLHlCQUF5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
|
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
* Whether an architecture can name an index path segment. Readers record any
|
|
3
3
|
* architecture a package states (Gitea accepts them); builders refuse an entry
|
|
4
4
|
* whose architecture fails this rule with `invalid-input`, and never skip it
|
|
5
|
-
* silently.
|
|
5
|
+
* silently. The exception is `readDebianPackage`: the record's file name
|
|
6
|
+
* (`<name>_<version>_<architecture>.deb`) embeds the architecture, so it
|
|
7
|
+
* refuses one that fails this rule or the pool file name rule with
|
|
8
|
+
* `invalid-field` (`Architecture`), and never returns a record
|
|
9
|
+
* `buildDebianIndex` refuses. Refused: the empty string, `.` and `..`, and any value containing
|
|
6
10
|
* `/`, whitespace or a control character.
|
|
7
11
|
*/
|
|
8
12
|
export declare function isIndexableArchitecture(architectureArg: string): boolean;
|
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
* Whether an architecture can name an index path segment. Readers record any
|
|
3
3
|
* architecture a package states (Gitea accepts them); builders refuse an entry
|
|
4
4
|
* whose architecture fails this rule with `invalid-input`, and never skip it
|
|
5
|
-
* silently.
|
|
5
|
+
* silently. The exception is `readDebianPackage`: the record's file name
|
|
6
|
+
* (`<name>_<version>_<architecture>.deb`) embeds the architecture, so it
|
|
7
|
+
* refuses one that fails this rule or the pool file name rule with
|
|
8
|
+
* `invalid-field` (`Architecture`), and never returns a record
|
|
9
|
+
* `buildDebianIndex` refuses. Refused: the empty string, `.` and `..`, and any value containing
|
|
6
10
|
* `/`, whitespace or a control character.
|
|
7
11
|
*/
|
|
8
12
|
export function isIndexableArchitecture(architectureArg) {
|
|
@@ -14,4 +18,4 @@ export function isIndexableArchitecture(architectureArg) {
|
|
|
14
18
|
}
|
|
15
19
|
return !/[/\s\p{Cc}]/u.test(architectureArg);
|
|
16
20
|
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl0ZWN0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvc2hhcmVkL2FyY2hpdGVjdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLGVBQXVCO0lBQzdELElBQUksT0FBTyxlQUFlLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDeEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxlQUFlLEtBQUssRUFBRSxJQUFJLGVBQWUsS0FBSyxHQUFHLElBQUksZUFBZSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2xGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQy9DLENBQUMifQ==
|
|
@@ -17,7 +17,7 @@ export interface ILinuxPackageLimits {
|
|
|
17
17
|
maxDecompressedMetadataBytes: number;
|
|
18
18
|
/** The decompressed Arch payload walked for the file list, in bytes. */
|
|
19
19
|
maxPayloadBytes: number;
|
|
20
|
-
/** Tar or ar entries per archive, and values per multi-valued metadata field. */
|
|
20
|
+
/** Tar or ar entries per archive, Zstandard frames per zstd stream, and values per multi-valued metadata field. */
|
|
21
21
|
maxEntries: number;
|
|
22
22
|
/** Total bytes of Arch file names. */
|
|
23
23
|
maxFileListBytes: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartlinuxrepo",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A pure codec for Linux package repositories (Alpine apk, Debian apt, RPM dnf, Arch pacman): read packages into records, build index file sets and sign them.",
|
|
6
6
|
"main": "dist_ts/index.js",
|
package/readme.md
CHANGED
|
@@ -32,12 +32,14 @@ Readers take `Partial<ILinuxPackageLimits>` per call over `DEFAULT_LINUX_PACKAGE
|
|
|
32
32
|
| `maxMetadataBytes` | 64 MiB | one buffered metadata unit (apk or deb control member, RPM headers) |
|
|
33
33
|
| `maxDecompressedMetadataBytes` | 32 MiB | a decompressed control tar or `.PKGINFO` |
|
|
34
34
|
| `maxPayloadBytes` | 16 GiB | the decompressed Arch payload walked for the file list |
|
|
35
|
-
| `maxEntries` | 100,000 | archive entries, values per multi-valued field |
|
|
35
|
+
| `maxEntries` | 100,000 | archive entries, Zstandard frames per zstd stream, values per multi-valued field |
|
|
36
36
|
| `maxFileListBytes` | 16 MiB | total Arch file-name bytes |
|
|
37
37
|
| `maxHeaderBytes` | 4 MiB | one tar header chain or metadata line |
|
|
38
38
|
|
|
39
39
|
Every failure is a `LinuxRepoError` with a stable `code` (`limit-exceeded`, `unsupported-compression`, `malformed-archive`, `malformed-header`, `missing-field`, `invalid-field`, `unsupported-package-format`, `truncated`, `digest-mismatch`, `invalid-input`, `invalid-key`, `signing-failed`, and from the verifier `malformed-signature`, `wrong-key`, `unusable-key`, `bad-signature`) and a `detail` naming the field or limit. Errors from your own source or signer, and failures inside node:crypto or openpgp.js during key generation, are passed through unchanged. New codes arrive in minor releases (1.1.0 added the four verifier codes), each raised only by a new function: a `switch` over `code` needs a default branch.
|
|
40
40
|
|
|
41
|
+
Compressed streams (a deb control member, an Arch package) are read to their end: concatenated gzip members and zstd frames are decoded, zstd skippable frames are skipped, and any other bytes after the last gzip member or zstd frame are `malformed-archive`.
|
|
42
|
+
|
|
41
43
|
## Signing
|
|
42
44
|
|
|
43
45
|
The codec never stores keys. You pass a signer on every call:
|
|
@@ -138,7 +140,7 @@ const files = await buildDebianIndex({
|
|
|
138
140
|
});
|
|
139
141
|
```
|
|
140
142
|
|
|
141
|
-
`readDebianPackage` reads the `control.tar` member (plain, `.gz`, `.xz` or `.zst`) and hashes the rest of the file without decompressing it. The record keeps Gitea's derived values exactly, and its `fileName` is `<name>_<version>_<architecture>.deb`.
|
|
143
|
+
`readDebianPackage` reads the `control.tar` member (plain, `.gz`, `.xz` or `.zst`) and hashes the rest of the file without decompressing it. The record keeps Gitea's derived values exactly, and its `fileName` is `<name>_<version>_<architecture>.deb`. Two departures from Gitea's control checks keep every record indexable. The version: a version that holds `/` or `?` is refused with `invalid-field` (`detail.field` `Version`), a departure from Gitea's version pattern, which admits both in the revision (its `+-~` class is the range 0x2B-0x7E); no pool file name can hold them, because `/` splits the path and apt sends `?` unescaped, so the server would read the rest as a query. The architecture: Gitea accepts any non-empty Architecture; the reader refuses one that is `.` or `..` or holds `/`, `#`, `?`, whitespace or a control character (`invalid-field`, `detail.field` `Architecture`), because the file name embeds it. `buildDebianIndex` applies the same rules to `record.architecture` and `record.fileName` (`invalid-input`), so every record the reader returns can be indexed.
|
|
142
144
|
|
|
143
145
|
`buildDebianIndex` returns the complete set for one distribution. For every component and architecture with packages it writes `dists/<distribution>/<component>/binary-<architecture>/Packages`, `Packages.gz` and `Packages.xz` (`content` files). Packages of architecture `all` are listed only under `binary-all`, as in Gitea. Then it writes `dists/<distribution>/Release`, its armored detached signature `Release.gpg` and the cleartext-signed `InRelease` (`pointer` files). `distribution` and `component` must match `^[a-zA-Z0-9][a-zA-Z0-9.~+_-]*$` (`isDebianSymbol`); `origin` and `label` are each one non-empty line without surrounding whitespace (`isDebianReleaseValue`). Both predicates are the builder's own rules, for checking configuration before a build. Entries are `IDebianIndexEntry` objects (`{ component, record }`). Your route serves:
|
|
144
146
|
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartlinuxrepo',
|
|
6
|
-
version: '1.1.
|
|
6
|
+
version: '1.1.2',
|
|
7
7
|
description: 'A pure codec for Linux package repositories (Alpine apk, Debian apt, RPM dnf, Arch pacman): read packages into records, build index file sets and sign them.'
|
|
8
8
|
}
|