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

Linux/Unixでのセキュアなプログラムの書き方」記事へのコメント

  • ざっと眺めてみようとして分量にびびりました。翻訳も大変だったでしょうね。感謝&お疲れ様。存分に活用させて頂きます。
    • 確かに長いですね。
      ざっと目を通しましたが、やっぱり、C/C++プログラマとして、
      文字列処理系の問題は頭が痛いなぁと思いました。
      最後の方に、

      printf(some_string_text);

      は、

      printf("%s", some_string_text);

      としなさいというのがあり、目から鱗が
      • printf(some_string_text);

        は、

        printf("%s", some_string_text);

        としなさいというのがあり、目から鱗が落ちました。
        弊社の若人には、

        fputs(some_string_text, stdout);

        にせよ、と教えてるんですけど... (セキュリティ以前の問題で)。
        • それだと動作が変わってしまうよ、、、
          • > それだと動作が変わってしまうよ、、、

            printf("%s", some_string_text);

            fputs(some_string_text, stdout);
            ではどのように動作が異なるのですか?
            • 少なくとも、プログラマが関数を選択する段階で必要な3つのポイントがあるでしょう。

              1.成功時の戻り値の仕様
              printf:転送された文字数を返す。
              fputs: 非負の値を返す。

              2.エラー時の戻り値の仕様
              printf:出力エラーが発生したときは、負の値を返す。
              fputs:書込みエラーが発生するとEOFを返す。

              3.変更、拡張への対応
              "%s"を前提としている場合でも、
              • by Anonymous Coward on 2003年06月21日 20時30分 (#342634)
                > 3.変更、拡張への対応
                > "%s"を前提としている場合でも、printfでは"%10s"のよう
                > な文字数指定への拡張が可能です。

                それがどのように関係しているのか分かりません。

                /*a*/ printf("%s", some_string_text);
                /*b*/ fputs(some_string_text, stdout);
                /*c*/ printf("%10s", some_string_text);

                # aとbは同じ動作ですが、cは異なる動作となります。

                「aとbの動作の違いは?」という質問がでている状況です。
                aならばcのように変更可能だと言うのでしたら
                bだっておなじくcのように変更可能です。
                親コメント

Stableって古いって意味だっけ? -- Debian初級

処理中...