Skip to content

Valida entity_name em --example-domain contra path traversal e nomes inválidos - #33

Merged
Hirley merged 3 commits into
mainfrom
claude-hirley/ruby-gem-analysis-89b306
Aug 30, 2026
Merged

Hirley merged 3 commits into
mainfrom
claude-hirley/ruby-gem-analysis-89b306

Conversation

@Hirley

@Hirley Hirley commented Aug 30, 2026

Copy link
Copy Markdown
Owner

Resumo

  • ExampleDomainGenerator interpolava entity_name sem validação em caminhos de arquivo (lib/domain/#{entity_name}.rb etc.), permitindo path traversal (ex.: --example-domain '../../../../tmp/evil') e escrita fora do diretório alvo.
  • Nomes malformados (task_, _task, task__item) quebravam com NoMethodError; nomes iniciados por dígito (1task) geravam constantes Ruby inválidas nos arquivos escritos.
  • Adicionada validação por regex (VALID_ENTITY_NAME) que rejeita esses casos com ArgumentError antes de qualquer escrita em disco.
  • CLI#init tratava --example-domain '' (string vazia) como valor informado (truthy em Ruby); agora é tratado como opção omitida — nenhum gerador instanciado, nenhum erro levantado.
  • Extraído example_domain_requested? para manter optional_generators dentro do limite de Metrics/AbcSize do RuboCop.

Test plan

  • Specs Red→Green adicionadas em spec/generators/example_domain_generator_spec.rb (8 nomes inválidos + vazio, todos esperando ArgumentError) e spec/cli_spec.rb (--example-domain '' não levanta erro e não gera lib/domain).
  • bundle exec rspec — 54 examples, 0 failures, 100% line coverage (154/154).
  • bundle exec rubocop — 0 offenses (exceto Layout/EndOfLine, pré-existente em todo o repo ao rodar no Windows: nativo é CRLF, mas .gitattributes força LF; não é regressão desta mudança e reproduz igual na main).

🤖 Generated with Claude Code

Hirley and others added 3 commits August 30, 2026 11:13
…inválidos

ExampleDomainGenerator interpolava entity_name sem validação em caminhos de
arquivo, permitindo path traversal (--example-domain '../../../../tmp/evil')
e quebrando com NoMethodError ou constantes Ruby inválidas para nomes
malformados (task_, _task, task__item, 1task). Adiciona validação por regex
que rejeita esses casos com ArgumentError antes de qualquer escrita em disco.

CLI#init também tratava --example-domain '' como valor informado (truthy em
Ruby); agora string vazia é tratada como opção omitida, sem instanciar o
gerador nem levantar erro.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- CLI#optional_generators excedia Metrics/AbcSize após a checagem de string
  vazia; extraída para o predicado example_domain_requested?.
- Style/RedundantFreeze: regexp literal já é imutável, .freeze é redundante.
- Style/WordArray: convertido %w[...] para array literal (um dos nomes
  inválidos de teste contém espaço escapado, o que o cop não aceita em %w).

Confirmado localmente: bundle exec rspec (54 examples, 0 failures, 100%
coverage) e bundle exec rubocop (0 offenses, exceto Layout/EndOfLine
pré-existente em todo o repo ao rodar no Windows — nativo é CRLF mas
.gitattributes força LF; não é regressão desta mudança).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
O pin em v1.146.0 (SHA 55283cc) usa um manifesto de versões desatualizado:
o action não reconhece mais a imagem atual do runner ubuntu-latest
(ubuntu-24.04) e não tem build de Ruby 3.3 registrado para ela, quebrando
os 3 jobs da matrix (3.1, 3.2, 3.3) com "Unknown version" / runner
detectado como self-hosted. Atualiza o pin para v1.321.0 (SHA 95ef2b0),
release atual verificada via GitHub API.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@Hirley
Hirley merged commit 5f037e4 into main Aug 30, 2026
3 checks passed
@Hirley
Hirley deleted the claude-hirley/ruby-gem-analysis-89b306 branch August 30, 2026 15:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant