@atcute/cbor 2.2.1 → 2.2.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/decode.js CHANGED
@@ -65,15 +65,21 @@ const readBytes = (state, length) => {
65
65
  const slice = state.b.subarray(state.p, (state.p += length));
66
66
  return toBytes(slice);
67
67
  };
68
- const readTypeInfo = (state) => {
69
- const prelude = readUint8(state);
70
- return [prelude >> 5, prelude & 0x1f];
71
- };
72
68
  const readCid = (state, length) => {
73
69
  // CID bytes are prefixed with 0x00 for historical reasons, apparently.
74
70
  const slice = state.b.subarray(state.p + 1, (state.p += length));
75
71
  return new CidLinkWrapper(slice);
76
72
  };
73
+ const decodeStringKey = (state) => {
74
+ const prelude = readUint8(state);
75
+ const type = prelude >> 5;
76
+ if (type !== 3) {
77
+ throw new TypeError(`expected map to only have string keys; got type ${type}`);
78
+ }
79
+ const info = prelude & 0x1f;
80
+ const length = readArgument(state, info);
81
+ return readString(state, length);
82
+ };
77
83
  export const decodeFirst = (buf) => {
78
84
  const len = buf.length;
79
85
  const state = {
@@ -87,47 +93,52 @@ export const decodeFirst = (buf) => {
87
93
  const prelude = readUint8(state);
88
94
  const type = prelude >> 5;
89
95
  const info = prelude & 0x1f;
90
- const arg = type < 7 ? readArgument(state, info) : 0;
91
96
  switch (type) {
92
97
  case 0: {
93
- value = arg;
98
+ value = readArgument(state, info);
94
99
  break;
95
100
  }
96
101
  case 1: {
97
- value = -1 - arg;
102
+ value = -1 - readArgument(state, info);
98
103
  break;
99
104
  }
100
105
  case 2: {
101
- value = readBytes(state, arg);
106
+ value = readBytes(state, readArgument(state, info));
102
107
  break;
103
108
  }
104
109
  case 3: {
105
- value = readString(state, arg);
110
+ value = readString(state, readArgument(state, info));
106
111
  break;
107
112
  }
108
113
  case 4: {
109
- const arr = new Array(arg);
114
+ const len = readArgument(state, info);
115
+ const arr = new Array(len);
110
116
  value = arr;
111
- if (arg > 0) {
112
- stack = { t: 1, c: arr, k: null, r: arg, n: stack };
117
+ if (len > 0) {
118
+ stack = { t: 1, c: arr, k: null, r: len, n: stack };
113
119
  continue jump;
114
120
  }
115
121
  break;
116
122
  }
117
123
  case 5: {
124
+ const len = readArgument(state, info);
118
125
  const obj = {};
119
126
  value = obj;
120
- if (arg > 0) {
121
- // `arg * 2` because we're reading both keys and values
122
- stack = { t: 0, c: obj, k: null, r: arg * 2, n: stack };
127
+ if (len > 0) {
128
+ // We'll read the key of the first item here.
129
+ const first = decodeStringKey(state);
130
+ stack = { t: 0, c: obj, k: first, r: len, n: stack };
123
131
  continue jump;
124
132
  }
125
133
  break;
126
134
  }
127
135
  case 6: {
136
+ const arg = readArgument(state, info);
128
137
  switch (arg) {
129
138
  case 42: {
130
- const [type, info] = readTypeInfo(state);
139
+ const prelude = readUint8(state);
140
+ const type = prelude >> 5;
141
+ const info = prelude & 0x1f;
131
142
  if (type !== 2) {
132
143
  throw new TypeError(`expected cid-link to be type 2 (bytes); got type ${type}`);
133
144
  }
@@ -171,20 +182,11 @@ export const decodeFirst = (buf) => {
171
182
  case 0: {
172
183
  const obj = stack.c;
173
184
  const key = stack.k;
174
- if (key === null) {
175
- if (typeof value !== 'string') {
176
- throw new TypeError(`expected map to only have string keys; got ${type}`);
177
- }
178
- stack.k = value;
179
- }
180
- else {
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;
185
+ if (key === '__proto__') {
186
+ // Guard against prototype pollution. CWE-1321
187
+ Object.defineProperty(obj, key, { enumerable: true, configurable: true, writable: true });
187
188
  }
189
+ obj[key] = value;
188
190
  break;
189
191
  }
190
192
  case 1: {
@@ -196,6 +198,10 @@ export const decodeFirst = (buf) => {
196
198
  }
197
199
  if (--stack.r !== 0) {
198
200
  // We still have more values to decode, continue
201
+ if (stack.t === 0) {
202
+ // Read the key of the next map item
203
+ stack.k = decodeStringKey(state);
204
+ }
199
205
  continue jump;
200
206
  }
201
207
  // Unwrap the stack
@@ -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
@@ -95,11 +95,6 @@ const readBytes = (state: State, length: number): Bytes => {
95
95
  return toBytes(slice);
96
96
  };
97
97
 
98
- const readTypeInfo = (state: State): [number, number] => {
99
- const prelude = readUint8(state);
100
- return [prelude >> 5, prelude & 0x1f];
101
- };
102
-
103
98
  const readCid = (state: State, length: number): CidLink => {
104
99
  // CID bytes are prefixed with 0x00 for historical reasons, apparently.
105
100
  const slice = state.b.subarray(state.p + 1, (state.p += length));
@@ -107,6 +102,19 @@ const readCid = (state: State, length: number): CidLink => {
107
102
  return new CidLinkWrapper(slice);
108
103
  };
109
104
 
105
+ const decodeStringKey = (state: State): string => {
106
+ const prelude = readUint8(state);
107
+
108
+ const type = prelude >> 5;
109
+ if (type !== 3) {
110
+ throw new TypeError(`expected map to only have string keys; got type ${type}`);
111
+ }
112
+
113
+ const info = prelude & 0x1f;
114
+ const length = readArgument(state, info);
115
+ return readString(state, length);
116
+ };
117
+
110
118
  type Container =
111
119
  | {
112
120
  /** map type */
@@ -114,7 +122,7 @@ type Container =
114
122
  /** container value */
115
123
  c: Record<string, unknown>;
116
124
  /** held key (as we decode the value) */
117
- k: string | null;
125
+ k: string;
118
126
  /** remaining elements (key + value) */
119
127
  r: number;
120
128
  /** next container in stack */
@@ -150,52 +158,60 @@ export const decodeFirst = (buf: Uint8Array): [value: any, remainder: Uint8Array
150
158
 
151
159
  const type = prelude >> 5;
152
160
  const info = prelude & 0x1f;
153
- const arg = type < 7 ? readArgument(state, info) : 0;
154
161
 
155
162
  switch (type) {
156
163
  case 0: {
157
- value = arg;
164
+ value = readArgument(state, info);
158
165
  break;
159
166
  }
160
167
  case 1: {
161
- value = -1 - arg;
168
+ value = -1 - readArgument(state, info);
162
169
  break;
163
170
  }
164
171
  case 2: {
165
- value = readBytes(state, arg);
172
+ value = readBytes(state, readArgument(state, info));
166
173
  break;
167
174
  }
168
175
  case 3: {
169
- value = readString(state, arg);
176
+ value = readString(state, readArgument(state, info));
170
177
  break;
171
178
  }
172
179
  case 4: {
173
- const arr = new Array(arg);
180
+ const len = readArgument(state, info);
181
+ const arr = new Array(len);
174
182
  value = arr;
175
183
 
176
- if (arg > 0) {
177
- stack = { t: 1, c: arr, k: null, r: arg, n: stack };
184
+ if (len > 0) {
185
+ stack = { t: 1, c: arr, k: null, r: len, n: stack };
178
186
  continue jump;
179
187
  }
180
188
 
181
189
  break;
182
190
  }
183
191
  case 5: {
192
+ const len = readArgument(state, info);
184
193
  const obj: Record<string, unknown> = {};
185
194
  value = obj;
186
195
 
187
- if (arg > 0) {
188
- // `arg * 2` because we're reading both keys and values
189
- stack = { t: 0, c: obj, k: null, r: arg * 2, n: stack };
196
+ if (len > 0) {
197
+ // We'll read the key of the first item here.
198
+ const first = decodeStringKey(state);
199
+
200
+ stack = { t: 0, c: obj, k: first, r: len, n: stack };
190
201
  continue jump;
191
202
  }
192
203
 
193
204
  break;
194
205
  }
195
206
  case 6: {
207
+ const arg = readArgument(state, info);
208
+
196
209
  switch (arg) {
197
210
  case 42: {
198
- const [type, info] = readTypeInfo(state);
211
+ const prelude = readUint8(state);
212
+
213
+ const type = prelude >> 5;
214
+ const info = prelude & 0x1f;
199
215
  if (type !== 2) {
200
216
  throw new TypeError(`expected cid-link to be type 2 (bytes); got type ${type}`);
201
217
  }
@@ -245,22 +261,13 @@ export const decodeFirst = (buf: Uint8Array): [value: any, remainder: Uint8Array
245
261
  const obj = stack.c;
246
262
  const key = stack.k;
247
263
 
248
- if (key === null) {
249
- if (typeof value !== 'string') {
250
- throw new TypeError(`expected map to only have string keys; got ${type}`);
251
- }
252
-
253
- stack.k = value;
254
- } else {
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;
264
+ if (key === '__proto__') {
265
+ // Guard against prototype pollution. CWE-1321
266
+ Object.defineProperty(obj, key, { enumerable: true, configurable: true, writable: true });
262
267
  }
263
268
 
269
+ obj[key] = value;
270
+
264
271
  break;
265
272
  }
266
273
  case 1: {
@@ -274,6 +281,12 @@ export const decodeFirst = (buf: Uint8Array): [value: any, remainder: Uint8Array
274
281
 
275
282
  if (--stack.r !== 0) {
276
283
  // We still have more values to decode, continue
284
+
285
+ if (stack.t === 0) {
286
+ // Read the key of the next map item
287
+ stack.k = decodeStringKey(state);
288
+ }
289
+
277
290
  continue jump;
278
291
  }
279
292
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@atcute/cbor",
4
- "version": "2.2.1",
4
+ "version": "2.2.2",
5
5
  "description": "lightweight DASL dCBOR42 codec library for AT Protocol",
6
6
  "keywords": [
7
7
  "atproto",
@@ -30,8 +30,8 @@
30
30
  "cbor-x": "^1.6.0"
31
31
  },
32
32
  "dependencies": {
33
- "@atcute/cid": "^2.2.1",
34
33
  "@atcute/multibase": "^1.1.3",
34
+ "@atcute/cid": "^2.2.1",
35
35
  "@atcute/uint8array": "^1.0.1"
36
36
  },
37
37
  "scripts": {