sh-ast 0.1.0 → 0.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/analyze/enumerate-commands.d.ts +7 -1
- package/dist/analyze/enumerate-commands.d.ts.map +1 -1
- package/dist/analyze/enumerate-commands.js +7 -1
- package/dist/analyze/enumerate-commands.js.map +1 -1
- package/dist/analyze/index.d.ts +12 -4
- package/dist/analyze/index.d.ts.map +1 -1
- package/dist/analyze/index.js +18 -15
- package/dist/analyze/index.js.map +1 -1
- package/dist/analyze/resolve-argv0.d.ts +335 -0
- package/dist/analyze/resolve-argv0.d.ts.map +1 -0
- package/dist/analyze/resolve-argv0.js +510 -0
- package/dist/analyze/resolve-argv0.js.map +1 -0
- package/dist/analyze/resolve-word.d.ts +5 -0
- package/dist/analyze/resolve-word.d.ts.map +1 -1
- package/dist/analyze/resolve-word.js +5 -0
- package/dist/analyze/resolve-word.js.map +1 -1
- package/dist/analyze.d.ts +592 -211
- package/dist/errors.d.ts +81 -16
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +90 -17
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/parse-depth-guard.d.ts +11 -0
- package/dist/parse-depth-guard.d.ts.map +1 -0
- package/dist/parse-depth-guard.js +633 -0
- package/dist/parse-depth-guard.js.map +1 -0
- package/dist/parse.d.ts +7 -2
- package/dist/parse.d.ts.map +1 -1
- package/dist/parse.js +15 -8
- package/dist/parse.js.map +1 -1
- package/dist/sh-ast.d.ts +121 -45
- package/dist/types.d.ts +5 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/wasm-instance.js +3 -3
- package/dist/wasm-instance.js.map +1 -1
- package/package.json +1 -1
|
@@ -145,7 +145,13 @@ export interface CommandSite {
|
|
|
145
145
|
* nesting-depth guard below, regardless of how many stages/links it has.
|
|
146
146
|
*
|
|
147
147
|
* @param root - Any `ShNode` — typically a `File` from `parseSync`, but any
|
|
148
|
-
* subtree (a `Stmt`, a `Command`, or even a bare `Word`) is handled.
|
|
148
|
+
* subtree (a `Stmt`, a `Command`, or even a bare `Word`) is handled. Note
|
|
149
|
+
* `parseSync` itself already refuses (via its own `ShParseMaxDepthError`) any
|
|
150
|
+
* input whose estimated nesting exceeds *its* limit before ever producing a
|
|
151
|
+
* tree — see `parse-depth-guard.ts` — so a `root` sourced from `parseSync`
|
|
152
|
+
* has already passed that earlier, lower-level line of defense; this
|
|
153
|
+
* module's own guard below remains a second, independent backstop for
|
|
154
|
+
* trees built or mutated some other way.
|
|
149
155
|
* @throws {@link ShAnalyzeMaxDepthError} if `root`'s genuinely nested
|
|
150
156
|
* structure (subshells within subshells, chained command/process
|
|
151
157
|
* substitutions, deeply nested `if`/`case`/loop/function/`time`/`{ }`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enumerate-commands.d.ts","sourceRoot":"","sources":["../../src/analyze/enumerate-commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC/C;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CAAE,GAClE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GAC/B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEhC;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,oIAAoI;IACpI,QAAQ,CAAC,IAAI,EAAE,SAAS,cAAc,EAAE,CAAC;IACzC,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;CAC7C;AA2aD
|
|
1
|
+
{"version":3,"file":"enumerate-commands.d.ts","sourceRoot":"","sources":["../../src/analyze/enumerate-commands.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC/C;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CAAE,GAClE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GAC/B;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEhC;;;;;;;;;GASG;AACH,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;;OAOG;IACH,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,oIAAoI;IACpI,QAAQ,CAAC,IAAI,EAAE,SAAS,cAAc,EAAE,CAAC;IACzC,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;CAC7C;AA2aD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAU7D"}
|
|
@@ -364,7 +364,13 @@ function visitCommand(cmd, context, sites, depth) {
|
|
|
364
364
|
* nesting-depth guard below, regardless of how many stages/links it has.
|
|
365
365
|
*
|
|
366
366
|
* @param root - Any `ShNode` — typically a `File` from `parseSync`, but any
|
|
367
|
-
* subtree (a `Stmt`, a `Command`, or even a bare `Word`) is handled.
|
|
367
|
+
* subtree (a `Stmt`, a `Command`, or even a bare `Word`) is handled. Note
|
|
368
|
+
* `parseSync` itself already refuses (via its own `ShParseMaxDepthError`) any
|
|
369
|
+
* input whose estimated nesting exceeds *its* limit before ever producing a
|
|
370
|
+
* tree — see `parse-depth-guard.ts` — so a `root` sourced from `parseSync`
|
|
371
|
+
* has already passed that earlier, lower-level line of defense; this
|
|
372
|
+
* module's own guard below remains a second, independent backstop for
|
|
373
|
+
* trees built or mutated some other way.
|
|
368
374
|
* @throws {@link ShAnalyzeMaxDepthError} if `root`'s genuinely nested
|
|
369
375
|
* structure (subshells within subshells, chained command/process
|
|
370
376
|
* substitutions, deeply nested `if`/`case`/loop/function/`time`/`{ }`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enumerate-commands.js","sourceRoot":"","sources":["../../src/analyze/enumerate-commands.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"enumerate-commands.js","sourceRoot":"","sources":["../../src/analyze/enumerate-commands.ts"],"names":[],"mappings":"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"}
|
package/dist/analyze/index.d.ts
CHANGED
|
@@ -6,13 +6,21 @@
|
|
|
6
6
|
* inventory asks first. Its second, {@link enumerateCommands}, answers
|
|
7
7
|
* "where are all the commands, and how is each one reached?" — finding
|
|
8
8
|
* every `CallExpr` anywhere in the tree, including ones hidden inside
|
|
9
|
-
* command/process substitutions nested in words.
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* command/process substitutions nested in words. Its third,
|
|
10
|
+
* {@link resolveArgv0}, answers "what command is *actually* run, once
|
|
11
|
+
* transparent wrappers like `env`/`sudo`/`nohup` are followed?" — argv0
|
|
12
|
+
* alone is trivially spoofable through those, so this is the question a
|
|
13
|
+
* permission/policy check must ask instead. Facts only: no policy, no
|
|
14
|
+
* hardcoded command/wrapper lists beyond documented, overridable defaults
|
|
15
|
+
* (see {@link WordResolution}'s, {@link CommandSite}'s, and
|
|
16
|
+
* {@link Argv0Resolution}'s doc comments).
|
|
12
17
|
*/
|
|
13
18
|
export { resolveWord } from './resolve-word.js';
|
|
14
19
|
export type { ResolveWordOptions, WordResolution, WordResolutionReason } from './resolve-word.js';
|
|
15
20
|
export { enumerateCommands } from './enumerate-commands.js';
|
|
16
21
|
export type { CommandContext, CommandSite } from './enumerate-commands.js';
|
|
17
|
-
export {
|
|
22
|
+
export { DEFAULT_TRANSPARENT_WRAPPERS, resolveArgv0 } from './resolve-argv0.js';
|
|
23
|
+
export type { Argv0ChainWord, Argv0Resolution, Argv0UnresolvedReason, Argv0UnresolvedWord, ResolveArgv0Options, WrapperSpec, } from './resolve-argv0.js';
|
|
24
|
+
export { ShAnalyzeInvalidWrapperSpecError, ShAnalyzeMaxDepthError, ShAstError } from '../errors.js';
|
|
25
|
+
export type { Position, ShNode } from '../types.js';
|
|
18
26
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAElG,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3E,OAAO,EAAE,4BAA4B,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAChF,YAAY,EACV,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAU5B,OAAO,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AASpG,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/analyze/index.js
CHANGED
|
@@ -6,22 +6,25 @@
|
|
|
6
6
|
* inventory asks first. Its second, {@link enumerateCommands}, answers
|
|
7
7
|
* "where are all the commands, and how is each one reached?" — finding
|
|
8
8
|
* every `CallExpr` anywhere in the tree, including ones hidden inside
|
|
9
|
-
* command/process substitutions nested in words.
|
|
10
|
-
*
|
|
11
|
-
*
|
|
9
|
+
* command/process substitutions nested in words. Its third,
|
|
10
|
+
* {@link resolveArgv0}, answers "what command is *actually* run, once
|
|
11
|
+
* transparent wrappers like `env`/`sudo`/`nohup` are followed?" — argv0
|
|
12
|
+
* alone is trivially spoofable through those, so this is the question a
|
|
13
|
+
* permission/policy check must ask instead. Facts only: no policy, no
|
|
14
|
+
* hardcoded command/wrapper lists beyond documented, overridable defaults
|
|
15
|
+
* (see {@link WordResolution}'s, {@link CommandSite}'s, and
|
|
16
|
+
* {@link Argv0Resolution}'s doc comments).
|
|
12
17
|
*/
|
|
13
18
|
export { resolveWord } from './resolve-word.js';
|
|
14
19
|
export { enumerateCommands } from './enumerate-commands.js';
|
|
15
|
-
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
//
|
|
23
|
-
//
|
|
24
|
-
|
|
25
|
-
// re-exporting it (and its own transitive doc-linked types) just to
|
|
26
|
-
// silence API Extractor.
|
|
20
|
+
export { DEFAULT_TRANSPARENT_WRAPPERS, resolveArgv0 } from './resolve-argv0.js';
|
|
21
|
+
// Re-exported from the root errors module so a consumer of enumerateCommands/
|
|
22
|
+
// resolveArgv0 can `import { ShAnalyzeMaxDepthError } from 'sh-ast/analyze'`
|
|
23
|
+
// without also reaching into the root `sh-ast` entry point. `ShAstError`
|
|
24
|
+
// is the shared base every analyze-layer error extends (see
|
|
25
|
+
// `ShAnalyzeMaxDepthError`, `ShAnalyzeInvalidWrapperSpecError`), so it's
|
|
26
|
+
// re-exported here too — otherwise a consumer could not `catch`/reference
|
|
27
|
+
// the base class without also importing from the root `sh-ast` entry point
|
|
28
|
+
// (see #23).
|
|
29
|
+
export { ShAnalyzeInvalidWrapperSpecError, ShAnalyzeMaxDepthError, ShAstError } from '../errors.js';
|
|
27
30
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG5D,OAAO,EAAE,4BAA4B,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUhF,8EAA8E;AAC9E,6EAA6E;AAC7E,yEAAyE;AACzE,4DAA4D;AAC5D,yEAAyE;AACzE,0EAA0E;AAC1E,2EAA2E;AAC3E,aAAa;AACb,OAAO,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import type { CommandSite } from './enumerate-commands.js';
|
|
2
|
+
import type { WordResolution } from './resolve-word.js';
|
|
3
|
+
/**
|
|
4
|
+
* A data-only description of one "transparent wrapper" — a command whose
|
|
5
|
+
* own argv0 is not the *effective* command actually run, because it just
|
|
6
|
+
* locates and re-execs another command (`env`, `sudo`, `nohup`, …).
|
|
7
|
+
* {@link resolveArgv0} interprets every field here structurally (skip N
|
|
8
|
+
* words, recognize this literal flag, …); adding a new `WrapperSpec` never
|
|
9
|
+
* requires a code change to {@link resolveArgv0} itself — that's what makes
|
|
10
|
+
* {@link DEFAULT_TRANSPARENT_WRAPPERS} data rather than a set of hardcoded
|
|
11
|
+
* `if (name === 'env')` branches, and what lets a caller extend or replace
|
|
12
|
+
* the table with their own project-specific wrappers (e.g. a `with-retry`
|
|
13
|
+
* helper).
|
|
14
|
+
*
|
|
15
|
+
* Every flag/operand-recognizing field is checked against a word's
|
|
16
|
+
* *statically resolved* text only (its `.text` on a {@link WordResolution}
|
|
17
|
+
* `static: true` result) — a dynamic word can never be identified as one of
|
|
18
|
+
* a wrapper's own flags or operands (see {@link resolveArgv0}'s doc comment
|
|
19
|
+
* for why an unrecognizable word always ends the chain rather than being
|
|
20
|
+
* guessed through).
|
|
21
|
+
*
|
|
22
|
+
* This shape may grow new optional fields in a **minor** release as this
|
|
23
|
+
* bridge models more wrapper flag conventions; existing fields' meaning
|
|
24
|
+
* never changes.
|
|
25
|
+
*
|
|
26
|
+
* @public
|
|
27
|
+
*/
|
|
28
|
+
export interface WrapperSpec {
|
|
29
|
+
/**
|
|
30
|
+
* The literal, exact argv0 text (after quote/escape removal) that
|
|
31
|
+
* identifies this wrapper — e.g. `['env']`. Matched only against a
|
|
32
|
+
* `static: true` word; see {@link WrapperSpec}'s doc comment.
|
|
33
|
+
*
|
|
34
|
+
* Matching is **exact-name-only** — never basename matching. `sudo` does
|
|
35
|
+
* not match `/usr/bin/sudo` or `./sudo`; only a word whose *entire*
|
|
36
|
+
* resolved text equals one of `names` is recognized. This is a
|
|
37
|
+
* deliberate, narrower-than-real-world policy choice (a real shell would
|
|
38
|
+
* happily run `/usr/bin/sudo`), not an oversight: silently treating any
|
|
39
|
+
* path *ending in* a known wrapper name as that wrapper would be a
|
|
40
|
+
* different, broader matching policy this package isn't making on a
|
|
41
|
+
* caller's behalf. A caller who wants path-aware matching can express it
|
|
42
|
+
* explicitly via a custom {@link ResolveArgv0Options.transparentWrappers}
|
|
43
|
+
* table (e.g. `names: ['sudo', '/usr/bin/sudo']`).
|
|
44
|
+
*/
|
|
45
|
+
readonly names: readonly string[];
|
|
46
|
+
/**
|
|
47
|
+
* When `true`, a `NAME=value`-shaped operand (an unquoted identifier
|
|
48
|
+
* followed by `=`, e.g. `A=1`) appearing after the wrapper name is
|
|
49
|
+
* skipped — this is `env`'s and `sudo`'s own `VAR=val` *operand*
|
|
50
|
+
* mechanism (setting variables in the wrapped command's environment),
|
|
51
|
+
* which is a distinct, per-wrapper concept from the shell-level
|
|
52
|
+
* `CallExpr.assigns` prefixes {@link Argv0Resolution.assignmentsSkipped}
|
|
53
|
+
* counts.
|
|
54
|
+
*/
|
|
55
|
+
readonly skipAssignmentOperands?: boolean;
|
|
56
|
+
/** Exact flag tokens that take no operand of their own (e.g. `-i`, `-c`). */
|
|
57
|
+
readonly noArgFlags?: readonly string[];
|
|
58
|
+
/**
|
|
59
|
+
* A regular expression matched against a whole flag-position word for
|
|
60
|
+
* flag *shapes* that aren't fixed strings — e.g. `nice`'s legacy attached
|
|
61
|
+
* adjustment form (`nice -10 cmd`). Consumes no separate operand word,
|
|
62
|
+
* like {@link WrapperSpec.noArgFlags}.
|
|
63
|
+
*/
|
|
64
|
+
readonly noArgFlagPattern?: RegExp;
|
|
65
|
+
/**
|
|
66
|
+
* Exact flag tokens that take an operand (e.g. `-u user`, `-n 10`).
|
|
67
|
+
* Recognized in every standard getopt-style form:
|
|
68
|
+
*
|
|
69
|
+
* - Separate word: `-u user` (both words skipped).
|
|
70
|
+
* - Attached short form: `-uuser` (one word — everything after the flag
|
|
71
|
+
* character is the operand text, exactly like real getopt).
|
|
72
|
+
* - Clustered with preceding no-operand short flags:
|
|
73
|
+
* `-Eu user`/`-Euuser` (`-E` from {@link WrapperSpec.noArgFlags},
|
|
74
|
+
* `-u` from here) — see {@link resolveArgv0}'s doc comment for the
|
|
75
|
+
* clustering algorithm.
|
|
76
|
+
* - Attached long form (only for an entry starting with `--`):
|
|
77
|
+
* `--long-flag=value` (one word).
|
|
78
|
+
*
|
|
79
|
+
* Any of these forms is recognized without a separate `WrapperSpec`
|
|
80
|
+
* field — the shapes are derived structurally from `argFlags` and
|
|
81
|
+
* `noArgFlags` together, matching how real short-option parsing works,
|
|
82
|
+
* rather than needing to be spelled out per wrapper.
|
|
83
|
+
*/
|
|
84
|
+
readonly argFlags?: readonly string[];
|
|
85
|
+
/**
|
|
86
|
+
* Exact flag tokens (and, for a `--`-prefixed entry, its attached
|
|
87
|
+
* `--flag=value` form; for a short `-X` entry, its attached `-Xvalue`
|
|
88
|
+
* form) that make the **whole** {@link resolveArgv0} resolution
|
|
89
|
+
* unresolvable the moment they're seen, rather than being skipped like
|
|
90
|
+
* {@link WrapperSpec.argFlags} or ending the chain normally like an
|
|
91
|
+
* unrecognized word. For a flag whose *value itself* structurally embeds
|
|
92
|
+
* the real command in a way no `WrapperSpec` field can name a fixed
|
|
93
|
+
* "the wrapped command is word N" position for — e.g. `env -S string`
|
|
94
|
+
* splices `string`'s own words into argv, so the real command is
|
|
95
|
+
* *inside* that operand, not identifiable as a separate word at all (see
|
|
96
|
+
* `env`'s table entry). Reported via
|
|
97
|
+
* {@link Argv0Resolution.effective}'s `'embedded-command'` reason.
|
|
98
|
+
*/
|
|
99
|
+
readonly unresolvableFlags?: readonly string[];
|
|
100
|
+
/**
|
|
101
|
+
* Exact flag tokens whose mere presence means this wrapper's own
|
|
102
|
+
* invocation *is* the effective command — nothing after it is ever the
|
|
103
|
+
* wrapped command, regardless of what other words follow. E.g.
|
|
104
|
+
* `command -v rm` doesn't execute `rm` at all; it prints whether `rm`
|
|
105
|
+
* is a recognized command name (Bash Reference Manual §4.1). Checked
|
|
106
|
+
* independently of word position (not "the Nth flag"), and takes
|
|
107
|
+
* precedence the moment it's seen — see `command`'s table entry.
|
|
108
|
+
*/
|
|
109
|
+
readonly stopsChainFlags?: readonly string[];
|
|
110
|
+
/**
|
|
111
|
+
* The number of plain (non-flag, non-assignment-operand) words this
|
|
112
|
+
* wrapper requires *before* the wrapped command word — e.g. `timeout`'s
|
|
113
|
+
* mandatory `DURATION` operand (`timeout 10 rm -rf x`).
|
|
114
|
+
*/
|
|
115
|
+
readonly positionalOperandsBeforeCommand?: number;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* `sh-ast/analyze`'s default {@link WrapperSpec} table — every entry's
|
|
119
|
+
* flag/operand handling is hand-derived from that wrapper's own manual
|
|
120
|
+
* page (or, for shell builtins, the Bash Reference Manual/POSIX Shell &
|
|
121
|
+
* Utilities volume), cited per entry below, and cross-checked empirically
|
|
122
|
+
* against the real utility where one was locally available (GNU coreutils
|
|
123
|
+
* `env`/`nice` directly; `sudo` via `sudo -h`'s usage/option summary only
|
|
124
|
+
* — never executed, per this package's "facts only" posture and basic
|
|
125
|
+
* safety hygiene). This table is *data*, not policy: it names no
|
|
126
|
+
* "dangerous" commands, makes no safety judgment, and a caller can freely
|
|
127
|
+
* replace or extend it via {@link ResolveArgv0Options.transparentWrappers}
|
|
128
|
+
* (see {@link resolveArgv0}'s criterion-4-style configurability guarantee).
|
|
129
|
+
*
|
|
130
|
+
* Frozen (including each entry object and its own array/regexp fields) so
|
|
131
|
+
* immutability of this shared, module-scoped table is a contract, not just
|
|
132
|
+
* a convention any importer happens to honor — mirrors `visitorKeys`'s and
|
|
133
|
+
* `CHILD_TYPE_SCHEMA`'s freezing in `visitor-keys.ts`/`normalize.ts`.
|
|
134
|
+
*
|
|
135
|
+
* `xargs` is deliberately **excluded**: unlike every entry here, `xargs`
|
|
136
|
+
* doesn't simply re-exec a single wrapped command word it can point to
|
|
137
|
+
* statically — it invokes `command [initial-arguments]` once per *batch*
|
|
138
|
+
* of additional arguments assembled from its own stdin at run time
|
|
139
|
+
* (batched per `-n`/`-L`/line-splitting rules, GNU xargs(1)). Treating it
|
|
140
|
+
* as transparent would misrepresent what's actually invoked: the "wrapped
|
|
141
|
+
* command" is only ever a syntactic *prefix* of the real, stdin-dependent
|
|
142
|
+
* argv, and that prefix can itself be entirely absent (bare `xargs` reruns
|
|
143
|
+
* each stdin-derived line as its own command). No `WrapperSpec` shape here
|
|
144
|
+
* can honestly express that, so `xargs` is left for a caller to model
|
|
145
|
+
* explicitly if their use case calls for it, rather than shipped as a
|
|
146
|
+
* silently-wrong default.
|
|
147
|
+
*
|
|
148
|
+
* @see https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins — `command`, `exec` (Bash Reference Manual §4.1)
|
|
149
|
+
* @see https://pubs.opengroup.org/onlinepubs/9699919799/utilities/command.html — POSIX `command`
|
|
150
|
+
* @see https://www.gnu.org/software/coreutils/manual/html_node/env-invocation.html — GNU coreutils `env`
|
|
151
|
+
* @see https://pubs.opengroup.org/onlinepubs/9699919799/utilities/env.html — POSIX `env`
|
|
152
|
+
* @see https://pubs.opengroup.org/onlinepubs/9699919799/utilities/nohup.html — POSIX `nohup`
|
|
153
|
+
* @see https://www.gnu.org/software/coreutils/manual/html_node/nice-invocation.html — GNU coreutils `nice`
|
|
154
|
+
* @see https://pubs.opengroup.org/onlinepubs/9699919799/utilities/nice.html — POSIX `nice`
|
|
155
|
+
* @see https://pubs.opengroup.org/onlinepubs/9699919799/utilities/time.html — POSIX `time` utility (distinct from the bash `time` *reserved word*, which mvdan/sh models as a transparent `TimeClause` — see {@link WrapperSpec}'s `time` entry below)
|
|
156
|
+
* @see https://www.gnu.org/software/coreutils/manual/html_node/timeout-invocation.html — GNU coreutils `timeout`
|
|
157
|
+
* @see https://www.sudo.ws/docs/man/sudo.man/ — `sudo(8)`
|
|
158
|
+
* @see https://www.gnu.org/software/findutils/manual/html_node/find_html/xargs-options.html — GNU `xargs` (why it's excluded, above)
|
|
159
|
+
* @public
|
|
160
|
+
*/
|
|
161
|
+
export declare const DEFAULT_TRANSPARENT_WRAPPERS: readonly WrapperSpec[];
|
|
162
|
+
/**
|
|
163
|
+
* Options accepted by {@link resolveArgv0}.
|
|
164
|
+
*
|
|
165
|
+
* @public
|
|
166
|
+
*/
|
|
167
|
+
export interface ResolveArgv0Options {
|
|
168
|
+
/**
|
|
169
|
+
* The transparent-wrapper table to follow. Defaults to
|
|
170
|
+
* {@link DEFAULT_TRANSPARENT_WRAPPERS}. Pass a replacement array to drop
|
|
171
|
+
* a default entry entirely (that wrapper is then treated as an ordinary,
|
|
172
|
+
* non-transparent effective command), or add project-specific entries
|
|
173
|
+
* (e.g. a `with-retry` wrapper) — the table is plain data, not baked-in
|
|
174
|
+
* policy.
|
|
175
|
+
*
|
|
176
|
+
* Validated at the {@link resolveArgv0} boundary: a malformed entry (a
|
|
177
|
+
* non-array `names`, an empty `names`, or a wrong-typed flag field)
|
|
178
|
+
* throws {@link ShAnalyzeInvalidWrapperSpecError} immediately, rather
|
|
179
|
+
* than failing later with a confusing native `TypeError` deep inside
|
|
180
|
+
* flag matching.
|
|
181
|
+
*/
|
|
182
|
+
readonly transparentWrappers?: readonly WrapperSpec[];
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Why {@link resolveArgv0} couldn't identify a single, definite effective
|
|
186
|
+
* command — distinct from {@link WordResolutionReason}, which is about why
|
|
187
|
+
* one *word*'s text is unknowable at the shell-syntax level (an expansion,
|
|
188
|
+
* a glob, …). `Argv0UnresolvedReason` instead reflects `resolveArgv0`'s own
|
|
189
|
+
* wrapper-table-driven analysis of an otherwise statically-known word:
|
|
190
|
+
*
|
|
191
|
+
* - `'unknown-flag'` — a statically known word shaped like a flag (starts
|
|
192
|
+
* with `-`, isn't exactly `--`) for the wrapper currently being
|
|
193
|
+
* followed, but that doesn't match any flag/operand shape
|
|
194
|
+
* {@link WrapperSpec} recognizes for it. Never guessed through as the
|
|
195
|
+
* wrapped command — see {@link resolveArgv0}'s doc comment.
|
|
196
|
+
* - `'embedded-command'` — a wrapper flag whose value structurally embeds
|
|
197
|
+
* the real command rather than naming it as a separate word (e.g.
|
|
198
|
+
* `env -S 'rm -rf /'` — see {@link WrapperSpec.unresolvableFlags}'s doc
|
|
199
|
+
* comment).
|
|
200
|
+
*
|
|
201
|
+
* This union may grow in a **minor** release (mirroring
|
|
202
|
+
* `WordResolutionReason`'s and `CommandContext`'s semver policy in
|
|
203
|
+
* `resolve-word.ts`/`enumerate-commands.ts`) — a reason this version
|
|
204
|
+
* doesn't yet know about only ever accompanies `static: false`; an
|
|
205
|
+
* exhaustive `switch` should still include a `default` case.
|
|
206
|
+
*
|
|
207
|
+
* @public
|
|
208
|
+
*/
|
|
209
|
+
export type Argv0UnresolvedReason = 'unknown-flag' | 'embedded-command';
|
|
210
|
+
/**
|
|
211
|
+
* A word position {@link resolveArgv0} could not resolve to either a known
|
|
212
|
+
* static text or one of {@link WordResolution}'s own `static: false`
|
|
213
|
+
* reasons — see {@link Argv0UnresolvedReason}'s doc comment. Shares
|
|
214
|
+
* `WordResolution`'s `static: false` discriminant shape by design, so a
|
|
215
|
+
* consumer that only branches on `.static` treats it identically to any
|
|
216
|
+
* other unresolvable word.
|
|
217
|
+
*
|
|
218
|
+
* @public
|
|
219
|
+
*/
|
|
220
|
+
export interface Argv0UnresolvedWord {
|
|
221
|
+
readonly static: false;
|
|
222
|
+
readonly reason: Argv0UnresolvedReason;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* The result of statically resolving one position in an
|
|
226
|
+
* {@link Argv0Resolution.chain}: either an ordinary {@link WordResolution}
|
|
227
|
+
* (from `resolveWord`) or an {@link Argv0UnresolvedWord} (a `resolveArgv0`-
|
|
228
|
+
* level "we don't know", distinct from any reason `resolveWord` itself
|
|
229
|
+
* would report).
|
|
230
|
+
*
|
|
231
|
+
* @public
|
|
232
|
+
*/
|
|
233
|
+
export type Argv0ChainWord = WordResolution | Argv0UnresolvedWord;
|
|
234
|
+
/**
|
|
235
|
+
* The result of following a {@link CommandSite}'s argv0 through zero or
|
|
236
|
+
* more transparent wrappers to the effective command actually invoked.
|
|
237
|
+
* Facts only — no safety verdict; see {@link resolveArgv0}'s doc comment.
|
|
238
|
+
*
|
|
239
|
+
* @public
|
|
240
|
+
*/
|
|
241
|
+
export interface Argv0Resolution {
|
|
242
|
+
/**
|
|
243
|
+
* Every word resolved along the way, outermost wrapper first, ending
|
|
244
|
+
* with {@link Argv0Resolution.effective} — e.g. for
|
|
245
|
+
* `nohup env A=1 command rm x` this is the four resolutions for
|
|
246
|
+
* `nohup`, `env`, `command`, `rm`, in that order. Always has at least
|
|
247
|
+
* one element.
|
|
248
|
+
*/
|
|
249
|
+
readonly chain: readonly Argv0ChainWord[];
|
|
250
|
+
/**
|
|
251
|
+
* The last element of {@link Argv0Resolution.chain} — the effective
|
|
252
|
+
* command, or, if resolution hit a statically-unknowable word anywhere
|
|
253
|
+
* along the chain (an expansion, a glob, an unrecognized flag, an
|
|
254
|
+
* embedded-command operand, …), that unknowable result itself.
|
|
255
|
+
* **A `static: false` word is never guessed through**: the moment one is
|
|
256
|
+
* reached (whether at argv0, several wrappers deep, or synthesized by
|
|
257
|
+
* `resolveArgv0` itself for an unrecognized flag), it becomes
|
|
258
|
+
* `effective` and the chain stops — this is the security-relevant
|
|
259
|
+
* guarantee that makes `sudo -u x "$prog"` report an unknowable
|
|
260
|
+
* effective command rather than silently treating `sudo` itself as the
|
|
261
|
+
* answer, and makes `sudo -D /tmp rm x` (an unrecognized `sudo` flag)
|
|
262
|
+
* report `'unknown-flag'` rather than misreporting `rm` — or, worse,
|
|
263
|
+
* `/tmp` — as the effective command.
|
|
264
|
+
*/
|
|
265
|
+
readonly effective: Argv0ChainWord;
|
|
266
|
+
/**
|
|
267
|
+
* The number of `VAR=val` shell-assignment prefixes on the `CallExpr`
|
|
268
|
+
* itself (`CommandSite.node.assigns`, e.g. the `FOO=bar` in
|
|
269
|
+
* `FOO=bar rm x`) that were skipped to reach argv0. This is a distinct
|
|
270
|
+
* mechanism from a wrapper's own `VAR=val` *operands* (e.g. `env`'s or
|
|
271
|
+
* `sudo`'s, see {@link WrapperSpec.skipAssignmentOperands}) — always
|
|
272
|
+
* exactly `CommandSite.node.assigns`'s length, independent of the
|
|
273
|
+
* wrapper chain found afterward.
|
|
274
|
+
*/
|
|
275
|
+
readonly assignmentsSkipped: number;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Follows `site`'s argv0 through zero or more *transparent wrappers* —
|
|
279
|
+
* commands whose own argv0 isn't the command actually run, because they
|
|
280
|
+
* just locate and re-exec another command (`env FOO=1 rm -rf /`,
|
|
281
|
+
* `command rm`, `nohup rm`, `sudo -u x "$prog"`) — to the **effective**
|
|
282
|
+
* command: the one a permission/policy check must actually judge, since
|
|
283
|
+
* argv0 alone is trivially spoofable through any of these.
|
|
284
|
+
*
|
|
285
|
+
* The wrapper table ({@link ResolveArgv0Options.transparentWrappers},
|
|
286
|
+
* defaulting to {@link DEFAULT_TRANSPARENT_WRAPPERS}) is plain data: each
|
|
287
|
+
* {@link WrapperSpec} declares how to locate the word it wraps, and
|
|
288
|
+
* neither this function nor the table encodes any safety judgment about
|
|
289
|
+
* *which* commands are dangerous — matching {@link CommandSite}'s and
|
|
290
|
+
* {@link resolveWord}'s "facts only" posture. A caller can drop a default
|
|
291
|
+
* entry (that name then resolves as an ordinary, non-transparent
|
|
292
|
+
* command) or add their own (e.g. a project's `with-retry` helper) and
|
|
293
|
+
* both directions are followed identically to any built-in entry.
|
|
294
|
+
*
|
|
295
|
+
* **A statically-unknowable word is never guessed through** — three
|
|
296
|
+
* distinct cases all stop the chain immediately at that word rather than
|
|
297
|
+
* falling back to any other guess:
|
|
298
|
+
*
|
|
299
|
+
* 1. `argv0` or any wrapper's located word itself resolves `static: false`
|
|
300
|
+
* (an expansion, tilde, glob, …) — `sudo -u x "$prog"` reports
|
|
301
|
+
* `effective: { static: false, reason: 'expansion' }` with
|
|
302
|
+
* `chain: [<sudo>, <"$prog">]`, not `rm`/`sudo`/anything static.
|
|
303
|
+
* 2. A *statically known* word shaped like a flag (`-`-prefixed, not
|
|
304
|
+
* `--`) doesn't match any flag/operand shape the current
|
|
305
|
+
* {@link WrapperSpec} recognizes — `sudo -D /tmp rm x` (`-D` isn't
|
|
306
|
+
* modeled for `sudo`) reports an `effective` of `static: false` with
|
|
307
|
+
* `reason: 'unknown-flag'`, **not** `rm` (the pre-fix behavior: any
|
|
308
|
+
* unrecognized word, flag-shaped or not, was silently treated as the
|
|
309
|
+
* wrapped command — a false report that hid the real effective
|
|
310
|
+
* command behind a flag this table simply hadn't modeled yet).
|
|
311
|
+
* 3. A recognized flag's value structurally embeds the real command
|
|
312
|
+
* rather than naming it as a separate word — `env -S 'rm -rf /'`
|
|
313
|
+
* reports `effective: { static: false, reason: 'embedded-command' }`
|
|
314
|
+
* (see {@link WrapperSpec.unresolvableFlags}'s doc comment).
|
|
315
|
+
*
|
|
316
|
+
* `VAR=val` shell-assignment prefixes on the `CallExpr` itself
|
|
317
|
+
* (`CommandSite.node.assigns`, e.g. `FOO=bar rm x`) are always skipped and
|
|
318
|
+
* counted in {@link Argv0Resolution.assignmentsSkipped} — a mechanism
|
|
319
|
+
* distinct from a wrapper's own `VAR=val` *operands* (`env A=1 rm x`,
|
|
320
|
+
* `sudo A=1 rm x`), which {@link WrapperSpec.skipAssignmentOperands}
|
|
321
|
+
* handles per-wrapper.
|
|
322
|
+
*
|
|
323
|
+
* @param site - A {@link CommandSite}, typically from {@link enumerateCommands}.
|
|
324
|
+
* @param options - See {@link ResolveArgv0Options}.
|
|
325
|
+
* @throws TypeError if `site.argv` is empty — a programmer-error misuse of
|
|
326
|
+
* the API (every `CommandSite` `enumerateCommands` ever produces has at
|
|
327
|
+
* least one argv word; see its doc comment), not a "malformed shell
|
|
328
|
+
* source" case.
|
|
329
|
+
* @throws {@link ShAnalyzeInvalidWrapperSpecError} if
|
|
330
|
+
* `options.transparentWrappers` contains a malformed entry (see
|
|
331
|
+
* {@link ResolveArgv0Options.transparentWrappers}'s doc comment).
|
|
332
|
+
* @public
|
|
333
|
+
*/
|
|
334
|
+
export declare function resolveArgv0(site: CommandSite, options?: ResolveArgv0Options): Argv0Resolution;
|
|
335
|
+
//# sourceMappingURL=resolve-argv0.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-argv0.d.ts","sourceRoot":"","sources":["../../src/analyze/resolve-argv0.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAElC;;;;;;;;OAQG;IACH,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAE1C,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAExC;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAEnC;;;;;;;;;;;;;;;;;;OAkBG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEtC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAE/C;;;;;;;;OAQG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAE7C;;;;OAIG;IACH,QAAQ,CAAC,+BAA+B,CAAC,EAAE,MAAM,CAAC;CACnD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,WAAW,EA8G7D,CAAC;AAEH;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CACvD;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,kBAAkB,CAAC;AAExE;;;;;;;;;GASG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;CACxC;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,mBAAmB,CAAC;AAElE;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,CAAC;IAE1C;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IAEnC;;;;;;;;OAQG;IACH,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAmTD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,eAAe,CAgC9F"}
|