misskey icon indicating copy to clipboard operation
misskey copied to clipboard

エクスポートしたカスタム絵文字のzipが大きいと読み込めない

Open CyberRex0 opened this issue 1 year ago • 9 comments

💡 Summary

絵文字をエクスポートした際、zipファイルのサイズが大きいと、インポート時の解凍で何らかの理由で読み込めない、または壊れたファイルを読み込むような挙動をする。

🥰 Expected Behavior

正常にインポートできる

🤬 Actual Behavior

meta.jsonが正しいJSONとして読み込まれずに、インポートが失敗してしまう。

パターン1

SyntaxError: Unexpected non-whitespace character after JSON at position 1
     at JSON.parse (<anonymous>)
     at DuplexWrapper.<anonymous> (file:///home/misskey/misskey/packages/backend/built/queue/processors/ImportCustomEmojisProcessorService.js:68:31)
     at DuplexWrapper.emit (node:events:513:28)
     at Writable.<anonymous> (/home/misskey/misskey/node_modules/.pnpm/[email protected]/node_modules/unzipper/lib/extract.js:44:15)
    at Writable.emit (node:events:525:35)
     at finish (node:internal/streams/writable:750:10)
     at finishMaybe (node:internal/streams/writable:735:9)
     at afterWrite (node:internal/streams/writable:507:3)
     at onwrite (node:internal/streams/writable:480:7)
     at ProxyWriter.emit (node:events:525:35)
     at FileWriter.emit (node:events:513:28)
     at end (/home/misskey/misskey/node_modules/.pnpm/[email protected]/node_modules/fstream/lib/writer.js:324:14)
     at /home/misskey/misskey/node_modules/.pnpm/[email protected]/node_modules/fstream/lib/writer.js:314:34
     at endUtimes (/home/misskey/misskey/node_modules/.pnpm/[email protected]/node_modules/fstream/lib/writer.js:238:46)
     at setProps (/home/misskey/misskey/node_modules/.pnpm/[email protected]/node_modules/fstream/lib/writer.js:297:5)
     at /home/misskey/misskey/node_modules/.pnpm/[email protected]/node_modules/fstream/lib/writer.js:287:7
     at callback (/home/misskey/misskey/node_modules/.pnpm/[email protected]/node_modules/graceful-fs/polyfills.js:306:20)
     at FSReqCallback.oncomplete (node:fs:196:5)

パターン2

SyntaxError: Unexpected token 'p', "pdatedAt":"... is not valid JSON
     at JSON.parse (<anonymous>)
    at DuplexWrapper.<anonymous> (file:///home/misskey/misskey/packages/backend/built/queue/processors/ImportCustomEmojisProcessorService.js:68:31)
     at DuplexWrapper.emit (node:events:513:28)
     at Writable.<anonymous> (/home/misskey/misskey/node_modules/.pnpm/[email protected]/node_modules/unzipper/lib/extract.js:44:15)
     at Writable.emit (node:events:525:35)
     at finish (node:internal/streams/writable:750:10)
     at finishMaybe (node:internal/streams/writable:735:9)
     at afterWrite (node:internal/streams/writable:507:3)
     at onwrite (node:internal/streams/writable:480:7)
     at ProxyWriter.emit (node:events:525:35)
     at FileWriter.emit (node:events:513:28)
     at end (/home/misskey/misskey/node_modules/.pnpm/[email protected]/node_modules/fstream/lib/writer.js:324:14)
     at /home/misskey/misskey/node_modules/.pnpm/[email protected]/node_modules/fstream/lib/writer.js:314:34
     at endUtimes (/home/misskey/misskey/node_modules/.pnpm/[email protected]/node_modules/fstream/lib/writer.js:238:46)
     at setProps (/home/misskey/misskey/node_modules/.pnpm/[email protected]/node_modules/fstream/lib/writer.js:297:5)
     at /home/misskey/misskey/node_modules/.pnpm/[email protected]/node_modules/fstream/lib/writer.js:287:7
     at callback (/home/misskey/misskey/node_modules/.pnpm/[email protected]/node_modules/graceful-fs/polyfills.js:306:20)
     at FSReqCallback.oncomplete (node:fs:196:5)

📝 Steps to Reproduce

  1. エクスポートしたzipを用意する
  2. インポートする

Memo

別なサーバーそれぞれ2つ (v13.10.3、v13.12.0-beta.3)からエクスポートしたzipを試したが両方ダメだった。 両方とも10MBを超えている。

一方で、1MB未満のzipでは正常にインポートできた。

なお、正常にインポートできたzipも、できなかったzipもunzipコマンドやファイルマネージャーで解凍可能。 meta.jsonも破損しておらず、読み込むことが可能。

📌 Environment

Misskey version: 13.12.0-beta.3 Node.js version: v19.9.0 Your OS: macOS Ventura 13.3.1(a) Your browser: Chrome 112.0.5615.137 (Official Build) (arm64)

CyberRex0 avatar May 06 '23 09:05 CyberRex0

原因の切り分けができないので、可能であれば読み込めないデータを添付ください

acid-chicken avatar May 06 '23 09:05 acid-chicken

インポートできなかったもの https://pub-560e65a56a294433907ae17133312204.r2.dev/custom-emojis-2023-05-04-22-36-37.zip (32.87MB) https://pub-560e65a56a294433907ae17133312204.r2.dev/custom-emojis-2023-05-06-17-50-17.zip (14.39MB)

インポートできたもの https://pub-560e65a56a294433907ae17133312204.r2.dev/custom-emojis-2023-05-06-17-33-15.zip (11.76KB)

CyberRex0 avatar May 06 '23 09:05 CyberRex0

メモ

Node.js の挙動が怪しい

Node.js Version Result
v16.20.0
v17.9.1
v18.8.0
v18.10.0
v18.12.1
v18.14.2
v18.15.0
v18.16.0
v19.0.1
v19.6.1
v19.7.0
v19.8.0
v19.8.1
v19.9.0
v20.1.0

acid-chicken avatar May 06 '23 10:05 acid-chicken

とりあえずワークアラウンドとしては Node.js v18.15.0 (v18.16.0 ではない) で起動していると回避できそう

acid-chicken avatar May 06 '23 10:05 acid-chicken

問題が起きたのはv19.9.0、v18.16.0なので図星かもしれない

CyberRex0 avatar May 06 '23 10:05 CyberRex0

ストリームの頭が切れるみたいな挙動になるっぽい どれが原因か特定面倒だし unzipper やめるか

acid-chicken avatar May 06 '23 10:05 acid-chicken

参考: https://github.com/ZJONSSON/node-unzipper/issues/271 zip-streamを使うというworkaroundでもよいらしい

yuriha-chan avatar May 17 '23 19:05 yuriha-chan

どうなりました?

kanasaki15 avatar Jul 07 '23 06:07 kanasaki15

どうなりました?

#10780 出したけど、当時絵文字のバルクインポート自体がライセンスの観点で問題視されていて誰もレビューする気がなかったので、それから壊れたままの状態を意図的に維持されてしまっている状況

acid-chicken avatar Jul 07 '23 08:07 acid-chicken