Misskey: URLがエンコードされていない場合に外部画像の取り込みに失敗する

Created on 6 Sep 2018  ·  7Comments  ·  Source: syuilo/misskey

Summary


リモートアカウントのアバターのURLにエンコードされていない多バイト文字列が含まれている場合
https://example.com/foo/ダウンロード.jpeg など)

ローカルダウンロードしてストレージに格納する際に、以下のエラーが出て失敗する。
TypeError [ERR_UNESCAPED_CHARACTERS]: Request path contains unescaped characters

おそらく Node v10.0.0 以降のみ該当
https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V10.md#semver-major

http: disallow two-byte characters in URL path

アバター以外でも発生するかもしれない

Expected Behavior

成功する

Actual Behavior

失敗する

Steps to Reproduce

  1. Misskey1で他バイト文字を含むファイルをアップロードし、アバターに設定する。
  2. Misskey2で該当ユーザーのプロフィールを参照する

Environment

Node v10.8.0

⚙️Server 🐛Bug

All 7 comments

まだ発生してますね

エラーになったURLの一例

https://pleroma.uwah.moe/media/106dfe0f-0cbe-4623-8d46-79f25aff87ad/[Yousei-gg] Sasami-san@Ganbaranai 06 - Only Parents Give Us Problems [BD 1920x1080 x264 FLAC] 00:05:42.217.jpg

このURLは/[^\u0021-\u00ff]/に一致するのでencodeURIが適用されるはずなんだけどな

URL.parseしたときにURLエンコードが適用されることがあるみたい
いやちがうわ

url.parsenew URLは挙動が違うっぽい、後者はエンコードされるぽい
https://github.com/syuilo/misskey/commit/987168b863c52d0548050ffbac569782bb9a8cef#diff-388dd1dd931034d33aa8776f2e494b62

🙏🙏🙏

なのでnew URL(url).hrefして渡すだけでいいのかもしれない

Was this page helpful?
0 / 5 - 0 ratings