stripSafeWrappers function
Strip safe wrappers and env vars from a command for permission checking.
Implementation
String stripSafeWrappers(String command) {
var cmd = command.trim();
// Strip leading env vars (FOO=bar command)
while (true) {
final envMatch = RegExp(r'^(\w+)=\S+\s+(.+)').firstMatch(cmd);
if (envMatch == null) break;
final varName = envMatch.group(1)!;
if (!_safeEnvVars.contains(varName)) break;
cmd = envMatch.group(2)!.trim();
}
// Strip safe wrappers
while (true) {
final parts = cmd.split(RegExp(r'\s+'));
if (parts.isEmpty) break;
if (!_safeWrappers.contains(parts.first)) break;
// Skip flags of the wrapper command
var i = 1;
while (i < parts.length && parts[i].startsWith('-')) {
i++;
// Skip flag values for flags that take arguments
if (i < parts.length && !parts[i].startsWith('-')) {
i++;
}
}
cmd = parts.sublist(i).join(' ').trim();
if (cmd.isEmpty) break;
}
return cmd;
}