パスワードを忘れた? アカウント作成

「NULL」というカスタムナンバープレートを取得したところ、大量の駐車違反切符を受け取る結果に」記事へのコメント

  • 誰か教えてちょうだい

    ここに返信
    • 値のNULLと文字列の"NULL"を適当に変換すれば。
      さらに、環境によっては、暗黙にそう変換されることも。

      • by Anonymous Coward

        値のNULLと文字列の"NULL"の混同が原因なのはほぼ間違いないだろうが、
        #3668224の言うように、それだけでは説明できない。

        もし値のNULLが文字列の"NULL"に変換されるなら、ナンバープレートを登録した時点から請求が来るはず。
        逆に文字列の"NULL"が値のNULLに変換されても、SQLならNULLに関する演算は不定なので、値が返されることはない。
        そうでなくとも値のNULLはクエリ中で再び文字列の"NULL"に変換されるだろうから、最初の疑問にまた戻る。

        つまり何らかの非対称性が必要。

        # 実は最初から請求は発生していたけど、駐車違反するまで正規の連絡先が分からなかったとか。
        # あるいはもっと単純に、駐車違反の頃にたまたまシステムが変わったとか。

        • 元コメは、そこまでの追求を求めてないやろ。

          ちなみに、「非対称性」なんか、値NULLは文字列にするが、文字列"NULL"はそのまま、となってるだけで成立するで。
          いいかげんにSQLを使えばありがち。

        • by Anonymous Coward

          交通違反は何度も起こりうるから、キーが文字列のエントリを探して罰金を加算するルーチンと、文字列からキーを作るルーチンが別なだけでしょ。要するにエントリを作る処理はnullチェックしてるけど、エントリを探す処理はnullでも通ってしまうのだと思う。

          • by Anonymous Coward

            別な「だけ」というか、2段階あるというのは#3668224の言っていることと本質的に同じでは?

            その上でnullチェックが不十分だとどうして不具合を起こすかという話まで来たんだと思うが。

    • by Anonymous Coward

      Javaでやってみた.。

      public class nullstring {
              public static void main(String[] args) throws Exception{
                      Integer a = null;
                      String s = String.valueOf(a);
                      s = s.toUpperCase();
                      System.out.println(s);
              }
      }

      $ java nullstring
      N

    • by Anonymous Coward

      php使ってるショボいWebアプリなら、その手の話は日常だと思う。
      注意してないと、わりと簡単にはまる。

      注意してればだいたい大丈夫なんだが、そのぶん煩雑で疲れる。

      • by Anonymous Coward

        で、具体的にどういうコードがそうなります?
        遥か太古のPHPならわからんでもないけど、今のPHPは"NULL"とNULLは厳密に区別されてます。
        ようわからんので具合的なコードを切に希望します。

    • by Anonymous Coward

      駐車違反をする前までは問題なかったのだから、事前に違反テーブルに該当するナンバーが含まれていることが担保されていたんだと思う。
      例えば請求が月例かなんかのバッチ処理で、複数の違反をしていたらまとめて請求するので、まず、違反ナンバーのリストを抽出してから、ナンバー毎にクエリをかけるとか。

      で、そしてそれが十分なチェック(ナンバーが無効なら含まれているはずはない、含まれているなら有効)だと勘違いして、その後の処理をはしょったとか?

      でも'NULL'とNULLは違うからなぁ。
      素でクエリを生成していたら間違いようがないので、なんかフレームワーク介していたのかなぁ。

      • by Anonymous Coward

        テーブル間の外部キー結合制約によってはナンバープレートがNOT NULL制約になってる可能性もありますし、
        登録する時はまだ不明だけどブランクにできないってときに'NULL'を埋めるようになってるとかあるかも。

        • by Anonymous Coward

          'NULL'で埋められてたら'NULL'に請求がいくのでは?
          日本の免許でいう点数みたいなのがAND条件で入ってるんですかね。

          • by Anonymous Coward

            銀行口座の金額計算端数をソート順で最後になるはずのZZZZZさんに突っ込む、みたいな有名なバグ(仕様?)がありますが、
            それの亜種ではないかと。

          • by Anonymous Coward

            >'NULL'で埋められてたら'NULL'に請求がいくのでは?
            そのせいで、ナンバープレートが'NULL'の人に請求が集まったんじゃないかなと思った。

            • by Anonymous Coward

              このツリーでも何か不具合が起こってるような……。
              # 無限ループ?

    • by Anonymous Coward

      NaNは大丈夫だろうか

      • by Anonymous Coward

        ナンと答えればいいだろうか・・・

        • by Anonymous Coward

          にゃーん、と鳴いておけば良いのでは?
          # そしてキモいオッサンとしてクビになる

    • by Anonymous Coward

      どうやらエラー用に文字列NULLが使われていたとかいう話のようだ

「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常

処理中...