chore(vendor): import pi 0.85.1
Imported as a linear vendor commit so forge rebases do not replay the upstream root tree. git-subtree-dir: third_party/pi git-subtree-split: d981de1229ef899957bbe968bc8dcda02a21f477
This commit is contained in:
52
third_party/pi/packages/protocol/src/cbor/options.ts
vendored
Normal file
52
third_party/pi/packages/protocol/src/cbor/options.ts
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
export const UINT32_BASE = 0x1_0000_0000;
|
||||
export const MAX_UINT32 = 0xffff_ffff;
|
||||
const MAX_CONFIGURED_DEPTH = 512;
|
||||
|
||||
/** Safe defaults for untrusted protocol payloads. */
|
||||
export const DEFAULT_MAX_CBOR_BYTE_LENGTH = 16 * 1024 * 1024;
|
||||
export const DEFAULT_MAX_CBOR_CONTAINER_LENGTH = 1_000_000;
|
||||
export const DEFAULT_MAX_CBOR_DEPTH = 64;
|
||||
|
||||
export interface CborOptions {
|
||||
/** Maximum encoded input/output bytes and maximum byte/text string length. */
|
||||
maxByteLength?: number;
|
||||
/** Maximum number of elements in an array or entries in a map. */
|
||||
maxContainerLength?: number;
|
||||
/** Maximum recursive item depth. */
|
||||
maxDepth?: number;
|
||||
}
|
||||
|
||||
export interface ResolvedCborOptions {
|
||||
maxByteLength: number;
|
||||
maxContainerLength: number;
|
||||
maxDepth: number;
|
||||
}
|
||||
|
||||
export class CborError extends Error {
|
||||
constructor(message: string) {
|
||||
super(message);
|
||||
this.name = "CborError";
|
||||
}
|
||||
}
|
||||
|
||||
export const textEncoder = new TextEncoder();
|
||||
export const textDecoder = new TextDecoder("utf-8", { fatal: true, ignoreBOM: true });
|
||||
|
||||
function resolveLimit(name: string, value: number, maximum: number): number {
|
||||
if (!Number.isSafeInteger(value) || value < 0 || value > maximum) {
|
||||
throw new RangeError(`${name} must be an integer between 0 and ${maximum}`);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
export function resolveOptions(options: CborOptions | undefined): ResolvedCborOptions {
|
||||
return {
|
||||
maxByteLength: resolveLimit("maxByteLength", options?.maxByteLength ?? DEFAULT_MAX_CBOR_BYTE_LENGTH, MAX_UINT32),
|
||||
maxContainerLength: resolveLimit(
|
||||
"maxContainerLength",
|
||||
options?.maxContainerLength ?? DEFAULT_MAX_CBOR_CONTAINER_LENGTH,
|
||||
MAX_UINT32,
|
||||
),
|
||||
maxDepth: resolveLimit("maxDepth", options?.maxDepth ?? DEFAULT_MAX_CBOR_DEPTH, MAX_CONFIGURED_DEPTH),
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user