(raw)
| 202 | return LEAKED_PAYLOAD_NAME_RE.test(scope.slice(0, LEAKED_PAYLOAD_NAME_WINDOW)) && |
| 203 | LEAKED_PAYLOAD_ARGS_RE.test(scope); |
| 204 | }; |
| 205 | |
| 206 | /** |
| 207 | * 正文之后的裸负载候选(行首 '{')的"像不像负载"谓词 —— 比首位谓词多两道上界: |
| 208 | * 从对象的 '{' 起 256 字符内必须见到 "name"、4352 字符(256 + 4 KiB)内必须见到 |
| 209 | * "arguments"(两个窗口都从 '{' 量起,不是从 "name" 之后量起),对象必须在 16 KiB 内 |
| 210 | * 配平。上界是流式扣留的代价封顶:回答中间打印出来的一份 package.json 也以行首 '{' |
| 211 | * 开头、前 256 字符里就有 "name",不能让交付停到它配平为止。整段路径用**同一个** |
| 212 | * 谓词、**同一组上界**判候选,两条路径才对同一份文本给出同一个结果(parity, |
| 213 | * review loop 2): |
| 214 | * - 已在 16 KiB 内配平:两个键都必须落在对象自己的范围里(与首位谓词同一条纪律: |
| 215 | * 后文一个真调用的键不能把前面一个普通对象点着),"arguments" 仍受窗口约束。 |
| 216 | * - 16 KiB 内没配平(永远配不平、或在更远处才配平 —— 流式在 16 KiB 处分不清 |
| 217 | * 两者,整段路径也就不去分):只看窗口;结算点把它按"配不平"处理(残片切点 + |
| 218 | * 同一条 warning),两条路径给出同一个结果。 |
| 219 | * 便宜的窗口判断先于配平扫描(配平是 O(对象长度),见 isLeakedToolPayloadShape)。 |
| 220 | */ |
| 221 | const AFTER_PROSE_ARGS_WINDOW = LEAKED_PAYLOAD_NAME_WINDOW + 4096; |
| 222 | const AFTER_PROSE_PAYLOAD_MAX = 16 * 1024; |
| 223 | // 整段路径快路径用:文本里有没有任何一个行首 '{'(与 nextLineStartBrace 同一定义)。 |
| 224 | const LINE_START_BRACE_RE = /(?:^|\n)[ \t\r]*\{/; |
| 225 | /** 正文之后的配平:只在 AFTER_PROSE_PAYLOAD_MAX 内找闭合,超出即视为配不平(两条路径同一上界)。 */ |
| 226 | const extractAfterProseObject = (text, start) => { |
| 227 | const object = extractBalancedObject(text.slice(start, start + AFTER_PROSE_PAYLOAD_MAX), 0); |
no outgoing calls
no test coverage detected