validateWorktreeSlug static method
Validates a worktree slug to prevent path traversal and directory escape.
The slug is joined into .neomage/worktrees/<slug> via path.join, which
normalizes .. segments. Forward slashes are allowed for nesting (e.g.
asm/feature-foo); each segment is validated independently.
Throws synchronously -- callers rely on this running before any side effects.
Implementation
static void validateWorktreeSlug(String slug) {
if (slug.length > _maxWorktreeSlugLength) {
throw ArgumentError(
'Invalid worktree name: must be $_maxWorktreeSlugLength characters '
'or fewer (got ${slug.length})',
);
}
for (final segment in slug.split('/')) {
if (segment == '.' || segment == '..') {
throw ArgumentError(
'Invalid worktree name "$slug": must not contain "." or ".." path segments',
);
}
if (!_validWorktreeSlugSegment.hasMatch(segment)) {
throw ArgumentError(
'Invalid worktree name "$slug": each "/"-separated segment must be '
'non-empty and contain only letters, digits, dots, underscores, and dashes',
);
}
}
}