[ 新規アカウント作成 | パスワード忘れ ] |
[ 新規SPR | SPR一覧 | コメント一覧 | statistics | 最新ビルド:3.08.042 | crash履歴 | SPR DB 一覧 | ユーザ一覧 | 使い方 | レポートの書き方 ] [ ViVi Home ] |
一覧表示: [ New | Pend | Open | Reopen | Fixed | NPTF | 問題優先順 | 問題vote順 | 優先順 | vote順 | 重要度順 | Ref,ToDo | Help不備 | 対処順 ] |
[ 前のSPR | 次のSPR ] |
| |||||||||
状態: | Pend | 結果: | 優先度: | C | 重要度: | B | |||
報告日: | 10/09/16 | build: | 3.07.001 | OS: | Win7 | by: | suigun1000 | ||
概要: | 多数の UTF-8 ファイルを ViVi にドラッグアンドドロップでフリーズ | ||||||||
詳細: | ■ 操作前状態: vi モード有効の状態でファイルを開かない状態で待機 ■ 具体的操作: 多数の UTF-8 ファイルを ViVi にドラッグアンドドロップする (後述のソースコードをビルドし、ファイルを 1,000 個、生成すること) ■ 操作後状態: ViVi がフリーズ ■ 期待する状態: フリーズせず、ファイルオープン処理を完了し、操作継続可能であること ■ 補足・再現条件: 本件は、多数の HTML ファイルを開こうとして生じた問題です --- // 試験用ファイル生成用プログラムのソースコード // UTF-8 ファイルが 1,000 個、生成されます #pragma warning(disable : 4996) #include <windows.h> #include <string> #include <cstdio> bool conv_wide2mb(std::string& to, const std::wstring& from); int _tmain(int argc, _TCHAR* argv[]) { std::string to; std::wstring from = L"あいうえお"; (void)conv_wide2mb(to, from); for (int i = 0; 1000 > i; ++i){ char fname[_MAX_PATH]; sprintf(fname, "test-file_%03d.txt", i); FILE* fp = fopen(fname, "w"); if (fp){ fprintf(fp, "%s", to.c_str()); fclose(fp); fp = NULL; } } return 0; } bool conv_wide2mb(std::string& to, const std::wstring& from) { UINT code_page = CP_UTF8; int length = static_cast<int>(from.length()); int num = ::WideCharToMultiByte( code_page, // コードページ 0, // 処理速度とマッピング方法を決定するフラグ from.c_str(), // ワイド文字列のアドレス length, // ワイド文字列の文字数 NULL, // 新しい文字列を受け取るバッファのアドレス 0, // 新しい文字列を受け取るバッファのサイズ NULL, // マップできない文字の既定値のアドレス NULL // 既定の文字を使ったときにセットするフラグのアドレス ); if (0 == num){ return false; } ++num; char* p = reinterpret_cast<char*>(calloc(num, sizeof(char))); if (NULL == p){ return false; } if (0 == ::WideCharToMultiByte( code_page, // コードページ 0, // 処理速度とマッピング方法を決定するフラグ from.c_str(), // ワイド文字列のアドレス length, // ワイド文字列の文字数 p, // 新しい文字列を受け取るバッファのアドレス num, // 新しい文字列を受け取るバッファのサイズ NULL, // マップできない文字の既定値のアドレス NULL // 既定の文字を使ったときにセットするフラグのアドレス )){ free(p); p = NULL; return false; } to = p; free(p); p = NULL; return true; } | ||||||||
添付画像: | |||||||||
point: | 0 | 対処日: | build: | close日: |
#1 つだ (10/09/16 13:13:57) |
3.07 は現在内部バッファを改造中ですので、本件のバリデーションはそれが済んでからにします。 |
[ 新規SPR | SPR一覧 | コメント一覧 | statistics | 最新ビルド:3.08.042 | crash履歴 | SPR DB 一覧 | ユーザ一覧 | 使い方 | レポートの書き方 ] [ ViVi Home ] |
一覧表示: [ New | Pend | Open | Reopen | Fixed | NPTF | 問題優先順 | 問題vote順 | 優先順 | vote順 | 重要度順 | Ref,ToDo | Help不備 | 対処順 ] |
優先度: | 重要度(Severity): |
A:最優先で対処 | A:通常操作でのクラッシュ・無限ループ |
B:必ず対処 | B:特殊な条件、環境でのクラッシュ・無限ループ、非常に重要な動作不良 |
C:原則対処 | C:機能が動作しないなどの普通の動作不良 |
D:簡単であれば対処 | D:些細な動作不良で、簡単な代替手段があるもの |
E:NPTF候補 | E:ミススペルや誤った文章など、機能そのものの動作に影響を与えない、さほど重要ではないもの |
H:ヘルプの不備 | |
M:メモリリーク | |
P:パフォーマンス問題 | |
R:リファクタリング | |
T:機能強化要望(Enhancement)、ToDo | |
X:XT(eXtreme Toolkit)に由来する問題 |