@mirnoorata/codexa 0.2.1 → 0.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.
@@ -0,0 +1,232 @@
1
+ // Package-script credit gating: what can a script body vouch for? Two evidence
2
+ // channels with distinct falsifiers — NAME trust (a script called "typecheck"
3
+ // is believed to typecheck) fails when the body's exit cannot reflect the named
4
+ // check; TOOL evidence (a runner visible in command position of the
5
+ // substitution-stripped body) fails when the token is not actually an
6
+ // invocation. Both channels resolve commands identically (resolveToolInvocation)
7
+ // so they cannot drift — drift between them caused real laundering bugs.
8
+ import { commandSubstitutionContents, shellWords, shellWrappedCommand, shellWrapperBodyIsAmbiguous, splitShellSequence, stripCommandSubstitutions, stripLeadingEnvironment, stripPackageManagerFlags, stripShellControlWords } from "./shell.js";
9
+ import { EXIT_CONSUMING_OPENERS, segmentMasksExit, stripFlowPrefix } from "./masking.js";
10
+ // Prefixes that run their argument as the command without changing its exit
11
+ // semantics — `command echo`, `exec echo`, `nohup echo`, `timeout 5 echo` all
12
+ // still run echo. A leading backslash (`\echo`) only suppresses alias lookup,
13
+ // and brace-group/subshell openers (`{ echo ...`, `(echo ...`) propagate the
14
+ // inner command's behavior.
15
+ const TRANSPARENT_EXEC_PREFIXES = new Set(["command", "builtin", "busybox", "exec", "nohup", "nice", "time", "sudo", "doas", "stdbuf", "timeout", "env"]);
16
+ // Resolve the effective command word through the transparent prefixes above,
17
+ // skipping their flags and duration arguments, group openers, and backslashes.
18
+ function resolveCommandIndex(words) {
19
+ let index = 0;
20
+ let sawPrefix = false;
21
+ while (index < words.length) {
22
+ const word = words[index].replace(/^[({\\]+/u, "");
23
+ if (word === "" || TRANSPARENT_EXEC_PREFIXES.has(word)) {
24
+ sawPrefix = true;
25
+ index += 1;
26
+ continue;
27
+ }
28
+ if (sawPrefix && (word.startsWith("-") || /^\d+(?:\.\d+)?[smhd]?$/u.test(word))) {
29
+ index += 1;
30
+ continue;
31
+ }
32
+ return { word, index };
33
+ }
34
+ return { word: undefined, index };
35
+ }
36
+ // Launchers that expose the next word as the real tool (`npx tsc`).
37
+ const TOOL_LAUNCHERS = new Set(["npx", "bunx"]);
38
+ const PACKAGE_MANAGER_EXEC_WORDS = new Set(["exec", "x", "dlx"]);
39
+ // Launcher flags that take a value (`npx -p typescript tsc`).
40
+ const LAUNCHER_VALUE_FLAGS = new Set(["-p", "--package", "-c", "--call"]);
41
+ function skipLauncherFlags(args) {
42
+ let index = 0;
43
+ while (index < args.length) {
44
+ const arg = args[index];
45
+ if (arg === "--") {
46
+ index += 1;
47
+ break;
48
+ }
49
+ if (LAUNCHER_VALUE_FLAGS.has(arg)) {
50
+ index += 2;
51
+ continue;
52
+ }
53
+ if (arg.startsWith("-")) {
54
+ index += 1;
55
+ continue;
56
+ }
57
+ break;
58
+ }
59
+ return args.slice(index);
60
+ }
61
+ function commandBasename(word) {
62
+ return (word.replace(/^[({\\]+/u, "").replace(/[)}]+$/u, "").split("/").pop() ?? "").toLowerCase();
63
+ }
64
+ // The single command-resolution path for BOTH credit channels: transparent
65
+ // prefixes, then npx/bunx and pm exec/x/dlx launchers (with their flags), down
66
+ // to the tool that actually runs. The name-veto and the evidence extractor
67
+ // must agree on what a command is — they once didn't, and the drift laundered
68
+ // `npx -y tsc --version` into a credited typecheck.
69
+ function resolveToolInvocation(words) {
70
+ const { index } = resolveCommandIndex(words);
71
+ let command = commandBasename(words[index] ?? "");
72
+ let args = words.slice(index + 1);
73
+ if (TOOL_LAUNCHERS.has(command) || ((command === "npm" || command === "pnpm" || command === "yarn") && PACKAGE_MANAGER_EXEC_WORDS.has(args[0] ?? ""))) {
74
+ const rest = skipLauncherFlags(TOOL_LAUNCHERS.has(command) ? args : args.slice(1));
75
+ command = commandBasename(rest[0] ?? "");
76
+ args = rest.slice(1);
77
+ }
78
+ return { command, args };
79
+ }
80
+ // True when a script body's exit does NOT faithfully reflect its named check, so
81
+ // the name-based credit (script "build" => build coverage) would launder a
82
+ // masked failure into a pass. Unsafe when a later segment masks an earlier
83
+ // runner, a compound opener consumes the runner's exit, a `!` negation inverts
84
+ // it, or a shell wrapper's recursively-unwrapped body is itself unsafe or could
85
+ // not be cleanly tokenized. A clean wrapper such as `sh -c "vite build"` — or a
86
+ // runner that merely takes a substitution as an argument (`vite build --define
87
+ // X=$(git rev-parse HEAD)`) — stays safe.
88
+ export function scriptNameCreditUnsafe(command) {
89
+ const segments = splitShellSequence(command);
90
+ if (segments.slice(1).some(segmentMasksExit)) {
91
+ return true;
92
+ }
93
+ return segments.some((segment) => {
94
+ const words = stripLeadingEnvironment(shellWords(segment.text));
95
+ // Resolve through group openers so `( if tsc; then :; fi )` is still seen
96
+ // as an exit-consuming compound.
97
+ const first = stripFlowPrefix(words)[0];
98
+ if (first !== undefined && (first.startsWith("!") || EXIT_CONSUMING_OPENERS.has(first) || first.startsWith("$(") || first.startsWith("`"))) {
99
+ return true;
100
+ }
101
+ const wrapped = shellWrappedCommand(words);
102
+ return wrapped !== undefined && (shellWrapperBodyIsAmbiguous(words) || scriptNameCreditUnsafe(wrapped));
103
+ });
104
+ }
105
+ // Commands a script name could plausibly be vouching for. A carrier-discarded
106
+ // substitution containing one of these means the named check itself was run
107
+ // and its exit thrown away; a substitution holding only metadata commands
108
+ // (`date`, `git rev-parse`) does not poison the name. Any package-manager
109
+ // invocation counts — `yarn build`, `pnpm run lint`, `npx tsc` — since those
110
+ // are exactly how named checks are launched.
111
+ const DISCARDED_CHECK_PATTERN = /\b(tsc|vitest|jest|pytest|eslint|biome|verify-source-hygiene|verify-public-hygiene)\b|\b(vite|next)\s+build\b|\b(?:npm|pnpm|yarn|npx|bun|bunx)\s+\S|\bnode\s+--test\b/u;
112
+ // A substitution carried by ANY command is exit-discarded — `echo $(tsc)`,
113
+ // `export X=$(tsc)`, and `git commit -m "$(tsc)"` all throw the inner exit
114
+ // away. The only propagating form is a bare assignment (`X=$(tsc)` — the
115
+ // assignment's exit IS the substitution's), which stripLeadingEnvironment
116
+ // consumes entirely, leaving no command word.
117
+ function commandDiscardedSubstitution(segment) {
118
+ const first = resolveCommandIndex(stripLeadingEnvironment(shellWords(segment.text))).word;
119
+ return first !== undefined && stripCommandSubstitutions(segment.text) !== segment.text;
120
+ }
121
+ // True when the script NAME alone cannot be trusted as evidence: somewhere in
122
+ // the body a command discards the exit of a substitution that LOOKS like the
123
+ // named check (`echo $(tsc)`, `export X=$(tsc) && echo passed`, `git commit -m
124
+ // "$(tsc)"`, or the same inside a wrapper). The discarded check never
125
+ // contributes an exit-faithful result no matter what ends the chain, so the
126
+ // name proves nothing about it. A substitution holding only metadata
127
+ // (`node build.mjs && echo $(date)`) does not poison the name, and tool
128
+ // evidence on the substitution-stripped body is unaffected either way — a
129
+ // runner visible outside substitutions keeps its own credit.
130
+ export function scriptNameTrustUnsafe(command) {
131
+ return splitShellSequence(command).some((segment) => {
132
+ if (commandDiscardedSubstitution(segment) && DISCARDED_CHECK_PATTERN.test(commandSubstitutionContents(segment.text))) {
133
+ return true;
134
+ }
135
+ const words = stripLeadingEnvironment(shellWords(segment.text));
136
+ const wrapped = shellWrappedCommand(words);
137
+ return wrapped !== undefined && (shellWrapperBodyIsAmbiguous(words) || scriptNameTrustUnsafe(wrapped));
138
+ });
139
+ }
140
+ export const NON_COMPILING_TSC_FLAG = /^(--help|-h|--version|-v|--init|--all|--showConfig|--listFilesOnly)$/u;
141
+ // True when a tsc invocation only prints info and does not typecheck, so it must
142
+ // not satisfy a TypeScript verification check.
143
+ export function isNonCompilingTscCommand(words) {
144
+ const { command, args } = resolveToolInvocation(stripPackageManagerFlags(words));
145
+ if (command !== "tsc") {
146
+ return false;
147
+ }
148
+ return args.some((arg) => NON_COMPILING_TSC_FLAG.test(arg.replace(/[)}]+$/u, "")));
149
+ }
150
+ // True when a package-script body that would otherwise count as a TypeScript
151
+ // check is actually a non-compiling tsc invocation (e.g. "tsc --help") —
152
+ // including one hidden inside a shell wrapper (`sh -c 'tsc --help'`).
153
+ export function scriptBodyIsNonCompilingTsc(scriptCommand) {
154
+ return splitShellSequence(scriptCommand).some((segment) => {
155
+ const words = stripLeadingEnvironment(shellWords(segment.text));
156
+ const wrapped = shellWrappedCommand(words);
157
+ if (wrapped !== undefined) {
158
+ return !shellWrapperBodyIsAmbiguous(words) && scriptBodyIsNonCompilingTsc(wrapped);
159
+ }
160
+ return isNonCompilingTscCommand(words);
161
+ });
162
+ }
163
+ // Tool evidence from command-position tokens of the substitution-stripped body
164
+ // — never a substring scan, so paths (`scripts/run-tsc.mjs`), env-var names
165
+ // (`TSC=1`), and prose cannot masquerade as invocations, while
166
+ // `./node_modules/.bin/tsc` still counts via its basename.
167
+ export function scriptToolEvidence(strippedCommand) {
168
+ const evidence = { tscCompile: false, tscNoEmit: false, bundlerBuild: false, lint: false, privacy: false, audit: false };
169
+ collectToolEvidence(strippedCommand, evidence);
170
+ return evidence;
171
+ }
172
+ function collectToolEvidence(strippedCommand, evidence) {
173
+ for (const segment of splitShellSequence(strippedCommand)) {
174
+ const words = stripPackageManagerFlags(stripShellControlWords(stripLeadingEnvironment(shellWords(segment.text))));
175
+ const wrapped = shellWrappedCommand(words);
176
+ if (wrapped !== undefined) {
177
+ if (!shellWrapperBodyIsAmbiguous(words)) {
178
+ collectToolEvidence(wrapped, evidence);
179
+ }
180
+ continue;
181
+ }
182
+ const { command, args } = resolveToolInvocation(words);
183
+ recordToolEvidence(command, args, evidence);
184
+ if ((command === "node" || command === "bash" || command === "sh") && !invocationIsInformational(args)) {
185
+ for (const arg of args) {
186
+ recordVerifyScriptEvidence(commandBasename(arg), evidence);
187
+ }
188
+ }
189
+ }
190
+ }
191
+ // True for invocations that only print info (`--help`, `--version`) and so
192
+ // run nothing they could vouch for. Args are normalized for glued group
193
+ // closers (`(tsc --noEmit)` leaves `--noEmit)`).
194
+ function invocationIsInformational(args) {
195
+ return args.some((arg) => {
196
+ const flag = arg.replace(/[)}]+$/u, "");
197
+ return NON_COMPILING_TSC_FLAG.test(flag) || flag === "help";
198
+ });
199
+ }
200
+ function recordToolEvidence(command, args, evidence) {
201
+ if (invocationIsInformational(args)) {
202
+ return;
203
+ }
204
+ const flags = args.map((arg) => arg.replace(/[)}]+$/u, ""));
205
+ if (command === "tsc") {
206
+ if (flags.some((flag) => flag === "--noEmit" || flag === "--noemit")) {
207
+ evidence.tscNoEmit = true;
208
+ }
209
+ else {
210
+ evidence.tscCompile = true;
211
+ }
212
+ }
213
+ if ((command === "vite" || command === "next") && flags[0] === "build") {
214
+ evidence.bundlerBuild = true;
215
+ }
216
+ if (command === "eslint" || command === "biome") {
217
+ evidence.lint = true;
218
+ }
219
+ if ((command === "npm" || command === "pnpm") && flags[0] === "audit") {
220
+ evidence.audit = true;
221
+ }
222
+ recordVerifyScriptEvidence(command, evidence);
223
+ }
224
+ function recordVerifyScriptEvidence(basename, evidence) {
225
+ if (basename.startsWith("verify-source-hygiene")) {
226
+ evidence.lint = true;
227
+ }
228
+ if (basename.startsWith("verify-public-hygiene")) {
229
+ evidence.privacy = true;
230
+ }
231
+ }
232
+ //# sourceMappingURL=script-credit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-credit.js","sourceRoot":"","sources":["../../../src/query/verification/script-credit.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,19 @@
1
- export type ShellControlOperator = "start" | "&&" | "||" | "|" | ";";
1
+ export type ShellControlOperator = "start" | "&&" | "||" | "|" | ";" | "&";
2
2
  export type ShellTruthiness = "true" | "false" | "unknown";
