Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Explicit check for true instead of true-ish in OpenSSL::BN.rand

Fechada Para iniciantes
#1,116 1 comentário 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Um pull request relacionado já foi integrado.

  • #1121 de @CaptainAni187 — integrado

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
72/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Ativa
Stack de tecnologia
c, ruby
Domínio
backend, security

Direção de pesquisa

Leia a implementação de OpenSSL::BN.rand em ext/openssl/ossl_bn.c nas proximidades da linha vinculada e verifique como ela interpreta o argumento odd. O relatório sugere usar a verificação de truthiness do Ruby; primeiro confirme o comportamento pretendido e se a compatibilidade exige documentar o comportamento existente em vez disso. O trabalho estará concluído quando o comportamento ou sua documentação estiver esclarecido e coberto por um teste apropriado.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

This method has the following call sequence:

BN.rand(bits [, fill [, odd]]) -> aBN

If we look at the code at https://github.com/ruby/openssl/blob/ed948eae356b4226a10e59d772fdbbb845aecae2/ext/openssl/ossl_bn.c#L821

we see an explicit check for == Qtrue. This means passing any other value that is true-ish in Ruby is interpreted as false:

$ ruby -ropenssl -e 'p OpenSSL::BN.rand(8, 0, 1).to_i'
140
$ ruby -ropenssl -e 'p OpenSSL::BN.rand(8, 0, 1).to_i'
158

Here the first line generated an even number, even though we pass in a true-ish value.

bottom = RTEST(odd) ? 1 : 0;

I think this should be the preferred way.

If this is intentional (or should be kept to preserve behaviour), it should probably be reflected in the docs.

Linguagem predominante
C
Estrelas
276
Forks
204
Merge médio
1d 3h
PRs com merge (30d)
8

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de ruby/openssl

Todas as issues de ruby/openssl

Issues semelhantes

Mais issues de C

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.