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

`@stdlib/string/base/percent-encode` produces malformed encoding and silently drops characters

Aberta Para iniciantes
#15,595 6 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

@barbierajput378-pixel já está trabalhando nisso.

Desde 28/9/2026.

  • #15618 de @MahmadHadi — fechado sem integrar
  • #15620 de @barbierajput378-pixel — aberto

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

Bug
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

Abrir no Codespaces

Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.

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 stdlib-js/stdlib

Todas as issues de stdlib-js/stdlib

Issues semelhantes

Mais issues de JavaScript

Receba novas issues na sua caixa de entrada

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