Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(frontend): 拡張子内にドットが含まれるものを正常にアップロードできるように #13699

Open
wants to merge 6 commits into
base: develop
Choose a base branch
from

Conversation

kakkokari-gtyih
Copy link
Contributor

What

ランダム文字列でアップロードする際に、tar.gzなど、拡張子内にドットが含まれるファイルの拡張子が正常に処理されない問題を修正

Why

Fix #13688 (comment)

Additional info (optional)

Checklist

  • Read the contribution guide
  • Test working in a local environment
  • (If needed) Add story of storybook
  • (If needed) Update CHANGELOG.md
  • (If possible) Add tests

Copy link

codecov bot commented Apr 13, 2024

Codecov Report

Attention: Patch coverage is 50.00000% with 11 lines in your changes missing coverage. Please review.

Project coverage is 14.28%. Comparing base (bee4db8) to head (7bc9704).

Files with missing lines Patch % Lines
packages/frontend/src/scripts/upload.ts 50.00% 11 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##           develop   #13699       +/-   ##
============================================
- Coverage    41.58%   14.28%   -27.30%     
============================================
  Files         1617      779      -838     
  Lines       165038    71389    -93649     
  Branches      4072     1243     -2829     
============================================
- Hits         68631    10198    -58433     
+ Misses       95931    60768    -35163     
+ Partials       476      423       -53     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@syuilo
Copy link
Member

syuilo commented Apr 14, 2024

対応必要?

@kakkokari-gtyih
Copy link
Contributor Author

filename.xxx.yyy みたいなファイルをアップロードするときには必要(現状.yyyだけが抽出される)

@syuilo
Copy link
Member

syuilo commented Apr 14, 2024

filename.xxx.yyy が aaaaaaa.yyy になって困ること少ない気もする

@syuilo
Copy link
Member

syuilo commented Apr 14, 2024

困る場合は設定をオフにするとか

@syuilo
Copy link
Member

syuilo commented Apr 14, 2024

例外の拡張子を列挙するのは管理が面倒になるからあまりやりたくないわね

@syuilo
Copy link
Member

syuilo commented Apr 14, 2024

filename.xxx.yyy が aaaaaaa.yyy になって困ること少ない気もする

例えば aaaa.jpg.webp とかは結局webpだから bbbb.webp になっても問題ないし

@kakkokari-gtyih
Copy link
Contributor Author

kakkokari-gtyih commented Apr 14, 2024

(個人的にはそもそもドライブにtar.gzをアップロードするユースケースが思いつかないので、それ以外に困るパターンがなさそうなら別にどっちでも良いとはおもっている)

@syuilo
Copy link
Member

syuilo commented Apr 14, 2024

ピリオドでsplitした最初だけ置き換えるのはダメなのかしら

@kakkokari-gtyih
Copy link
Contributor Author

ピリオドでsplitした最初だけ置き換えるのはダメなのかしら

いまそうなってるはず

@syuilo
Copy link
Member

syuilo commented Apr 14, 2024

ピリオドでsplitした最初だけ置き換えるのはダメなのかしら

いまそうなってるはず

であれば

ランダム文字列でアップロードする際に、tar.gzなど、拡張子内にドットが含まれるファイルの拡張子が正常に処理されない

は起きえない気がした

@@ -45,7 +71,7 @@ export function uploadFile(
const reader = new FileReader();
reader.onload = async (): Promise<void> => {
const filename = name ?? file.name ?? 'untitled';
const extension = filename.split('.').length > 1 ? '.' + filename.split('.').pop() : '';
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

今の実装はこれ

@kakkokari-gtyih
Copy link
Contributor Author

ピリオドでsplitした最初だけ置き換えるのはダメなのかしら

いまそうなってるはず

あ、そうじゃなかった
最後だけ抽出していた

@kakkokari-gtyih
Copy link
Contributor Author

kakkokari-gtyih commented Apr 14, 2024

ピリオドでsplitした最初だけ置き換えるのはダメなのかしら

ランダム文字列でアップロードする際に、tar.gzなど、拡張子内にドットが含まれるファイルの拡張子が正常に処理されない

は起きえない気がした

ただそうなった場合 file.name.that.has.many.dots.mp4 とかが 8fd7940a-e859-47a6-988c-5c67cfcba226.name.that.has.many.dots.mp4 とかになって変に処理されそう

@syuilo
Copy link
Member

syuilo commented Apr 14, 2024

ピリオドでsplitした最初だけ置き換えるのはダメなのかしら

ランダム文字列でアップロードする際に、tar.gzなど、拡張子内にドットが含まれるファイルの拡張子が正常に処理されない

は起きえない気がした

ただそうなった場合 file.name.that.has.many.dots.mp4 とかが 8fd7940a-e859-47a6-988c-5c67cfcba226.name.that.has.many.dots.mp4 とかになって変に処理されそう

一般的にファイルシステムにおけるファイル名に拡張子を意味する目的以外でピリオドって使われるものなのかしら

@kakkokari-gtyih
Copy link
Contributor Author

許容されないわけではないのでまずそう

@syuilo
Copy link
Member

syuilo commented Apr 14, 2024

非常に稀な気がするけどどうなのかしら(特に英語圏)

@kakkokari-gtyih
Copy link
Contributor Author

ユーザーがどんなファイル名のファイルをアップロードするかはこちらでコントロールできることではないのでユーザーの行動を信用しないほうが良い気はする

@Sayamame-beans
Copy link
Member

ファイル名に日付が入っているケース(例 VRChat_2024-04-13_00-40-23.477_2560x1440.png)などは見かけますね…
(初めのドットで切るとrandomname.477_2560x1440.pngになる)

@syuilo
Copy link
Member

syuilo commented Apr 14, 2024

🤯

'lz4',
'sz',
'z',
'zstd',
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

二重拡張子になるファイルがありそうなパターンを追加で調査/検討してみました。
いかがでしょうか?

Suggested change
'zstd',
'zstd',
'zip',
'7z',
'gpg',
'bak',
'old',
'diff',
'patch',

'zstd',
] as const;

function getExtension(filename: string): string {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

.から始まるファイルの場合にすり抜けてしまいそうな気がしてきました

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
packages/frontend Client side specific issue/PR
Projects
Status: Needs to review
Development

Successfully merging this pull request may close these issues.

3 participants