@atcute/cbor 2.1.2 → 2.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/decode.js +25 -31
- package/dist/decode.js.map +1 -1
- package/lib/decode.ts +39 -34
- package/package.json +4 -3
package/dist/decode.js
CHANGED
|
@@ -74,11 +74,6 @@ const readCid = (state, length) => {
|
|
|
74
74
|
const slice = state.b.subarray(state.p + 1, (state.p += length));
|
|
75
75
|
return new CidLinkWrapper(slice);
|
|
76
76
|
};
|
|
77
|
-
var ContainerType;
|
|
78
|
-
(function (ContainerType) {
|
|
79
|
-
ContainerType[ContainerType["MAP"] = 0] = "MAP";
|
|
80
|
-
ContainerType[ContainerType["ARRAY"] = 1] = "ARRAY";
|
|
81
|
-
})(ContainerType || (ContainerType = {}));
|
|
82
77
|
export const decodeFirst = (buf) => {
|
|
83
78
|
const len = buf.length;
|
|
84
79
|
const state = {
|
|
@@ -87,13 +82,12 @@ export const decodeFirst = (buf) => {
|
|
|
87
82
|
p: 0,
|
|
88
83
|
};
|
|
89
84
|
let stack = null;
|
|
90
|
-
let
|
|
85
|
+
let value;
|
|
91
86
|
jump: while (state.p < len) {
|
|
92
87
|
const prelude = readUint8(state);
|
|
93
88
|
const type = prelude >> 5;
|
|
94
89
|
const info = prelude & 0x1f;
|
|
95
90
|
const arg = type < 7 ? readArgument(state, info) : 0;
|
|
96
|
-
let value;
|
|
97
91
|
switch (type) {
|
|
98
92
|
case 0: {
|
|
99
93
|
value = arg;
|
|
@@ -115,7 +109,7 @@ export const decodeFirst = (buf) => {
|
|
|
115
109
|
const arr = new Array(arg);
|
|
116
110
|
value = arr;
|
|
117
111
|
if (arg > 0) {
|
|
118
|
-
stack = { t:
|
|
112
|
+
stack = { t: 1, c: arr, k: null, r: arg, n: stack };
|
|
119
113
|
continue jump;
|
|
120
114
|
}
|
|
121
115
|
break;
|
|
@@ -125,7 +119,7 @@ export const decodeFirst = (buf) => {
|
|
|
125
119
|
value = obj;
|
|
126
120
|
if (arg > 0) {
|
|
127
121
|
// `arg * 2` because we're reading both keys and values
|
|
128
|
-
stack = { t:
|
|
122
|
+
stack = { t: 0, c: obj, k: null, r: arg * 2, n: stack };
|
|
129
123
|
continue jump;
|
|
130
124
|
}
|
|
131
125
|
break;
|
|
@@ -173,44 +167,44 @@ export const decodeFirst = (buf) => {
|
|
|
173
167
|
}
|
|
174
168
|
}
|
|
175
169
|
while (stack !== null) {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
break;
|
|
182
|
-
}
|
|
183
|
-
case ContainerType.MAP: {
|
|
184
|
-
if (node.k === null) {
|
|
170
|
+
switch (stack.t) {
|
|
171
|
+
case 0: {
|
|
172
|
+
const obj = stack.c;
|
|
173
|
+
const key = stack.k;
|
|
174
|
+
if (key === null) {
|
|
185
175
|
if (typeof value !== 'string') {
|
|
186
176
|
throw new TypeError(`expected map to only have string keys; got ${type}`);
|
|
187
177
|
}
|
|
188
|
-
|
|
189
|
-
}
|
|
190
|
-
else if (node.k !== '__proto__') {
|
|
191
|
-
node.c[node.k] = value;
|
|
192
|
-
node.k = null;
|
|
178
|
+
stack.k = value;
|
|
193
179
|
}
|
|
194
180
|
else {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
181
|
+
if (key === '__proto__') {
|
|
182
|
+
// Guard against prototype pollution. CWE-1321
|
|
183
|
+
Object.defineProperty(obj, key, { enumerable: true, configurable: true, writable: true });
|
|
184
|
+
}
|
|
185
|
+
obj[key] = value;
|
|
186
|
+
stack.k = null;
|
|
198
187
|
}
|
|
199
188
|
break;
|
|
200
189
|
}
|
|
190
|
+
case 1: {
|
|
191
|
+
const arr = stack.c;
|
|
192
|
+
const index = arr.length - stack.r;
|
|
193
|
+
arr[index] = value;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
201
196
|
}
|
|
202
|
-
if (--
|
|
197
|
+
if (--stack.r !== 0) {
|
|
203
198
|
// We still have more values to decode, continue
|
|
204
199
|
continue jump;
|
|
205
200
|
}
|
|
206
201
|
// Unwrap the stack
|
|
207
|
-
value =
|
|
208
|
-
stack =
|
|
202
|
+
value = stack.c;
|
|
203
|
+
stack = stack.n;
|
|
209
204
|
}
|
|
210
|
-
result = value;
|
|
211
205
|
break;
|
|
212
206
|
}
|
|
213
|
-
return [
|
|
207
|
+
return [value, buf.subarray(state.p)];
|
|
214
208
|
};
|
|
215
209
|
export const decode = (buf) => {
|
|
216
210
|
const [value, remainder] = decodeFirst(buf);
|
package/dist/decode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../lib/decode.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../lib/decode.ts"],"names":[],"mappings":"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"}
|
package/lib/decode.ts
CHANGED
|
@@ -107,24 +107,29 @@ const readCid = (state: State, length: number): CidLink => {
|
|
|
107
107
|
return new CidLinkWrapper(slice);
|
|
108
108
|
};
|
|
109
109
|
|
|
110
|
-
const enum ContainerType {
|
|
111
|
-
MAP,
|
|
112
|
-
ARRAY,
|
|
113
|
-
}
|
|
114
|
-
|
|
115
110
|
type Container =
|
|
116
111
|
| {
|
|
117
|
-
|
|
112
|
+
/** map type */
|
|
113
|
+
t: 0;
|
|
114
|
+
/** container value */
|
|
118
115
|
c: Record<string, unknown>;
|
|
116
|
+
/** held key (as we decode the value) */
|
|
119
117
|
k: string | null;
|
|
118
|
+
/** remaining elements (key + value) */
|
|
120
119
|
r: number;
|
|
120
|
+
/** next container in stack */
|
|
121
121
|
n: Container | null;
|
|
122
122
|
}
|
|
123
123
|
| {
|
|
124
|
-
|
|
124
|
+
/** array type */
|
|
125
|
+
t: 1;
|
|
126
|
+
/** container value */
|
|
125
127
|
c: any[];
|
|
128
|
+
/** held key (not used) */
|
|
126
129
|
k: null;
|
|
130
|
+
/** remaining elements (values) */
|
|
127
131
|
r: number;
|
|
132
|
+
/** next container in stack */
|
|
128
133
|
n: Container | null;
|
|
129
134
|
};
|
|
130
135
|
|
|
@@ -138,7 +143,7 @@ export const decodeFirst = (buf: Uint8Array): [value: any, remainder: Uint8Array
|
|
|
138
143
|
};
|
|
139
144
|
|
|
140
145
|
let stack: Container | null = null;
|
|
141
|
-
let
|
|
146
|
+
let value: any;
|
|
142
147
|
|
|
143
148
|
jump: while (state.p < len) {
|
|
144
149
|
const prelude = readUint8(state);
|
|
@@ -147,8 +152,6 @@ export const decodeFirst = (buf: Uint8Array): [value: any, remainder: Uint8Array
|
|
|
147
152
|
const info = prelude & 0x1f;
|
|
148
153
|
const arg = type < 7 ? readArgument(state, info) : 0;
|
|
149
154
|
|
|
150
|
-
let value: any;
|
|
151
|
-
|
|
152
155
|
switch (type) {
|
|
153
156
|
case 0: {
|
|
154
157
|
value = arg;
|
|
@@ -171,7 +174,7 @@ export const decodeFirst = (buf: Uint8Array): [value: any, remainder: Uint8Array
|
|
|
171
174
|
value = arr;
|
|
172
175
|
|
|
173
176
|
if (arg > 0) {
|
|
174
|
-
stack = { t:
|
|
177
|
+
stack = { t: 1, c: arr, k: null, r: arg, n: stack };
|
|
175
178
|
continue jump;
|
|
176
179
|
}
|
|
177
180
|
|
|
@@ -183,7 +186,7 @@ export const decodeFirst = (buf: Uint8Array): [value: any, remainder: Uint8Array
|
|
|
183
186
|
|
|
184
187
|
if (arg > 0) {
|
|
185
188
|
// `arg * 2` because we're reading both keys and values
|
|
186
|
-
stack = { t:
|
|
189
|
+
stack = { t: 0, c: obj, k: null, r: arg * 2, n: stack };
|
|
187
190
|
continue jump;
|
|
188
191
|
}
|
|
189
192
|
|
|
@@ -237,50 +240,52 @@ export const decodeFirst = (buf: Uint8Array): [value: any, remainder: Uint8Array
|
|
|
237
240
|
}
|
|
238
241
|
|
|
239
242
|
while (stack !== null) {
|
|
240
|
-
|
|
243
|
+
switch (stack.t) {
|
|
244
|
+
case 0: {
|
|
245
|
+
const obj = stack.c;
|
|
246
|
+
const key = stack.k;
|
|
241
247
|
|
|
242
|
-
|
|
243
|
-
case ContainerType.ARRAY: {
|
|
244
|
-
const index = node.c.length - node.r;
|
|
245
|
-
node.c[index] = value;
|
|
246
|
-
|
|
247
|
-
break;
|
|
248
|
-
}
|
|
249
|
-
case ContainerType.MAP: {
|
|
250
|
-
if (node.k === null) {
|
|
248
|
+
if (key === null) {
|
|
251
249
|
if (typeof value !== 'string') {
|
|
252
250
|
throw new TypeError(`expected map to only have string keys; got ${type}`);
|
|
253
251
|
}
|
|
254
252
|
|
|
255
|
-
|
|
256
|
-
} else if (node.k !== '__proto__') {
|
|
257
|
-
node.c[node.k] = value;
|
|
258
|
-
node.k = null;
|
|
253
|
+
stack.k = value;
|
|
259
254
|
} else {
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
255
|
+
if (key === '__proto__') {
|
|
256
|
+
// Guard against prototype pollution. CWE-1321
|
|
257
|
+
Object.defineProperty(obj, key, { enumerable: true, configurable: true, writable: true });
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
obj[key] = value;
|
|
261
|
+
stack.k = null;
|
|
263
262
|
}
|
|
264
263
|
|
|
265
264
|
break;
|
|
266
265
|
}
|
|
266
|
+
case 1: {
|
|
267
|
+
const arr = stack.c;
|
|
268
|
+
const index = arr.length - stack.r;
|
|
269
|
+
|
|
270
|
+
arr[index] = value;
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
267
273
|
}
|
|
268
274
|
|
|
269
|
-
if (--
|
|
275
|
+
if (--stack.r !== 0) {
|
|
270
276
|
// We still have more values to decode, continue
|
|
271
277
|
continue jump;
|
|
272
278
|
}
|
|
273
279
|
|
|
274
280
|
// Unwrap the stack
|
|
275
|
-
value =
|
|
276
|
-
stack =
|
|
281
|
+
value = stack.c;
|
|
282
|
+
stack = stack.n;
|
|
277
283
|
}
|
|
278
284
|
|
|
279
|
-
result = value;
|
|
280
285
|
break;
|
|
281
286
|
}
|
|
282
287
|
|
|
283
|
-
return [
|
|
288
|
+
return [value, buf.subarray(state.p)];
|
|
284
289
|
};
|
|
285
290
|
|
|
286
291
|
export const decode = (buf: Uint8Array): any => {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@atcute/cbor",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.2.0",
|
|
5
5
|
"description": "lightweight DASL dCBOR42 codec library for AT Protocol",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"atproto",
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
"!lib/**/*.test.ts"
|
|
21
21
|
],
|
|
22
22
|
"exports": {
|
|
23
|
-
".": "./dist/index.js"
|
|
23
|
+
".": "./dist/index.js",
|
|
24
|
+
"./bytes": "./dist/bytes.js"
|
|
24
25
|
},
|
|
25
26
|
"sideEffects": false,
|
|
26
27
|
"devDependencies": {
|
|
@@ -29,7 +30,7 @@
|
|
|
29
30
|
"cbor-x": "^1.6.0"
|
|
30
31
|
},
|
|
31
32
|
"dependencies": {
|
|
32
|
-
"@atcute/cid": "^2.
|
|
33
|
+
"@atcute/cid": "^2.2.0",
|
|
33
34
|
"@atcute/multibase": "^1.1.2",
|
|
34
35
|
"@atcute/uint8array": "^1.0.1"
|
|
35
36
|
},
|