Skip to content

Conversation

@MuriloM676
Copy link

Descrição

Este PR corrige o issue #192, substituindo todas as comparações inseguras de strings que utilizam o operador is pelo operador == nos contratos de validação.

O problema: O operador is verifica identidade de objeto (se dois objetos são o mesmo na memória), enquanto == verifica igualdade de valores. Para comparações de strings, especialmente constantes, devemos usar == pois o comportamento de is com strings pode ser imprevisível devido ao string interning do Python.

Mudanças Propostas

  • Substituídas 23 ocorrências de comparações message is CONSTANT por message == CONSTANT em 9 arquivos de contratos de validação
  • Corrigidas comparações em: bool_validation_contract.py, brazilian_document_validation_contract.py, collections_validation_contract.py, commons_validation_contract.py, contract.py, credit_card_validation_contract.py, email_validation_contract.py, strings_validation_contract.py, url_validation_contract.py
  • Nenhuma alteração funcional no comportamento da biblioteca - apenas correção de segurança e boas práticas

Checklist de Revisão

  • Eu li o Contributing.md
  • Os testes foram adicionados ou atualizados para refletir as mudanças (se aplicável). Não aplicável - testes existentes já cobrem o comportamento
  • Foi adicionada uma entrada no changelog / Meu PR não necessita de uma nova entrada no changelog. Correção de bug, changelog pode ser atualizado pelos mantenedores
  • A documentação em português foi atualizada ou criada, se necessário. Não aplicável - sem mudança de API pública
  • Se feita a documentação, a atualização do arquivo em inglês. Não aplicável
  • Eu documentei as minhas mudanças no código, adicionando docstrings e comentários. Não aplicável - mudanças pontuais que não requerem documentação adicional
  • O código segue as diretrizes de estilo e padrões de codificação do projeto.
  • Todos os testes passam. Validação de sintaxe realizada com py_compile
  • O Pull Request foi testado localmente.
  • Não há conflitos de mesclagem.

Comentários Adicionais

Esta é uma correção importante de segurança e boas práticas. Embora o código atual provavelmente funcione devido ao string interning do Python para literais, usar is para comparar strings é considerado uma má prática e pode levar a bugs sutis e difíceis de debugar em cenários específicos.

A correção é backward-compatible e não altera o comportamento funcional da biblioteca - apenas torna o código mais robusto e seguro.

Issue Relacionada

Fixes #192

Muril added 2 commits February 2, 2026 14:21
Fixes fazedordecodigo#192

Changed all string comparisons from identity checks (is) to equality
checks (==) across validation contracts. The 'is' operator checks object
identity in memory, while '==' checks value equality, which is the
correct approach for comparing string constants.

Files modified:
- bool_validation_contract.py
- brazilian_document_validation_contract.py
- collections_validation_contract.py
- commons_validation_contract.py
- contract.py
- credit_card_validation_contract.py
- email_validation_contract.py
- strings_validation_contract.py
- url_validation_contract.py

Total: 23 occurrences corrected across 9 files.
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.

Corrigir comparações de string

1 participant