KamoCRM

バイト重い画像パスをバウンドしてストリーム

PerformanceDocsService
出荷済み
2026年9月23日 2:35 UTC
プロフィール
Kamo
コンテンツ
d1a8762

/download は、ファイル全体を byte[] にロードしました。 /bulk-download は 1 バイトで ZIP (または PDF をマージ) 全体をビルドしました。 応答する前に DocumentPrepareService; このサービスの〜1.4 GB に対して最大 3 GB のアップロード ヒープ、および/bulk-downloadの100-idキャップは、その背後にサイズ制限がなかった — 100 個の未処理の文書は、 ギガバイトを1つのリクエストに数百回依頼してください。 buildZip は Img.fileName を直接書き込む sanitization 無しの ZipEntry なので、ドキュメントは何かに名前を変更しました メニュー (fileName はユーザ制御 — 無料のテキストで、 /update/filename/{imgId}) は、エントリが存在しない抽出器によって開いたアーカイブを生成しました。 自身は zip-slip に対してガードします。, 任意の OS の対象ディレクトリの外に書き込みます。 抽出。 - /downloadはMinistorageService.openRange + StreamingResponseBodyを、丁度流します /stream は、ファイル全体をバッファするのではなく、既にやった。 (Drops ImageService.downloadDocument's) のドキュメント dl-first/dl-last bookkeeping 側効果 — grep で死者を確認: Java バックエンドで何もない Img.dlFirstDate/dlLastDate を読み込みます。 別の ImgLogDownload 監査 レコードを経由して行ダウンロード履歴パネルで読み返すイベントは変更されません。) - /bulk-downloadのdedupesは100-idの帽子およびper-itemの仕事の前にIDを要求しました。 - /bulk-download は、選択した文書の結合された Img.fileSize パスが終了したら、outright (400) を拒否します 合併/zip を試み、OMM を危険にさらすのではなく、500 MB は、黙ってはいけない truncated、完全性はバルクEXPORTのポイントであるため。 - buildZip は、すべてのエントリ名を最終的なパスセグメント(/と\の両方に分割する)にサニタイズします。 抽出器は、このサーバーが制御しないOSにあるかもしれません)、zip-slipギャップを閉じます。 DONE ではなく、既知のギャップとして報告した: buildZip/mergePdfs はまだ 1 バイトとして結果をビルドする[] HTTP レスポンスに直接ストリーミングするのではなく、応答する前に、500 MB のキャップが今 既知の天井(上から下へ)にバインドするが、排除されていない。 それらを変換する caller-supplied outputStream に書き込むと、 /bulk-download ストリームも許可されます。 理由 DocumentPrepareServiceの公開署名を変更し、既存の3つのテストファイルにリッピングします (mocks は現在 byte[]-returning メソッドをスタブします)、MEDIUM-severity では既にカプセル化 keepder — 意図しないスコープ呼び出しではなく、オーバーサイト。 新しいテスト: メニュー (saitizeZipEntryNameの7つのケース)と3つのケース ImageControllerMediaAssocTest(ストリーミングバッファリング、IDデデュープ、サイズキャップ)に追加。 Mutation-checked: ImagingController.java をプレフィックス状態に戻すと、新しい 3 つが現れます。 コントローラーケース赤; sanitizeZipEntryName を `return name に戻す;` は 7 zip-slip の 5 を回す 場合の赤(第6、既に安全な普通のファイル名は、いずれかの方法で正しく影響されない)。 フルスイート: 741 のテストグリーン (was 731; +10 新規).

すべての変更

配送を見るのが好きですか?

自分のワークスペースに到着します。 無料プランをスタートし、月に再度このページをお読みください.

永遠に無料で始める料金を見る