diff options
| author | Agando <roduccomm@gmail.com> | 2026-10-23 18:25:52 +0200 |
|---|---|---|
| committer | Agando <roduccomm@gmail.com> | 2026-10-23 18:25:52 +0200 |
| commit | 9c27d3790b594c94430015675c91ce618c61be1d (patch) | |
| tree | d7f8be0f194d3bb8346a77d9e4b63b53d41200d7 /modules/core/module-fs.js | |
| parent | 2bc11203b73fe2eb210ce3dd643773e625609c25 (diff) | |
fix(newos4): an invalid grep pattern returns a message, not an exception (v4.6.64)
Packet 8. `new RegExp(pattern)` sat unguarded in the terminal grep handler and in
VFS find()/grep(), so a bad pattern threw out of the command handler into the error
ledger -- the same ledger packet 2 had to stop trusting.
- module-fs.js grep: compile in try/catch, print
"grep: invalid pattern: <pattern> (<engine message>)" as a warning and return
- virtual-fs.js find()/grep(): same guard, return [] and stash the message on
_lastPatternError instead of throwing into the module error wrapper
Verified live on v4.6.64 with the packet's own repro: `grep "/\bug_id\" file` prints
the message, the error counter stays 0 (was: one ledger entry per call), a valid
pattern still matches, and fs.grep('[') returns [] instead of throwing.
Diffstat (limited to 'modules/core/module-fs.js')
| -rw-r--r-- | modules/core/module-fs.js | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/modules/core/module-fs.js b/modules/core/module-fs.js index fd1dfc1..415bd92 100644 --- a/modules/core/module-fs.js +++ b/modules/core/module-fs.js @@ -238,7 +238,16 @@ class FileSystemModule { } const pattern = args[ai]; const target = args[ai + 1]; if (!pattern) return this.terminal.print('Usage: grep [-n] [-i] [-c] [-l] <pattern> [filename]', 'warning'); - const re = new RegExp(pattern, opt.ignoreCase ? 'i' : ''); + // v4.6.64: an invalid pattern is user input, not a system fault. It used to throw + // out of the command handler into the error ledger, polluting the counter that + // packet §2 says nobody can trust (packet §8). + let re; + try { + re = new RegExp(pattern, opt.ignoreCase ? 'i' : ''); + } catch (e) { + this.terminal.print('grep: invalid pattern: ' + pattern + ' (' + e.message + ')', 'warning'); + return; + } const hits = (line) => (opt.invert ? !re.test(line) : re.test(line)); if (target) { const c = this.terminal.fs.readFile(target); |