◀Unicode版開発トップへ
  • 770 Grepでアクセスバイオレーション
    • 771 Re:Grepでアクセスバイオレーション
      • 774 Re2:Grepでアクセスバイオレーション
        • 776 Re3:Grepでアクセスバイオレーション
          • 777 「CheckKanjiCode の修正(rev1472)」の問題かしら?
            • 778 Re: 「CheckKanjiCode の修正(rev1472)」の問題かしら?
              • 781 Re2: 「CheckKanjiCode の修正(rev1472)」の問題かしら?
                • 783 Re3: 「CheckKanjiCode の修正(rev1472)」の問題かしら?
                • 784 Re3: 「CheckKanjiCode の修正(rev1472)」の問題かしら?
    • 772 Re:Grepでアクセスバイオレーション
    • 773 Re:Grepでアクセスバイオレーション
      • 775 Re2:Grepでアクセスバイオレーション
        • 782 Re3:Grepでアクセスバイオレーション
  • [770] Grepでアクセスバイオレーション anonymous 2009年01月19日 11:43

    rev1495以降のテストバイナリで、Grep時にアクセスバイオレーションが発生します。
    rev1495、rev1501、rev1516で確認しています。rev1428以前やANSI版では発生しません。
    Grep中、一定量の検索をすると落ちるように見えます。
    現状詳しい再現条件はわかりません。

    他の方々の報告がないため、当方の環境に起因するものかとも考えましたが、
    ダウンロードしてきたテストバイナリをそのまま起動しても現象は発生しました。

    下記のどの環境でも発生しました。
    ・Win XP SP2 (JP)
    ・Win XP SP3 (JP)
    ・Win XP SP2 (ENG)
    ・Win XP SP2 (ENG)
    ・Win 2000 SP4 (ENG)

    再現手順や詳細などが必要でしたらその旨お伝えください。
    できる限りの情報を集めようと思います。


    • [771] Re:Grepでアクセスバイオレーション ryoji 2009年01月19日 21:03

      単純にGrepするだけでは自分の環境では起きないみたいです。
      クラッシュ時にミニダンプを採取するようにしたものを作ったので、それを使ってanonymousさんのWin XP SP3 (JP)環境で再現させて、ダンプファイル(35KB程度)をUpしていただけないでしょうか?

      BugReport/25
      http://sakura.qp.land.to/?BugReport%2F25
      • [774] Re2:Grepでアクセスバイオレーション anonymous 2009年01月20日 19:32

        素早いレス、ありがとうございます。

        Platform SDKはインストールしておらず、みなさんで再現できる条件ではないかもしれないのが心苦しいですが・・・。
        trunk2などのソースで再現してみようとしましたが、再現しませんでした。

        以下、詳細情報になります。

        ・D:\xampp 下で、"src"をGrep
        ・Grep条件入力のチェックボックスは、サブフォルダからも検索するにチェック、それ以外はチェック無し
        ・結果出力、結果出力形式はそれぞれどちらでも再現
        ・リアルタイム表示のチェックの有無に関わらず発生
        ・Grep中の窓では784件、リアルタイム表示では793行目まで表示されたあたりで落ちる。(Grepの終了前)

        ひとまずこれくらいあげておきます。
        切り分けに必要な手順等あれば情報ください。
        • [776] Re3:Grepでアクセスバイオレーション anonymous 2009年01月20日 22:34

          肝心なことを・・・。
          ダンプファイル、以下にあげておきました。
          BugReport/25
          http://sakura.qp.land.to/?BugReport%2F25

          syatさんの環境でも再現できたようなのでもうあまり必要ではないかもしれませんが・・・。
          • [777] 「CheckKanjiCode の修正(rev1472)」の問題かしら? ryoji 2009年01月21日 00:01

            ダンプファイルを見てみました。
            解析状況を報告しておきます。

            発生しているエラー内容:
            0x00422e30 (sakuraW.exe) でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x09647bf8 を読み込み中にアクセス違反が発生しました。

            エラー箇所:
            ECodeType CCodeMediator::DetectUnicode( CESI* pcesi ) の最終行
            CCodeMediator.cpp(118):
            return pcesi->m_aWcInfo[ pcesi->GetBOMType() ].eCodeID;
            のところで落ちています。
            この関数は、
            rev1472 [Fix] CheckKanjiCode の修正+α(>>unicode:711)
            で追加されたもののようなので、rev1472 を境に問題が起きるようになった可能性があります。
            #自分はまだこの周辺のコードを読んでないので、今のところ原因まではわかりません。

            呼び出し元を辿ると、

            ECodeType CCodeMediator::CheckKanjiCode( const char* pBuf, int nBufLen )
            CCodeMediator.cpp(158)
            ↑
            ECodeType CFileLoad::FileOpen( LPCTSTR pFileName, ECodeType CharCode, int nFlag, bool* pbBomExist )
            CFileLoad.cpp(147)
            ↑
            int CGrepAgent::DoGrepFile(
            CGrepAgent.cpp(1021)

            になってます。
            • [778] Re: 「CheckKanjiCode の修正(rev1472)」の問題かしら? げんた 2009年01月21日 00:28

              >エラー箇所:
              >ECodeType CCodeMediator::DetectUnicode( CESI* pcesi ) の最終行
              >CCodeMediator.cpp(118):
              > return pcesi->m_aWcInfo[ pcesi->GetBOMType() ].eCodeID;
              >のところで落ちています。
              GetBOMType()が取り得る値の1つにESI_BOMTYPE_UNKNOWNがあり,CESI.hでこれが -1 と定義されています.
              ESI_BOMTYPE_LE,ESI_BOMTYPE_BEのどちらとも判定できなかった場合に確保したアドレスより手前にアクセスしてしまうのではないでしょうか.

              あ,でも手前には他の変数がありますね.
              逆に直後にあるm_eWcBomTypeが何か別の値で上書きされて,その後ここを通るととんでもないところにアクセスするのでしょうか.

              アクセスしたアドレスとpcesiのアドレスからm_aWcInfo[]のインデックスが分かるとヒントになるかもしれませんね.
              (外してたらごめんなさい)
              • [781] Re2: 「CheckKanjiCode の修正(rev1472)」の問題かしら? ryoji 2009年01月21日 18:42

                修正してコミットしました(>>unicode:779)

                対象とするファイルのサイズがゼロのとき、
                CCodeMediator::CheckKanjiCode()の
                pcesi->SetInformation()
                がfalseを返すのにそのまま
                nret = DetectUnicode( pcesi );
                に突入してしまうのがまずかったようです。
                pcesi->m_eWcBomType
                の値が不確定のままなのでm_aWcInfo[]のインデックスがとんでもない値になってました。
                • [783] Re3: 「CheckKanjiCode の修正(rev1472)」の問題かしら? anonymous 2009年01月22日 00:59

                  > 修正してコミットしました(>>unicode:779)
                  対応ありがとうございます。
                  rev1519のバイナリにて、思う存分Grepできています。

                  当方、試用、不具合報告くらいしか協力できませんが、応援しております。
                • [784] Re3: 「CheckKanjiCode の修正(rev1472)」の問題かしら? ラスティブ 2009年01月22日 14:26

                  ▼ ryojiさん
                  > 修正してコミットしました(>>unicode:779)
                  >
                  > 対象とするファイルのサイズがゼロのとき、
                  > CCodeMediator::CheckKanjiCode()の
                  > pcesi->SetInformation()
                  > がfalseを返すのにそのまま
                  > nret = DetectUnicode( pcesi );
                  > に突入してしまうのがまずかったようです。
                  > pcesi->m_eWcBomType
                  > の値が不確定のままなのでm_aWcInfo[]のインデックスがとんでもない値になってました。

                  ANSI 版のパッチに反映させました。
                  修正ありがとうございました。メモリリークのほうなど、
                  すっかり見落としていて自分では見つけられそうになかったです(汗)
                  重ね重ね、ありがとうございました。
    • [772] Re:Grepでアクセスバイオレーション di 2009年01月20日 12:52

      私の環境でも同様にGrepで稀に落ちるようになりました。
      発生し始めたリビジョンも同じかと。
      拡張子のフィルタリング等で母体数を減らすと落ちなくなっている感じです。
      環境はWinXP SP3です。

      #ダンプの取得に協力したいのは山々ですが、職場のセキュリティの関係で
      #ファイルのアップロードが出来ません...無念。orz
    • [773] Re:Grepでアクセスバイオレーション anonymous 2009年01月20日 18:34

      もう少し詳細情報をください。
      ・Grep条件は、何文字くらい?全角文字を含む?
      ・ファイルは、*.*のみ? 除外指定してる?
      ・単語単位で探す、大文字小文字区別などのチェック状態は?
      ・正規表現は使ってます?
      ・検索ファイル数は何ファイルくらい?単に母体数が多いと言われても人それぞれですから
      ・ヒット数は何件くらい?
      ・たとえば、Program Files\Platform SDK\Samplesを検索するとかなら他の人もできます
      • [775] Re2:Grepでアクセスバイオレーション syat 2009年01月20日 21:49

        私の環境でも再現しました。
        http://www.apachefriends.org/jp/xampp-windows.html
        xamppのzipを適当な場所に解凍し、その中でsrcをGrepすると落ちます。鉄板。
        バイナリファイル内を検索したときに落ちている雰囲気です。
        • [782] Re3:Grepでアクセスバイオレーション ryoji 2009年01月21日 18:45

          ▼ syatさん
          > 私の環境でも再現しました。

          情報ありがとうございます。
          僕のところでもこれで再現しました。(^^;
          コミットした修正(>>unicode:779)での動作確認に使用しました。