validateWorktreeSlug static method

void validateWorktreeSlug(
  1. String slug
)

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',
      );
    }
  }
}