◀Unicode版開発トップへ
  • 1867 Commit報告(Fix): NUL文字、IME、無限ループ
    • 1868 RE: Commit報告(Fix): NUL文字、IME、無限ループ
      • 1869 Re2: Commit報告(Fix): NUL文字、IME、無限ループ
      • 1875 Commit報告2(Keep): NUL文字、IME、無限ループ
  • [1867] Commit報告(Fix): NUL文字、IME、無限ループ ds14050 2012年12月16日 14:52

    事後ですみません。12文字だけなのでコミットしてしまいました。

    ----------------------------------------
    --------------------------------
    r2516 | ds14050 | 2012-12-16 14:37:01 +0900 (日, 16 12 2012) | 2 lines

    Fix: NUL文字を含み、ある程度以上の長さがある行で IMEを使うと無限ループに陥っていた。
    ----------------------------------------
    --------------------------------

    ヌル文字を1つと何かを50文字のテキストの先頭で
    日本語を入力しようとすると再現できると思います。

    https://sourceforge.net/p/sakura-editor/code/2515/
    • [1868] RE: Commit報告(Fix): NUL文字、IME、無限ループ もか 2012年12月16日 18:44

      以前直した記憶があるのですが、直ってなかったようです。
      IMEにはNULをスペースに変換して渡す処理が入っています。

      こうではなくて?

      --- ./.svn/text-base/CEditView_Ime.cpp.svn-base Sun Dec 16 18:34:00 2012
      +++ CEditView_Ime.cpp Sun Dec 16 18:34:48 2012
      @@ -217,7 +217,11 @@
      if ( ptSelect.x > nReconvMaxLen ) {
      const wchar_t* pszWork = pLine;
      while( (ptSelect.x - nReconvIndex) > nReconvMaxLen ){
      + const wchar_t* pszWork2 = pszWork;
      pszWork = ::CharNextW_AnyBuild( pszWork);
      + if( pszWork == pszWork2 ){
      + pszWork++;
      + }
      nReconvIndex = pszWork - pLine ;
      }
      }
      @@ -228,9 +232,12 @@
      const wchar_t* pszWork = pLine + ptSelect.x;
      nReconvLen = ptSelect.x - nReconvIndex;
      while( ( nReconvLen + nReconvIndex - ptSelect.x) <= nReconvMaxLen
      - && pszWork[0] // IMEには NUL文字から後ろを渡さない。
      ){
      + const wchar_t* pszWork2 = pszWork;
      pszWork = ::CharNextW_AnyBuild( pszWork);
      + if( pszWork == pszWork2 ){
      + pszWork++;
      + }
      nReconvLen = pszWork - (pLine + nReconvIndex) ;
      }
      }
      • [1869] Re2: Commit報告(Fix): NUL文字、IME、無限ループ ds14050 2012年12月16日 19:43

        対策に漏れがあったのと方針違いだったのですね。>r2516
        このへんは文脈依存変換パッチを書いていたもかさんが
        詳しいだろうなあとチェックを期待しつつ報告を書いていました。
        当方、目の前の無限ループを止める以上のことは手に余ります。
      • [1875] Commit報告2(Keep): NUL文字、IME、無限ループ ds14050 2013年01月08日 20:52

        いただいた助言に沿ってコミットしておきました。

        ----------------------------------------
        r2561 | ds14050 | 2013-01-08 20:31:13 +0900 (火, 08 1 2013) | 2 lines
        変更のあったパス:
        M /sakura/trunk2/sakura_core/view/CEditView_Ime.cpp

        Keep: a complement to r2516.
        ----------------------------------------
        http://sourceforge.net/p/sakura-editor/code/2561/

        最低限ながら
        * 再変換や文脈依存変換が機能すること(そういう部分のコードですよね?)
        * r2516ではNUL文字の後ろにキャレットがあるときにまだ無限ループすること
        * それが解消すること
        を確認しています。

        # 以下ひとりごと
        # sourceforge.netの Browse Commitsは一覧性が低くて使いづらいですね。
        # オレンジの点が並んでるばっかりでコミットメッセージを表示してもくれない。
        # 点をクリックすると内容が表示されるものの、前後のリビジョンへのリンク
        # こそあれ、当のリビジョンの URLがどこからも得られない。
        # Pull Requestがばしばし飛んでくるようなリポジトリだと評価が違うんでしょうか。