@push.rocks/smartlinuxrepo 1.1.2 → 1.2.0
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/alpine/apkindexreader.d.ts +87 -0
- package/dist_ts/alpine/apkindexreader.js +193 -0
- package/dist_ts/arch/indexreader.d.ts +35 -0
- package/dist_ts/arch/indexreader.js +45 -0
- package/dist_ts/arch/reader.js +1 -1
- package/dist_ts/debian/indexbuilder.js +8 -23
- package/dist_ts/debian/indexreader.d.ts +107 -0
- package/dist_ts/debian/indexreader.js +274 -0
- package/dist_ts/debian/reader.js +1 -1
- package/dist_ts/debian/rules.d.ts +18 -0
- package/dist_ts/debian/rules.js +81 -2
- package/dist_ts/index.d.ts +14 -4
- package/dist_ts/index.js +9 -3
- package/dist_ts/readers/decompress.d.ts +1 -2
- package/dist_ts/readers/decompress.js +1 -1
- package/dist_ts/readers/document.d.ts +36 -0
- package/dist_ts/readers/document.js +110 -0
- package/dist_ts/rpm/repodata.d.ts +3 -2
- package/dist_ts/rpm/repodata.js +5 -4
- package/dist_ts/rpm/repodatareader.d.ts +173 -0
- package/dist_ts/rpm/repodatareader.js +414 -0
- package/dist_ts/rpm/xmlreader.d.ts +70 -0
- package/dist_ts/rpm/xmlreader.js +576 -0
- package/dist_ts/shared/errors.d.ts +12 -4
- package/dist_ts/shared/errors.js +1 -1
- package/dist_ts/shared/limits.d.ts +8 -1
- package/dist_ts/shared/limits.js +5 -2
- package/dist_ts/shared/types.d.ts +2 -0
- package/dist_ts/signing/verifiers.d.ts +43 -0
- package/dist_ts/signing/verifiers.js +81 -2
- package/package.json +1 -1
- package/readme.md +53 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/alpine/apkindexreader.ts +265 -0
- package/ts/arch/indexreader.ts +66 -0
- package/ts/arch/reader.ts +2 -1
- package/ts/debian/indexbuilder.ts +13 -23
- package/ts/debian/indexreader.ts +372 -0
- package/ts/debian/reader.ts +2 -1
- package/ts/debian/rules.ts +83 -1
- package/ts/index.ts +40 -2
- package/ts/readers/decompress.ts +1 -3
- package/ts/readers/document.ts +136 -0
- package/ts/rpm/repodata.ts +4 -3
- package/ts/rpm/repodatareader.ts +582 -0
- package/ts/rpm/xmlreader.ts +680 -0
- package/ts/shared/errors.ts +13 -4
- package/ts/shared/limits.ts +9 -1
- package/ts/shared/types.ts +3 -0
- package/ts/signing/verifiers.ts +113 -1
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
import { LinuxRepoError, limitExceeded } from '../shared/errors.js';
|
|
2
|
+
import { resolveLinuxPackageLimits } from '../shared/limits.js';
|
|
3
|
+
import { assertLinuxCompression, assertReaderBytes, assertReaderInput, readIndexDocument } from '../readers/document.js';
|
|
4
|
+
import { scanXmlDocument } from './xmlreader.js';
|
|
5
|
+
const DOCUMENTS = new Map([
|
|
6
|
+
['primary', 'metadata'],
|
|
7
|
+
['filelists', 'filelists'],
|
|
8
|
+
['other', 'otherdata'],
|
|
9
|
+
]);
|
|
10
|
+
/**
|
|
11
|
+
* Reads a `primary`, `filelists` or `other` document (`.xml`, `.xml.gz`,
|
|
12
|
+
* `.xml.xz`, `.xml.zst`; the caller names `compression` and `document`) into
|
|
13
|
+
* its frame and `<package>` units. The XML rules are the strict scanner's
|
|
14
|
+
* (see `IRpmXmlFrame`; any refusal is `malformed-index`): the root must be
|
|
15
|
+
* `<metadata>`, `<filelists>` or `<otherdata>` for the document, and its
|
|
16
|
+
* children `<package>` elements with only whitespace between them, which is
|
|
17
|
+
* not returned. A package without its key (primary `<checksum pkgid="YES">`,
|
|
18
|
+
* filelists and other `pkgid`) is `missing-field` (`pkgid`); a package with
|
|
19
|
+
* two of an element the view reads (`<name>`, `<arch>`, `<version>`, `<size>`,
|
|
20
|
+
* a key `<checksum>`) is `malformed-index`.
|
|
21
|
+
*
|
|
22
|
+
* Bounds: the decoded document by `maxIndexBytes`, packages and files per
|
|
23
|
+
* package by `maxEntries`, one package by `maxMetadataBytes`, one start tag
|
|
24
|
+
* by `maxHeaderBytes`. Duplicates are kept; all bytes are views into `decoded`.
|
|
25
|
+
*/
|
|
26
|
+
export async function readRpmRepodata(inputArg) {
|
|
27
|
+
assertReaderInput(inputArg);
|
|
28
|
+
assertReaderBytes(inputArg.bytes);
|
|
29
|
+
assertLinuxCompression(inputArg.compression);
|
|
30
|
+
const document = inputArg.document;
|
|
31
|
+
const rootName = typeof document === 'string' ? DOCUMENTS.get(document) : undefined;
|
|
32
|
+
if (rootName === undefined) {
|
|
33
|
+
throw new LinuxRepoError('invalid-input', "document must be 'primary', 'filelists' or 'other'", {
|
|
34
|
+
field: 'document',
|
|
35
|
+
value: typeof document === 'string' ? document : typeof document,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
const limits = resolveLinuxPackageLimits(inputArg.limits);
|
|
39
|
+
const decoded = await readIndexDocument(inputArg.bytes, inputArg.compression, limits);
|
|
40
|
+
const packages = [];
|
|
41
|
+
const frame = scanXmlDocument(decoded, {
|
|
42
|
+
rootName,
|
|
43
|
+
unitName: 'package',
|
|
44
|
+
keepOtherChildren: false,
|
|
45
|
+
limits,
|
|
46
|
+
createUnit: (startArg) => new PackageHandler(document, startArg, limits),
|
|
47
|
+
unit: (handlerArg, startArg, endArg) => {
|
|
48
|
+
packages.push(handlerArg.result(decoded.subarray(startArg, endArg)));
|
|
49
|
+
},
|
|
50
|
+
other: () => undefined,
|
|
51
|
+
});
|
|
52
|
+
return { ...frameOf(decoded, rootName, frame), decoded, document, packages };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Reads an `updateinfo` document into its frame and `<update>` units: the
|
|
56
|
+
* root must be `<updates>`, the unit key is the `<id>` text (none is
|
|
57
|
+
* `missing-field`, two are `malformed-index`), and the packages are the
|
|
58
|
+
* `<pkglist><collection short><package …><filename>` entries in order (a
|
|
59
|
+
* package with two `<filename>` elements is `malformed-index`). XML rules,
|
|
60
|
+
* bounds and ownership as `readRpmRepodata`; packages per update count against
|
|
61
|
+
* `maxEntries`.
|
|
62
|
+
*/
|
|
63
|
+
export async function readRpmUpdateInfo(inputArg) {
|
|
64
|
+
assertReaderInput(inputArg);
|
|
65
|
+
assertReaderBytes(inputArg.bytes);
|
|
66
|
+
assertLinuxCompression(inputArg.compression);
|
|
67
|
+
const limits = resolveLinuxPackageLimits(inputArg.limits);
|
|
68
|
+
const decoded = await readIndexDocument(inputArg.bytes, inputArg.compression, limits);
|
|
69
|
+
const updates = [];
|
|
70
|
+
const frame = scanXmlDocument(decoded, {
|
|
71
|
+
rootName: 'updates',
|
|
72
|
+
unitName: 'update',
|
|
73
|
+
keepOtherChildren: false,
|
|
74
|
+
limits,
|
|
75
|
+
createUnit: (startArg) => new UpdateHandler(startArg, limits),
|
|
76
|
+
unit: (handlerArg, startArg, endArg) => {
|
|
77
|
+
updates.push(handlerArg.result(decoded.subarray(startArg, endArg)));
|
|
78
|
+
},
|
|
79
|
+
other: () => undefined,
|
|
80
|
+
});
|
|
81
|
+
return { ...frameOf(decoded, 'updates', frame), decoded, updates };
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Reads a plain `repomd.xml` into its frame, `<data>` units and the other
|
|
85
|
+
* root children (kept raw, in `otherElements`). A `<data>` without a `type`
|
|
86
|
+
* attribute, `<checksum>` or `<location href>` is `missing-field`; a `<data>`
|
|
87
|
+
* with two of `<checksum>`, `<open-checksum>`, `<location>`, `<timestamp>`,
|
|
88
|
+
* `<size>` or `<open-size>` is `malformed-index`. XML rules and bounds as
|
|
89
|
+
* `readRpmRepodata` (the plain input counts against `maxIndexBytes`); all
|
|
90
|
+
* bytes are views into a copy of the input.
|
|
91
|
+
*/
|
|
92
|
+
export async function readRpmRepomd(inputArg) {
|
|
93
|
+
assertReaderInput(inputArg);
|
|
94
|
+
assertReaderBytes(inputArg.bytes);
|
|
95
|
+
const limits = resolveLinuxPackageLimits(inputArg.limits);
|
|
96
|
+
const decoded = await readIndexDocument(inputArg.bytes, 'none', limits);
|
|
97
|
+
const data = [];
|
|
98
|
+
const otherElements = [];
|
|
99
|
+
const frame = scanXmlDocument(decoded, {
|
|
100
|
+
rootName: 'repomd',
|
|
101
|
+
unitName: 'data',
|
|
102
|
+
keepOtherChildren: true,
|
|
103
|
+
limits,
|
|
104
|
+
createUnit: (startArg) => new RepomdDataHandler(startArg),
|
|
105
|
+
unit: (handlerArg, startArg, endArg) => {
|
|
106
|
+
data.push(handlerArg.result(decoded.subarray(startArg, endArg)));
|
|
107
|
+
},
|
|
108
|
+
other: (nameArg, startArg, endArg) => {
|
|
109
|
+
otherElements.push({ name: nameArg, bytes: decoded.subarray(startArg, endArg), offset: startArg });
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
return { ...frameOf(decoded, 'repomd', frame), data, otherElements };
|
|
113
|
+
}
|
|
114
|
+
function frameOf(decodedArg, rootNameArg, frameArg) {
|
|
115
|
+
return {
|
|
116
|
+
prolog: decodedArg.subarray(0, frameArg.rootStart),
|
|
117
|
+
rootName: rootNameArg,
|
|
118
|
+
rootStartTag: decodedArg.subarray(frameArg.rootStart, frameArg.rootStartEnd),
|
|
119
|
+
rootAttributes: frameArg.rootAttributes.map((attribute) => ({ name: attribute.name, value: attribute.value })),
|
|
120
|
+
namespace: attributeOf(frameArg.rootAttributes, 'xmlns'),
|
|
121
|
+
rootEndTag: decodedArg.subarray(frameArg.rootEndStart, frameArg.rootEnd),
|
|
122
|
+
trailer: decodedArg.subarray(frameArg.rootEnd),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function attributeOf(attributesArg, nameArg) {
|
|
126
|
+
return attributesArg.find((attribute) => attribute.name === nameArg)?.value ?? '';
|
|
127
|
+
}
|
|
128
|
+
function hasAttribute(attributesArg, nameArg) {
|
|
129
|
+
return attributesArg.some((attribute) => attribute.name === nameArg);
|
|
130
|
+
}
|
|
131
|
+
/** The path of open element names inside one unit, for the handlers' context. */
|
|
132
|
+
class UnitHandler {
|
|
133
|
+
offset;
|
|
134
|
+
path = [];
|
|
135
|
+
constructor(offset) {
|
|
136
|
+
this.offset = offset;
|
|
137
|
+
}
|
|
138
|
+
start(depthArg, nameArg, attributesArg) {
|
|
139
|
+
const capture = this.open(depthArg, nameArg, attributesArg);
|
|
140
|
+
this.path.push(nameArg);
|
|
141
|
+
return capture;
|
|
142
|
+
}
|
|
143
|
+
end(depthArg, nameArg, textArg) {
|
|
144
|
+
this.path.pop();
|
|
145
|
+
this.close(depthArg, nameArg, textArg);
|
|
146
|
+
}
|
|
147
|
+
/** The parent element's name at `depthArg` (the unit element at depth 1). */
|
|
148
|
+
parent() {
|
|
149
|
+
return this.path[this.path.length - 1];
|
|
150
|
+
}
|
|
151
|
+
duplicate(whatArg) {
|
|
152
|
+
return new LinuxRepoError('malformed-index', `a unit holds two ${whatArg} elements`, { field: whatArg, value: this.offset });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
class PackageHandler extends UnitHandler {
|
|
156
|
+
document;
|
|
157
|
+
limits;
|
|
158
|
+
pkgid = null;
|
|
159
|
+
name = null;
|
|
160
|
+
arch = null;
|
|
161
|
+
version = null;
|
|
162
|
+
size = null;
|
|
163
|
+
files = [];
|
|
164
|
+
fileType = '';
|
|
165
|
+
constructor(document, offsetArg, limits) {
|
|
166
|
+
super(offsetArg);
|
|
167
|
+
this.document = document;
|
|
168
|
+
this.limits = limits;
|
|
169
|
+
}
|
|
170
|
+
open(depthArg, nameArg, attributesArg) {
|
|
171
|
+
if (depthArg === 0) {
|
|
172
|
+
if (this.document !== 'primary') {
|
|
173
|
+
if (!hasAttribute(attributesArg, 'pkgid')) {
|
|
174
|
+
throw this.missingKey();
|
|
175
|
+
}
|
|
176
|
+
this.pkgid = attributeOf(attributesArg, 'pkgid');
|
|
177
|
+
this.name = attributeOf(attributesArg, 'name');
|
|
178
|
+
this.arch = attributeOf(attributesArg, 'arch');
|
|
179
|
+
}
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
const parent = this.parent();
|
|
183
|
+
if (depthArg === 1) {
|
|
184
|
+
if (nameArg === 'version') {
|
|
185
|
+
if (this.version !== null) {
|
|
186
|
+
throw this.duplicate('<version>');
|
|
187
|
+
}
|
|
188
|
+
this.version = {
|
|
189
|
+
epoch: attributeOf(attributesArg, 'epoch'),
|
|
190
|
+
version: attributeOf(attributesArg, 'ver'),
|
|
191
|
+
release: attributeOf(attributesArg, 'rel'),
|
|
192
|
+
};
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
if (this.document === 'primary') {
|
|
196
|
+
if (nameArg === 'name' || nameArg === 'arch') {
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
if (nameArg === 'checksum') {
|
|
200
|
+
return attributeOf(attributesArg, 'pkgid') === 'YES';
|
|
201
|
+
}
|
|
202
|
+
if (nameArg === 'size') {
|
|
203
|
+
if (this.size !== null) {
|
|
204
|
+
throw this.duplicate('<size>');
|
|
205
|
+
}
|
|
206
|
+
this.size = {
|
|
207
|
+
package: attributeOf(attributesArg, 'package'),
|
|
208
|
+
installed: attributeOf(attributesArg, 'installed'),
|
|
209
|
+
archive: attributeOf(attributesArg, 'archive'),
|
|
210
|
+
};
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
if (this.document === 'filelists' && nameArg === 'file') {
|
|
216
|
+
return this.openFile(attributesArg);
|
|
217
|
+
}
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
if (depthArg === 2 && this.document === 'primary' && parent === 'format' && nameArg === 'file') {
|
|
221
|
+
return this.openFile(attributesArg);
|
|
222
|
+
}
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
close(depthArg, nameArg, textArg) {
|
|
226
|
+
if (textArg === null) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
if (nameArg === 'file') {
|
|
230
|
+
this.files.push({ path: textArg, type: this.fileType });
|
|
231
|
+
}
|
|
232
|
+
else if (nameArg === 'name') {
|
|
233
|
+
if (this.name !== null) {
|
|
234
|
+
throw this.duplicate('<name>');
|
|
235
|
+
}
|
|
236
|
+
this.name = textArg;
|
|
237
|
+
}
|
|
238
|
+
else if (nameArg === 'arch') {
|
|
239
|
+
if (this.arch !== null) {
|
|
240
|
+
throw this.duplicate('<arch>');
|
|
241
|
+
}
|
|
242
|
+
this.arch = textArg;
|
|
243
|
+
}
|
|
244
|
+
else if (nameArg === 'checksum') {
|
|
245
|
+
if (this.pkgid !== null) {
|
|
246
|
+
throw this.duplicate('<checksum pkgid="YES">');
|
|
247
|
+
}
|
|
248
|
+
this.pkgid = textArg;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
openFile(attributesArg) {
|
|
252
|
+
if (this.files.length + 1 > this.limits.maxEntries) {
|
|
253
|
+
throw limitExceeded('maxEntries', this.limits.maxEntries, 'files per package');
|
|
254
|
+
}
|
|
255
|
+
this.fileType = attributeOf(attributesArg, 'type');
|
|
256
|
+
return true;
|
|
257
|
+
}
|
|
258
|
+
missingKey() {
|
|
259
|
+
return new LinuxRepoError('missing-field', `a ${this.document} <package> has no pkgid`, { field: 'pkgid', value: this.offset });
|
|
260
|
+
}
|
|
261
|
+
result(bytesArg) {
|
|
262
|
+
if (this.pkgid === null) {
|
|
263
|
+
throw this.missingKey();
|
|
264
|
+
}
|
|
265
|
+
return {
|
|
266
|
+
bytes: bytesArg,
|
|
267
|
+
offset: this.offset,
|
|
268
|
+
pkgid: this.pkgid,
|
|
269
|
+
name: this.name ?? '',
|
|
270
|
+
arch: this.arch ?? '',
|
|
271
|
+
epoch: this.version?.epoch ?? '',
|
|
272
|
+
version: this.version?.version ?? '',
|
|
273
|
+
release: this.version?.release ?? '',
|
|
274
|
+
size: this.size,
|
|
275
|
+
files: this.files,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
class UpdateHandler extends UnitHandler {
|
|
280
|
+
limits;
|
|
281
|
+
id = null;
|
|
282
|
+
collection = '';
|
|
283
|
+
pending = null;
|
|
284
|
+
packages = [];
|
|
285
|
+
constructor(offsetArg, limits) {
|
|
286
|
+
super(offsetArg);
|
|
287
|
+
this.limits = limits;
|
|
288
|
+
}
|
|
289
|
+
open(depthArg, nameArg, attributesArg) {
|
|
290
|
+
const parent = this.parent();
|
|
291
|
+
if (depthArg === 1 && nameArg === 'id') {
|
|
292
|
+
return true;
|
|
293
|
+
}
|
|
294
|
+
if (depthArg === 2 && parent === 'pkglist' && nameArg === 'collection') {
|
|
295
|
+
this.collection = attributeOf(attributesArg, 'short');
|
|
296
|
+
return false;
|
|
297
|
+
}
|
|
298
|
+
if (depthArg === 3 && parent === 'collection' && this.path[1] === 'pkglist' && nameArg === 'package') {
|
|
299
|
+
if (this.packages.length + 1 > this.limits.maxEntries) {
|
|
300
|
+
throw limitExceeded('maxEntries', this.limits.maxEntries, 'packages per update');
|
|
301
|
+
}
|
|
302
|
+
this.pending = { attributes: attributesArg, fileName: null };
|
|
303
|
+
return false;
|
|
304
|
+
}
|
|
305
|
+
if (depthArg === 4 && parent === 'package' && this.pending !== null && nameArg === 'filename') {
|
|
306
|
+
return true;
|
|
307
|
+
}
|
|
308
|
+
return false;
|
|
309
|
+
}
|
|
310
|
+
close(depthArg, nameArg, textArg) {
|
|
311
|
+
if (depthArg === 1 && nameArg === 'id' && textArg !== null) {
|
|
312
|
+
if (this.id !== null) {
|
|
313
|
+
throw this.duplicate('<id>');
|
|
314
|
+
}
|
|
315
|
+
this.id = textArg;
|
|
316
|
+
}
|
|
317
|
+
else if (depthArg === 4 && nameArg === 'filename' && textArg !== null && this.pending !== null) {
|
|
318
|
+
if (this.pending.fileName !== null) {
|
|
319
|
+
throw this.duplicate('<filename>');
|
|
320
|
+
}
|
|
321
|
+
this.pending.fileName = textArg;
|
|
322
|
+
}
|
|
323
|
+
else if (depthArg === 3 && nameArg === 'package' && this.pending !== null) {
|
|
324
|
+
const attributes = this.pending.attributes;
|
|
325
|
+
this.packages.push({
|
|
326
|
+
collection: this.collection,
|
|
327
|
+
name: attributeOf(attributes, 'name'),
|
|
328
|
+
epoch: attributeOf(attributes, 'epoch'),
|
|
329
|
+
version: attributeOf(attributes, 'version'),
|
|
330
|
+
release: attributeOf(attributes, 'release'),
|
|
331
|
+
arch: attributeOf(attributes, 'arch'),
|
|
332
|
+
src: attributeOf(attributes, 'src'),
|
|
333
|
+
fileName: this.pending.fileName ?? '',
|
|
334
|
+
});
|
|
335
|
+
this.pending = null;
|
|
336
|
+
}
|
|
337
|
+
else if (depthArg === 2 && nameArg === 'collection') {
|
|
338
|
+
this.collection = '';
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
result(bytesArg) {
|
|
342
|
+
if (this.id === null) {
|
|
343
|
+
throw new LinuxRepoError('missing-field', 'an <update> has no <id>', { field: 'id', value: this.offset });
|
|
344
|
+
}
|
|
345
|
+
return { bytes: bytesArg, offset: this.offset, id: this.id, packages: this.packages };
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
class RepomdDataHandler extends UnitHandler {
|
|
349
|
+
type = null;
|
|
350
|
+
values = new Map();
|
|
351
|
+
pendingType = '';
|
|
352
|
+
open(depthArg, nameArg, attributesArg) {
|
|
353
|
+
if (depthArg === 0) {
|
|
354
|
+
if (hasAttribute(attributesArg, 'type')) {
|
|
355
|
+
this.type = attributeOf(attributesArg, 'type');
|
|
356
|
+
}
|
|
357
|
+
return false;
|
|
358
|
+
}
|
|
359
|
+
if (depthArg !== 1) {
|
|
360
|
+
return false;
|
|
361
|
+
}
|
|
362
|
+
switch (nameArg) {
|
|
363
|
+
case 'checksum':
|
|
364
|
+
case 'open-checksum':
|
|
365
|
+
case 'timestamp':
|
|
366
|
+
case 'size':
|
|
367
|
+
case 'open-size':
|
|
368
|
+
case 'location':
|
|
369
|
+
if (this.values.has(nameArg)) {
|
|
370
|
+
throw this.duplicate(`<${nameArg}>`);
|
|
371
|
+
}
|
|
372
|
+
if (nameArg === 'location') {
|
|
373
|
+
this.values.set(nameArg, { type: '', text: hasAttribute(attributesArg, 'href') ? attributeOf(attributesArg, 'href') : null });
|
|
374
|
+
return false;
|
|
375
|
+
}
|
|
376
|
+
this.pendingType = attributeOf(attributesArg, 'type');
|
|
377
|
+
return true;
|
|
378
|
+
default:
|
|
379
|
+
return false;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
close(depthArg, nameArg, textArg) {
|
|
383
|
+
if (depthArg === 1 && textArg !== null) {
|
|
384
|
+
this.values.set(nameArg, { type: this.pendingType, text: textArg });
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
result(bytesArg) {
|
|
388
|
+
const missing = (fieldArg) => new LinuxRepoError('missing-field', `a repomd <data> has no ${fieldArg}`, { field: fieldArg, value: this.offset });
|
|
389
|
+
if (this.type === null) {
|
|
390
|
+
throw missing('type');
|
|
391
|
+
}
|
|
392
|
+
const checksum = this.values.get('checksum');
|
|
393
|
+
if (checksum === undefined || checksum.text === null) {
|
|
394
|
+
throw missing('checksum');
|
|
395
|
+
}
|
|
396
|
+
const location = this.values.get('location');
|
|
397
|
+
if (location === undefined || location.text === null) {
|
|
398
|
+
throw missing('location');
|
|
399
|
+
}
|
|
400
|
+
const openChecksum = this.values.get('open-checksum');
|
|
401
|
+
return {
|
|
402
|
+
bytes: bytesArg,
|
|
403
|
+
offset: this.offset,
|
|
404
|
+
type: this.type,
|
|
405
|
+
location: location.text,
|
|
406
|
+
checksum: { type: checksum.type, value: checksum.text },
|
|
407
|
+
openChecksum: openChecksum === undefined || openChecksum.text === null ? null : { type: openChecksum.type, value: openChecksum.text },
|
|
408
|
+
timestamp: this.values.get('timestamp')?.text ?? null,
|
|
409
|
+
size: this.values.get('size')?.text ?? null,
|
|
410
|
+
openSize: this.values.get('open-size')?.text ?? null,
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb2RhdGFyZWFkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9ycG0vcmVwb2RhdGFyZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUseUJBQXlCLEVBQTRCLE1BQU0scUJBQXFCLENBQUM7QUFFMUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekgsT0FBTyxFQUFFLGVBQWUsRUFBZ0UsTUFBTSxnQkFBZ0IsQ0FBQztBQXFJL0csTUFBTSxTQUFTLEdBQWdDLElBQUksR0FBRyxDQUErQjtJQUNuRixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUM7SUFDdkIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO0lBQzFCLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQztDQUN2QixDQUFDLENBQUM7QUFFSDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWUsQ0FBQyxRQUtyQztJQUNDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0MsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUNuQyxNQUFNLFFBQVEsR0FBRyxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNwRixJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksY0FBYyxDQUFDLGVBQWUsRUFB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
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { ILinuxPackageLimits } from '../shared/limits.js';
|
|
2
|
+
/**
|
|
3
|
+
* A strict, iterative XML 1.0 scanner over the bytes of one repodata document,
|
|
4
|
+
* the reading side of `xml.ts`. It checks well-formedness and hands the
|
|
5
|
+
* elements of each unit (a child of the root) to a handler, without building a
|
|
6
|
+
* tree. Every refusal is `malformed-index` with the byte offset in
|
|
7
|
+
* `detail.value`:
|
|
8
|
+
* - the document must be strict UTF-8 holding only XML characters; an
|
|
9
|
+
* optional UTF-8 byte order mark and XML declaration may lead it, and a
|
|
10
|
+
* declared `encoding` other than UTF-8 (ASCII case-insensitive) is refused;
|
|
11
|
+
* - `<!DOCTYPE` (or any other `<!` declaration) is refused, so there are no
|
|
12
|
+
* entity definitions: only `< > & ' "` and numeric
|
|
13
|
+
* references to XML characters are accepted;
|
|
14
|
+
* - tags must match, attribute names must be unique within a tag and be
|
|
15
|
+
* separated by whitespace, values are quoted and hold no `<`, text holds no
|
|
16
|
+
* `]]>`, comments hold no `--`, a processing instruction's target is not
|
|
17
|
+
* `xml` (except the declaration at the start), and there is exactly one root;
|
|
18
|
+
* - comments, processing instructions and whitespace may sit before and after
|
|
19
|
+
* the root; inside it only whitespace may sit between units; inside a unit
|
|
20
|
+
* CDATA sections, comments, processing instructions and empty-element tags
|
|
21
|
+
* are accepted.
|
|
22
|
+
*
|
|
23
|
+
* Names are matched literally with their prefixes (no namespace processing);
|
|
24
|
+
* a name starts with an ASCII letter, `_`, `:` or a non-ASCII character and
|
|
25
|
+
* continues with those, digits, `.` and `-` (every non-ASCII character counts
|
|
26
|
+
* as a name character, a simplification of the XML name production). Values
|
|
27
|
+
* handed to the handler are decoded: references replaced, line ends
|
|
28
|
+
* normalized (CRLF and CR to LF), and in attribute values literal tabs and
|
|
29
|
+
* line ends become spaces (XML 1.0 sections 2.11 and 3.3.3).
|
|
30
|
+
*
|
|
31
|
+
* Bounds: one start tag by `maxHeaderBytes`, one unit by `maxMetadataBytes`,
|
|
32
|
+
* units and open elements at a time by `maxEntries`.
|
|
33
|
+
*/
|
|
34
|
+
export interface IXmlAttribute {
|
|
35
|
+
readonly name: string;
|
|
36
|
+
readonly value: string;
|
|
37
|
+
}
|
|
38
|
+
/** Receives the elements of one unit; `depth` 0 is the unit element itself. */
|
|
39
|
+
export interface IXmlUnitHandler {
|
|
40
|
+
/** An element starts; returning true captures its direct character data for `end`. */
|
|
41
|
+
start(depthArg: number, nameArg: string, attributesArg: readonly IXmlAttribute[]): boolean;
|
|
42
|
+
/** An element ends; `textArg` is its captured character data, or null when not captured. */
|
|
43
|
+
end(depthArg: number, nameArg: string, textArg: string | null): void;
|
|
44
|
+
}
|
|
45
|
+
export interface IXmlScanOptions {
|
|
46
|
+
/** The required root element name. */
|
|
47
|
+
rootName: string;
|
|
48
|
+
/** The unit element name among the root's children. */
|
|
49
|
+
unitName: string;
|
|
50
|
+
/** Whether other root children are accepted (repomd); otherwise they are refused. */
|
|
51
|
+
keepOtherChildren: boolean;
|
|
52
|
+
limits: Readonly<ILinuxPackageLimits>;
|
|
53
|
+
/** A handler for the unit starting at `startArg` (the offset of its `<`). */
|
|
54
|
+
createUnit(startArg: number): IXmlUnitHandler;
|
|
55
|
+
/** A unit ended: its bytes are `[startArg, endArg)`. */
|
|
56
|
+
unit(handlerArg: IXmlUnitHandler, startArg: number, endArg: number): void;
|
|
57
|
+
/** Another root child ended (only with `keepOtherChildren`). */
|
|
58
|
+
other(nameArg: string, startArg: number, endArg: number): void;
|
|
59
|
+
}
|
|
60
|
+
/** Where the root element's tags sit in the document. */
|
|
61
|
+
export interface IXmlFrameScan {
|
|
62
|
+
rootStart: number;
|
|
63
|
+
rootStartEnd: number;
|
|
64
|
+
rootAttributes: IXmlAttribute[];
|
|
65
|
+
/** The root end tag `[rootEndStart, rootEnd)`; both equal `rootStartEnd` for an empty-element root. */
|
|
66
|
+
rootEndStart: number;
|
|
67
|
+
rootEnd: number;
|
|
68
|
+
}
|
|
69
|
+
/** Scans one document; see the module comment. */
|
|
70
|
+
export declare function scanXmlDocument(documentArg: Uint8Array, optionsArg: IXmlScanOptions): IXmlFrameScan;
|