`@stdlib/string/base/percent-encode` produces malformed encoding and silently drops characters
Mantenedores costumam responder em até 1 dia
@barbierajput378-pixel já está trabalhando nisso.
Desde 28/9/2026.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 84/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- javascript, node.js
- Domínio
- tooling
Direção de pesquisa
Comece em lib/main.js e inspecione como o índice de bytes de utf16ToUTF8Array é usado com a string original. Execute as reproduções listadas para tabulação, retorno de carro e um caractere multibyte seguido de ASCII; considera-se concluído quando elas produzirem %09, %0D e %C3%A91 sem descartar caracteres.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Description
percentEncode claims RFC 3986 conformance but has two related bugs, both caused by using a UTF-8 byte index to also index the original UTF-16 string.
Root cause
utf16ToUTF8Array returns an array of UTF-8 byte octets, so the loop variable i in lib/main.js counts bytes. But str.charAt(i) (used for unreserved characters) indexes UTF-16 code units. These only coincide for pure-ASCII strings — any multi-byte character before it throws off every subsequent index.
Related Issues
Related issues # , # , and # .
Questions
No.
Demo
No response
Reproduction
var percentEncode = require('@stdlib/string/base/percent-encode');
percentEncode('\t'); // Bug 1: missing zero-padding
percentEncode('\r'); // Bug 1: missing zero-padding
percentEncode('é1'); // Bug 2: character silently dropped
Expected Results
percentEncode('\t') → '%09'
percentEncode('\r') → '%0D'
percentEncode('é1') → '%C3%A91'
Actual Results
percentEncode('\t') → '%9'
percentEncode('\r') → '%D'
percentEncode('é1') → '%C3%A9' (the '1' is dropped entirely)
Version
develop
Environments
Node.js
Browser Version
No response
Node.js / npm Version
v24.17.0
Platform
Windows
Checklist
- Read and understood the Code of Conduct.
- Searched for existing issues and pull requests.
- Linguagem predominante
- JavaScript
- Estrelas
- 6k
- Forks
- 1.3k
- Merge médio
- 2d 10h
- PRs com merge (30d)
- 386
Preparar o ambiente
Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de stdlib-js/stdlib
-
Fix JavaScript lint errorsTalvez já em andamento @Devansh-18155 assumiu há 18 dias. AbertaGood First Issue
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 82/100
stdlib-js/stdlib#15970 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Fix JavaScript lint errorsTalvez já em andamento @lb1192176991-lab assumiu há 23 dias. AbertaGood First Issue
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 90/100
stdlib-js/stdlib#15831 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
-
[Bug]: kumaraswamy/kurtosis returns non-excess kurtosis (missing −3)Talvez já em andamento @Planeshifter assumiu há 28 dias. AbertaBug Statistics
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
stdlib-js/stdlib#15461 · 5 comentários · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
[Bug]: rayleigh/mgf returns wrong values due to misplaced parenthesisTalvez já em andamento @anandkaranubc assumiu há 30 dias. AbertaBug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
stdlib-js/stdlib#15456 · 6 comentários · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
@stdlib/array/fixed-endian-factory allows misaligned byte offsets and fractional lengthsTalvez já em andamento @kanikasharma-18 assumiu há 43 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
stdlib-js/stdlib#15193 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
Todas as issues de stdlib-js/stdlib
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 1 dia
-
type/bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
flarum/framework#5301 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
AOSSIE-Org/BabyNest#284 ·
Mantenedores costumam responder em até 1 dia
-
status:untriaged
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 86/100
midnightntwrk/servicedesk#275 ·
Mantenedores costumam responder em até 1 dia