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

iOS7.0.6で修正された「最悪のセキュリティバグ」はありがちなコーディングミスで発生していた」記事へのコメント

  • by Anonymous Coward on 2014年02月24日 18時26分 (#2550871)

    処理が1行だからといって、if文で格好つけるのはやめましょう。

    • lisp神の守護を受けていればこんな事にはならなかった

      C/C++はBSD/オールマン・スタイルで書いてます

      親コメント
    • by Anonymous Coward on 2014年02月24日 19時11分 (#2550914)

      Python教徒がアップを始めました

      親コメント
      • by Anonymous Coward

        ABC: なんでアイツばかり取り上げられるんだっ!

      • by Anonymous Coward

        elifですね。

    • by Anonymous Coward

      ソースコード整形機能ないのかな?

      • by Anonymous Coward

        整形?

                if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
                        goto fail;
                goto fail;

        こういうことか?

    • by Anonymous Coward

      括弧の有無でパーサが限界に達したりするから簡単な問題じゃないんだよ
      if(~!=0);else if(~!=0)~if(~!=0);else{/*SUCCESS*/}/*FAILURE*/;return err;
      みたいなの

      • もしかして:括弧 というより、『gotoなしで else if連鎖にすると』の間違い? コード例的に。

        親コメント
      • by Anonymous Coward

        どういうことかさっぱりわからないんだけど、だれか解説よろ

        • by Anonymous Coward

          以下のプログラムのPOINT2は絶対に実行されない。

          fuga() {
            OSError err;
            if (err = hoge()) goto fail; /* POINT1 */
            goto fail;
            if (err = hoge()) goto fail; /* POINT2 */

            fail:
            return err;
          }

          つまり、誤ったインデントを付けたから
          余計に見つけ辛くなったのね

        • by Anonymous Coward

          括弧があるかないかでパーサが限界に達したりするから難しいんだよ

      • by Anonymous Coward

        if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
                        goto fail;

          if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
          {
                        goto fail;
          }

        にしちゃいけない理由なのか?

        • 条件式の後に単文を実行する場合はブレースを付けないコーディング規約なのかも知れません。

          私はかつて、最初にプログラマとして勤めた職場が「ブレース省略禁止」で叩き込まれたこともあり、ブレース省略の利点がさっぱりわからない(こういうバグを生む)のですが、なぜか「単文ではブレース省略」とする規約は見たことがあります。

          親コメント
          • 不要なコードは書くな主義かな。
            ソースコードのサイズを制限したいとか
            #そういう時代もあったんです

            あるいはK&Rスタイルに沿っているつもりとか。

            単文にはそもそも中括弧は不要だからでしょう。
            つまり「省略」じゃない。
            Syntax Sugarの一種で水増しだといわれても仕方がない面があるから。

            IFの実行部は必ずブロックにしろ、単文は使うなってのは30年以上前から言われてますけどね。

            親コメント
          • by Anonymous Coward

            一般論としては、言語のある機能を使わずすますために、
            冗長な記述を毎回繰り返すことは、
            ダメプログラマーの典型的な行動なので、
            ブレースは省略すべきということになる。

            ただし、ブレースの省略に関していえば、
            ミスが発生しやすいことが過去の多くの例で立証され続けているので、
            そろそろ例外と断定してもいいだろう。

            他に例外になりそうなものを挙げるとすれば三項演算子や再帰などがあるが、
            これについては賛否両論の段階だろう。

          • by Anonymous Coward

            自動整形機能を使っていればほとんど問題にならないんだよね。
            emacsを使って書かれたコードとかは括弧を省略しているのが多かった。
            今でもVisual Studioならば文法上正しいインデントにされますね。

            そういう機能を持たないエディタで書かれたコードのインデントがおかしいな
            と思ったときは全体を一括整形してチェックしたりもします。

      • by Anonymous Coward

        ???

      • by Anonymous Coward

        どのエディタだと、何段階でアウトになるのかよろ。

        #OSXで動くものにしてね。

      • by Anonymous Coward

        elifは飾りじゃないのよって事
        if (~!=0);else if (~!=0)~else if (~!=0);else{/*success*/}/*failure*/;return err;
        if (~!=0);else{ if (~!=0)~else{ if (~!=0);else{/*success*/}}}}}}…}/*failure*/;return err;
        この様に括弧を付けると先の条件文が/*success*/が終り閉じ括弧を見つけるまで確定しない。
        10個過ぎ辺りで規格上の入れ子限界
        100個過ぎ辺りでブロック文が規格上の入れ子限界&「いい加減にしなさい条件文重ねすぎ!」とギブアップ宣言するコンパイラも

        プリプロセッサのelifの場合はendif乱打を防ぐ飾りかもしれんし
        括弧付けてな

        • by Anonymous Coward

          いや、お前みたいにelse ifをelseでネストして書くの少数派だから。
          それ前提で語っても誰も付いていけないよ

    • by Anonymous Coward

      戻り値がboolだから条件判断を省略するとか、整数を左に記述するとか、イミフなのも禁止してほしい。

      • > 戻り値がboolだから条件判断を省略するとか

        いやむしろそれは正しい気がする。
        逆に条件句で整数が入るケースが気色悪い。

        if(1) みたいな。

        親コメント
      • by Anonymous Coward

        整数を左にするのは==と=を間違えた時に有用だからいいんじゃないかな

        • by Anonymous Coward

          片方が定数でないと意味が無いので、これで救われるケースはそれほど多くない上に、
          最近のコンパイラなら警告を出してくれるので、どれほど意味があるか疑問。

        • by Anonymous Coward

          片方が数値でかつ、(意識してわざわざ)数値を左にしたけど、==を=に間違うケースだけ救われる。
          結構レアケースでないかな

      • by Anonymous Coward

        if (b) {
        }
        オーケー、省略はよくない。条件判断を追加しよう
        if (b==true) {
        }
        だがちょっと待ってほしい。b==trueの型はboolではないか。省略せず条件判断を行うべきだ。
        if ((b==true)==true) {
        }
        いやいや、(b==true)==trueの型もboolだ。条件判断を省略するのはよくない。
        if (((b==true)==true)==true) {
        }
        (…以下無限に続く)
        # マジな話「boolだから条件判断を省略」ってまったく意味わからないんですけど。

開いた括弧は必ず閉じる -- あるプログラマー

処理中...