hexToBytes silently converts invalid hex characters to zero bytes
- Linguagem predominante
- JavaScript
- Estrelas
- 3
- Forks
- 4
- Merge médio
- 23min
- PRs com merge (30d)
- 2
Descrição
`hexToBytes()` only checks for even length before parsing each byte with `parseInt(..., 16)`. Invalid hex pairs return `NaN`, and assigning `NaN` into a `Uint8Array` silently stores `0`.
File evidence:
- `src/utils.ts` strips an optional `0x` prefix and checks `hex.length % 2`.
- It then assigns `parseInt(`${hex[i]}${hex[i + 1]}`, 16)` into a `Uint8Array` without checking whether the result is `NaN`.
- The helper is used by `fromTurnkeySig()` for signature bytes and by `evmPkToCommitment()` for public key commitment derivation.
Examples like `0xZZZZ` or `0x12ZZ` therefore produce zero bytes instead of throwing. Invalid hex input should be rejected before it can affect signature or key material.
Guia de contribuição
Direção de pesquisa
O problema está em `src/utils.ts` na função `hexToBytes`. Comece lendo a função para entender a lógica de análise. Adicione validação para verificar se `parseInt` retorna `NaN` e lance um erro para caracteres hexadecimais inválidos. Teste com os exemplos fornecidos (`0xZZZZ`, `0x12ZZ`) para garantir que agora lancem um erro. Procure por testes existentes para esta função ou funções relacionadas como `fromTurnkeySig` e `evmPkToCommitment` para atualizá-los.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- typescript
- Domínio
- backend-api-design, security
- Tipo de issue
- Bug
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Status de atividade
- Ativa
- Clareza
- Claramente especificada
- Facilidade para iniciantes
- 75/100