3
3
  export declare function splitShellSequence(command: string): Array<{
4
4
  text: string;
5
5
  operator: ShellControlOperator;
6
6
  }>;
7
+ export declare function stripCommandSubstitutions(command: string): string;
8
+ export declare function commandSubstitutionContents(command: string): string;
9
+ export declare function hasBalancedQuotes(command: string): boolean;
7
10
  export declare function segmentTruthiness(segment: string): ShellTruthiness;
8
11
  export declare function shellWords(value: string): string[];
9
12
  export declare function shellQuote(value: string): string;
10
13
  export declare function stripQuotes(value: string): string;
11
14
  export declare function isNonRunningCommand(words: string[]): boolean;
12
15
  export declare function shellWrappedCommand(words: string[]): string | undefined;
16
+ export declare function shellWrapperBodyIsAmbiguous(words: string[]): boolean;
13
17
  export declare function hasNonRunningJavaScriptTestArg(args: string[]): boolean;
14
18
  export declare function hasNonRunningPythonTestArg(args: string[]): boolean;
15
19
  export declare function hasNonRunningCommandArg(args: string[]): boolean;
@@ -3,6 +3,7 @@ export function splitShellSequence(command) {
3
3
  let quote;
4
4
  let current = "";
5
5
  let operator = "start";
6
+ command = stripCommentsAndHeredocs(command);
6
7
  for (let index = 0; index < command.length; index += 1) {
7
8
  const char = command[index];
8
9
  const next = command[index + 1];
@@ -15,24 +16,38 @@ export function splitShellSequence(command) {
15
16
  if (current.trim()) {
16
17
  segments.push({ text: current.trim(), operator });
17
18
  }
19
+ else if (operator === "&") {
20
+ // A pending background marker must survive a following separator
21
+ // (`cmd &\n`): flush it before the operator is overwritten, or the
22
+ // backgrounded runner would lose its masking.
23
+ segments.push({ text: "", operator });
24
+ }
18
25
  operator = char === "&" ? "&&" : "||";
19
26
  current = "";
20
27
  index += 1;
21
28
  continue;
22
29
  }
23
- if (!quote && char === "|") {
30
+ // A bare `&` backgrounds the preceding command, decoupling its exit code, in
31
+ // every position EXCEPT a redirection — like a real shell, `cmd&next` and
32
+ // `cmd&` background `cmd` regardless of surrounding whitespace. It is not a
33
+ // background only for `2>&1`/`>&2` (prev is `<`/`>`/`&`), `&>file` (next is
34
+ // `>`), the `&&` form (handled above), or an escaped `\&` (prev is `\`).
35
+ // Unquoted newlines terminate a command just like `;`.
36
+ const prev = command[index - 1];
37
+ const backgroundAmp = char === "&" && prev !== undefined && !/[<>&\\]/u.test(prev) && next !== ">";
38
+ if (!quote && (char === "|" || char === ";" || char === "\n" || char === "\r" || backgroundAmp)) {
24
39
  if (current.trim()) {
25
40
  segments.push({ text: current.trim(), operator });
26
41
  }
27
- operator = "|";
28
- current = "";
29
- continue;
30
- }
31
- if (!quote && char === ";") {
32
- if (current.trim()) {
33
- segments.push({ text: current.trim(), operator });
42
+ else if (operator === "&" && char !== "&") {
43
+ segments.push({ text: "", operator });
34
44
  }
35
- operator = ";";
45
+ else if ((char === "\n" || char === "\r") && (operator === "&&" || operator === "||" || operator === "|")) {
46
+ // Line continuation: `cmd &&\n next` — the newline does not terminate
47
+ // the command; the pending operator still binds the next segment.
48
+ continue;
49
+ }
50
+ operator = char === "|" ? "|" : char === "&" ? "&" : ";";
36
51
  current = "";
37
52
  continue;
38
53
  }
@@ -41,8 +56,253 @@ export function splitShellSequence(command) {
41
56
  if (current.trim()) {
42
57
  segments.push({ text: current.trim(), operator });
43
58
  }
59
+ else if (operator === "&") {
60
+ // Trailing `&` (e.g. `npm test &`) — preserve the background marker so
61
+ // callers can see the preceding runner's exit was decoupled.
62
+ segments.push({ text: "", operator });
63
+ }
44
64
  return segments;
45
65
  }
66
+ // Strip what a tokenizer must not mistake for commands: unquoted `#` comments
67
+ // (to end of line) and heredoc BODIES (`cat <<EOF ... EOF`). Both are removed
68
+ // in a single source-order pass so a `<<WORD` hidden inside a comment is never
69
+ // read as a real marker, and a comment can never absorb a pending operator.
70
+ // Quoting and `$(( ))` arithmetic are tracked so `2>&1`-style content, `||#`
71
+ // glued comments, `${#var}`, and `$((1 << 2))` are handled correctly. Dropped
72
+ // text only ever reduces credit (fail closed). Newlines are preserved as
73
+ // separators/continuations for the caller.
74
+ function stripCommentsAndHeredocs(command) {
75
+ if (!command.includes("#") && !command.includes("<<")) {
76
+ return command;
77
+ }
78
+ let out = "";
79
+ let quote;
80
+ let pos = 0;
81
+ while (pos < command.length) {
82
+ const newline = command.indexOf("\n", pos);
83
+ const hasNewline = newline !== -1;
84
+ const lineEnd = hasNewline ? newline : command.length;
85
+ const scanned = scanShellLine(command.slice(pos, lineEnd), quote);
86
+ quote = scanned.quote;
87
+ out += scanned.kept;
88
+ if (hasNewline) {
89
+ out += "\n";
90
+ }
91
+ pos = lineEnd + (hasNewline ? 1 : 0);
92
+ // Drop the body of each heredoc opened on this line, in order (`cmd <<A <<B`
93
+ // reads body A then body B). The delimiter line ends the body — leading tabs
94
+ // are stripped only for the `<<-` form, matching bash.
95
+ for (const marker of scanned.markers) {
96
+ while (pos < command.length) {
97
+ const bodyEnd = command.indexOf("\n", pos);
98
+ const hasBody = bodyEnd !== -1;
99
+ const bodyLine = command.slice(pos, hasBody ? bodyEnd : command.length).replace(/\r$/u, "");
100
+ pos = (hasBody ? bodyEnd : command.length) + (hasBody ? 1 : 0);
101
+ if ((marker.dash ? bodyLine.replace(/^\t+/u, "") : bodyLine) === marker.delimiter) {
102
+ break;
103
+ }
104
+ if (!hasBody) {
105
+ break;
106
+ }
107
+ }
108
+ }
109
+ }
110
+ return out;
111
+ }
112
+ function scanShellLine(line, quoteIn) {
113
+ let kept = "";
114
+ let quote = quoteIn;
115
+ let arithParens = 0;
116
+ const markers = [];
117
+ for (let i = 0; i < line.length; i += 1) {
118
+ const char = line[i];
119
+ if (quote) {
120
+ kept += char;
121
+ if (char === quote && line[i - 1] !== "\\") {
122
+ quote = undefined;
123
+ }
124
+ continue;
125
+ }
126
+ if (char === "'" || char === '"') {
127
+ quote = char;
128
+ kept += char;
129
+ continue;
130
+ }
131
+ // A `#` only starts a comment at a word boundary (start, whitespace, or an
132
+ // operator) — not inside `file#1` or `${X#pat}`.
133
+ if (char === "#" && (i === 0 || /[\s;|&]/u.test(line[i - 1]))) {
134
+ break;
135
+ }
136
+ if (char === "$" && line[i + 1] === "(" && line[i + 2] === "(") {
137
+ arithParens += 2;
138
+ kept += "$((";
139
+ i += 2;
140
+ continue;
141
+ }
142
+ if (arithParens > 0) {
143
+ if (char === "(") {
144
+ arithParens += 1;
145
+ }
146
+ else if (char === ")") {
147
+ arithParens -= 1;
148
+ }
149
+ kept += char;
150
+ continue;
151
+ }
152
+ if (char === "<" && line[i + 1] === "<") {
153
+ if (line[i + 2] === "<") {
154
+ kept += "<<<";
155
+ i += 2;
156
+ continue;
157
+ }
158
+ // Match the FULL bash delimiter word (any run of non-blank shell-word
159
+ // chars: `EOF`, `EOF-1`, `EOF.txt`, digit-led `1-2`), so the body
160
+ // terminates only on an exact full-word line — capturing just a `\w+`
161
+ // prefix would end the body early and re-expose its data as commands.
162
+ // Arithmetic `$((1 << 2))` is already consumed above, so this cannot
163
+ // misfire on a shift.
164
+ const marker = /^<<(-?)[ \t]*(['"]?)([^\s'"`<>|&;()]+)\2/u.exec(line.slice(i));
165
+ if (marker) {
166
+ markers.push({ delimiter: marker[3], dash: marker[1] === "-" });
167
+ kept += marker[0];
168
+ i += marker[0].length - 1;
169
+ continue;
170
+ }
171
+ }
172
+ kept += char;
173
+ }
174
+ return { kept, quote, markers };
175
+ }
176
+ // Remove `$(...)` (depth-tracked) and backtick command-substitution spans that
177
+ // are not single-quoted literals. A command inside a substitution never directly
178
+ // decides the script's exit, so name-credit matching must not see it; the text
179
+ // outside substitutions is returned intact. Follows shell quoting: `'` is a
180
+ // literal inside double quotes (an apostrophe must not flip quote state), `"`
181
+ // is a literal inside single quotes, substitutions still expand inside double
182
+ // quotes, and quotes inside a substitution shield its parens from depth
183
+ // counting. Unbalanced spans strip to the end (fail closed: less text to match
184
+ // means less credit).
185
+ export function stripCommandSubstitutions(command) {
186
+ return scanCommandSubstitutions(command).outside;
187
+ }
188
+ // The text INSIDE `$(...)`/backtick substitutions — what a script discards when
189
+ // a non-running carrier wraps them. Callers use it to ask whether the discarded
190
+ // command looks like a named check.
191
+ export function commandSubstitutionContents(command) {
192
+ return scanCommandSubstitutions(command).inside;
193
+ }
194
+ // Each removed substitution leaves a sentinel token in the outside text so
195
+ // stripping can never glue two surrounding words into a phrase that was not in
196
+ // the command (`vite $(X) build` must not fabricate a `vite build` match).
197
+ const SUBSTITUTION_SENTINEL = "__codexa_substitution__";
198
+ function scanCommandSubstitutions(command) {
199
+ let outside = "";
200
+ let inside = "";
201
+ let quote;
202
+ let outerQuote;
203
+ let backtick = false;
204
+ let depth = 0;
205
+ for (let index = 0; index < command.length; index += 1) {
206
+ const char = command[index];
207
+ if (char === "\\" && quote !== "'") {
208
+ if (depth === 0 && !backtick) {
209
+ outside += char + (command[index + 1] ?? "");
210
+ }
211
+ else {
212
+ inside += char + (command[index + 1] ?? "");
213
+ }
214
+ index += 1;
215
+ continue;
216
+ }
217
+ if ((char === "'" || char === '"') && (quote === undefined || quote === char)) {
218
+ quote = quote === char ? undefined : char;
219
+ if (depth === 0 && !backtick) {
220
+ outside += char;
221
+ }
222
+ else {
223
+ inside += char;
224
+ }
225
+ continue;
226
+ }
227
+ if (quote === "'") {
228
+ if (depth === 0 && !backtick) {
229
+ outside += char;
230
+ }
231
+ else {
232
+ inside += char;
233
+ }
234
+ continue;
235
+ }
236
+ if (char === "`") {
237
+ backtick = !backtick;
238
+ if (!backtick) {
239
+ outside += SUBSTITUTION_SENTINEL;
240
+ inside += "\n";
241
+ }
242
+ continue;
243
+ }
244
+ if (backtick) {
245
+ inside += char;
246
+ continue;
247
+ }
248
+ if (char === "$" && command[index + 1] === "(") {
249
+ if (depth === 0) {
250
+ // The substitution opens a fresh quoting context; remember the outer
251
+ // double-quote state so it resumes when the substitution closes.
252
+ outerQuote = quote;
253
+ quote = undefined;
254
+ }
255
+ depth += 1;
256
+ index += 1;
257
+ continue;
258
+ }
259
+ if (depth > 0) {
260
+ if (quote === undefined) {
261
+ if (char === "(") {
262
+ depth += 1;
263
+ }
264
+ else if (char === ")") {
265
+ depth -= 1;
266
+ if (depth === 0) {
267
+ quote = outerQuote;
268
+ outside += SUBSTITUTION_SENTINEL;
269
+ inside += "\n";
270
+ continue;
271
+ }
272
+ }
273
+ }
274
+ inside += char;
275
+ continue;
276
+ }
277
+ outside += char;
278
+ }
279
+ if (depth > 0 || backtick) {
280
+ // Unbalanced span stripped to the end — still mark that one was here.
281
+ outside += SUBSTITUTION_SENTINEL;
282
+ }
283
+ return { outside, inside };
284
+ }
285
+ // True when single/double quotes in a command string are balanced. The word
286
+ // tokenizer cannot represent nested quoting, so a doubly shell-wrapped command
287
+ // unwraps to a mangled, unbalanced inner string whose masking operators are lost
288
+ // on re-tokenization; callers treat an unbalanced result as unverifiable.
289
+ export function hasBalancedQuotes(command) {
290
+ let quote;
291
+ for (let index = 0; index < command.length; index += 1) {
292
+ const char = command[index];
293
+ if (char === "\\" && quote !== "'") {
294
+ index += 1;
295
+ continue;
296
+ }
297
+ if (quote === undefined && (char === "'" || char === '"')) {
298
+ quote = char;
299
+ }
300
+ else if (char === quote) {
301
+ quote = undefined;
302
+ }
303
+ }
304
+ return quote === undefined;
305
+ }
46
306
  export function segmentTruthiness(segment) {
47
307
  const words = stripShellControlWords(stripLeadingEnvironment(shellWords(segment)));
48
308
  const first = words[0];
@@ -88,6 +348,25 @@ export function shellWrappedCommand(words) {
88
348
  }
89
349
  return undefined;
90
350
  }
351
+ // True when a shell wrapper's `-c` body could not be cleanly isolated. A
352
+ // well-formed `sh -c "<body>"` keeps the whole body in one token, so any extra
353
+ // tokens after it mean the tokenizer split a body containing escaped/nested
354
+ // quotes it cannot represent (e.g. `bash -lc "npm test --grep \"x\" || true"`).
355
+ // The extracted body is then a truncated prefix that silently drops a trailing
356
+ // mask, so callers must fail closed instead of analyzing it.
357
+ export function shellWrapperBodyIsAmbiguous(words) {
358
+ const first = words[0];
359
+ if (first !== "bash" && first !== "sh" && first !== "zsh") {
360
+ return false;
361
+ }
362
+ for (let index = 1; index < words.length; index += 1) {
363
+ const word = words[index];
364
+ if (word === "-c" || word === "-lc" || word === "-cl" || (word.startsWith("-") && word.includes("c"))) {
365
+ return index + 2 < words.length;
366
+ }
367
+ }
368
+ return false;
369
+ }
91
370
  export function hasNonRunningJavaScriptTestArg(args) {
92
371
  return args.some((arg) => ["--version", "-v", "-V", "--help", "-h", "help"].includes(arg));
93
372
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/query/verification/shell.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/query/verification/shell.ts"],"names":[],"mappings":"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"}