`@stdlib/string/base/percent-encode` produces malformed encoding and silently drops characters
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 84/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- javascript, node.js
- 領域
- tooling
調査の方向性
lib/main.js から始め、utf16ToUTF8Array のバイトインデックスが元の文字列とどのように使用されているかを確認してください。タブ、キャリッジリターン、マルチバイト文字の後に ASCII が続くケースについて、記載されている再現を実行してください。文字を欠落させずに %09、%0D、%C3%A91 が生成されれば完了です。
索引モデルが issue の本文から書いたものです。
説明
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.
- 主要言語
- JavaScript
- スター
- 6k
- フォーク
- 1.3k
- 平均マージ
- 1日 8時間
- マージ済み PR(30日)
- 580
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
stdlib-js/stdlib のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
メンテナーはふだん 1 日以内に返信
-
Bug Statistics
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
stdlib-js/stdlib#15461 · コメント 1 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
[Bug]: rayleigh/mgf returns wrong values due to misplaced parenthesis対応中かも @anandkaranubc が 4 日前に担当しました。 オープンBug
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
stdlib-js/stdlib#15456 · コメント 6 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
stdlib-js/stdlib#15193 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
Good First Issue
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
stdlib-js/stdlib#14759 · コメント 3 件 ·
メンテナーはふだん 1 日以内に返信
stdlib-js/stdlib の issue をすべて見る
似ている issue
-
feature task
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
RealDevSquad/website-www#1178 ·
-
add latest sol modelオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
netlify-labs/nax#56 · コメント 2 件 · リアクション 1 件 ·
-
accessibility bug revealjs
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
quarto-dev/quarto-cli#14961 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
PnX-SI/GeoNature#4435 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
openlayers/openlayers#17648 ·
メンテナーはふだん 1 日以内に返信