パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

MySQL/MariaDBにバグ、256分の1の確率で間違ったパスワードでも認証されてしまう」記事へのコメント

  • by Anonymous Coward

    実装なのか想像するスレ

    • Re:どういう (スコア:2, 参考になる)

      by Anonymous Coward on 2012年06月13日 8時47分 (#2172320)

      "Because of incorrect casting" と書いてありますね。

      memcmp の戻り値を char に変換した上で 0 と比較してるんじゃないでしょうか。memcmp の戻り値は、一致の場合0、違う場合は正または負の整数ですが、0じゃない整数を char に変換すると 1/256 の確率で 0 になって一致したことになると。この場合、戻り値の整数値に 1 または -1 しか使わないような実装の memcmp なら問題は生じないので、実装によっては大丈夫という理由も説明できます。

      親コメント
      • by uron (39597) on 2012年06月13日 9時11分 (#2172334)

        未初期化変数返してるんじゃないかな。
        一致した時だけ0を入れてて、そうでないときは何もしてないとか。

        --
        スルースキル:Lv2
        Keep It Simple, Stupid!
        親コメント
      • by Anonymous Coward

        typedef char BOOL;
        とかやってるとはまりそうですね。

      • by Anonymous Coward

        SSE最適化版のみってことだからマルチバイトで比較して memcmp から結果を返す前に char にキャストしてんじゃないかな。

      • by Anonymous Coward

        わざわざ、なんでキャスト?っておもってみたら
        charを返す関数でmemcmpの戻り値そのままreturnで返してるんですね。
        こんなキャストなら俺もミスするかも

        • by Anonymous Coward

          それキャストじゃなくて暗黙の型変換じゃん。型変換を何でもかんでもキャストと呼ぶバカは爆発しろ。ってMySQLの開発者が言ってんのか。深刻すぎる

※ただしPHPを除く -- あるAdmin

処理中...