`@stdlib/string/base/percent-encode` produces malformed encoding and silently drops characters
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 84/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- javascript, node.js
- Bereich
- tooling
Rechercherichtung
Beginnen Sie in lib/main.js und untersuchen Sie, wie der Byte-Index von utf16ToUTF8Array mit der ursprünglichen Zeichenkette verwendet wird. Führen Sie die aufgeführten Reproduktionen für Tabulator, Wagenrücklauf und ein Multibyte-Zeichen gefolgt von ASCII aus; als erledigt gilt es, wenn sie %09, %0D und %C3%A91 erzeugen, ohne Zeichen zu verlieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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.
- Vorherrschende Sprache
- JavaScript
- Sterne
- 6k
- Forks
- 1.3k
- Ø Merge
- 1 T. 10 Std.
- Gemergte PRs (30 T.)
- 575
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus stdlib-js/stdlib
-
Bug CI
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
stdlib-js/stdlib#15635 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
[Bug]: kumaraswamy/kurtosis returns non-excess kurtosis (missing −3)Evtl. vergeben @Planeshifter hat das vor 2 Tagen übernommen. OffenBug Statistics
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
stdlib-js/stdlib#15461 · 1 Kommentar · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
[Bug]: rayleigh/mgf returns wrong values due to misplaced parenthesisEvtl. vergeben @anandkaranubc hat das vor 5 Tagen übernommen. OffenBug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
stdlib-js/stdlib#15456 · 6 Kommentare · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
stdlib-js/stdlib#15193 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Good First Issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
stdlib-js/stdlib#14759 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in stdlib-js/stdlib
Ähnliche Issues
-
Add google analyticsOffen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
NCAR/music-box-interactive#628 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
remotion-dev/remotion#11847 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
phoenixframework/phoenix_live_view#4456 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
AllTheMods/ATM-10#4436 ·
Maintainer antworten meist innerhalb von 5 Tagen