チケット #28120

"新規フローチャートのサマリー情報が編集できない.PNG"というファイル名のファイルを添付するとos.open()で落ちる

登録: 2012-04-18 10:37 最終更新: 2012-04-25 11:09

報告者:
担当者:
(未割り当て)
チケットの種類:
状況:
完了
コンポーネント:
(未割り当て)
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
直さない
ファイル:
なし

詳細

別のファイル名にリネームしたら問題なく添付できる。

trac.logは下記のとおり。

2012-04-18 10:16:12,953 Trac[main] ERROR: Internal Server Error: 
Traceback (most recent call last):
  File "D:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\web\main.py", line 511, in _dispatch_request
    dispatcher.dispatch(req)
  File "D:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\web\main.py", line 237, in dispatch
    resp = chosen_handler.process_request(req)
  File "D:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\attachment.py", line 448, in process_request
    self._do_save(req, attachment)
  File "D:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\attachment.py", line 684, in _do_save
    attachment.insert(filename, upload.file, size)
  File "D:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\attachment.py", line 262, in insert
    filename))
  File "D:\TracLight\python\lib\site-packages\trac-0.12.2.ja1-py2.6.egg\trac\util\__init__.py", line 231, in create_unique_file
    return path, os.fdopen(os.open(path, flags, 0666), 'w')
OSError: [Errno 2] No such file or directory

チケットの履歴 (4 件中 3 件表示)

2012-04-18 10:37 更新者: babydaemons
  • 新しいチケット ""新規フローチャートのサマリー情報が編集できない.PNG"というファイル名のファイルを添付するとos.open()で落ちる" が作成されました
2012-04-18 15:08 更新者: jun66j5
コメント

添付ファイルを格納する際にファイル名を encode して格納します。その際にできあがる名前が長すぎるためです。

また、その場合に Windows があげてくる例外が実情を反映しない No such file or directory となります。 Linux であれば OSError: 36 File name too long などとなります。

そのファイル名だと encode 後のファイル名の部分だけで211文字あります。Windows ではファイル名の最大長は260文字です。

>>> s = u'新規フローチャートのサマリー情報が編集できない.PNG'
>>> import urllib
>>> urllib.quote(s.encode('utf-8'))
'%E6%96%B0%E8%A6%8F%E3%83%95%E3%83%AD%E3%83%BC%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%E3%81%AE%E3%82%B5%E3%83%9E%E3%83%AA%E3%83%BC%E6%83%85%E5%A0%B1%E3%81%8C%E7%B7%A8%E9%9B%86%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84.PNG'
>>> len(urllib.quote(s.encode('utf-8')))
211

2012-04-18 19:14 更新者: jun66j5
コメント

ところでどういう挙動を期待されていますか?

Trac 0.13 では添付ファイルパスが長くなり過ぎないようにファイル名の SHA-1 ハッシュを元にしたファイルパスで保存するようになります。 http://trac.edgewall.org/ticket/10313

2012-04-25 11:09 更新者: jun66j5
  • 解決法なし から 直さない に更新されました
  • 状況オープン から 完了 に更新されました
  • チケット完了時刻2012-04-25 11:09 に更新されました
コメント

ということで Trac の仕様なので直しようがありません。 Windows のパス長が短すぎるんです :(

添付ファイルリスト

添付ファイルはありません

編集

このチケットにコメントを追加するには、ログインが必要です » ログインする