- ベストアンサー
「%n」や「%S」は何故恥ずかしいのですか?
auのW42CAとW42Hに「%n」や「%S」とメールなどで打つと強制再起動してしまうバグが発見されましたよね。これがまた恥ずかしいバグらしいのですがいったい何故なのでしょうか? http://japanese.engadget.com/2006/08/04/au-w42ca-w42h/
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
%nや%Sで異常になるということからして、printfのたぐいの何かの使い方を間違ったと想像されます。 printf系の関数は printf(書式指定、データ、データ、・・・)という使い方をします。 文字列を1つだけ出力する場合、さぼって、printf(文字列)としてもだいたい動きますが、文字列の中に書式指定用の特殊文字が入っていると異常動作を起します。というわけで、携帯の異常動作は、printf(メールのデータ)としちゃったせいだと容易に想像できるわけです。 で、この手の間違いを避けるというのは初歩の初歩で、プロのプログラマどころか、Cの勉強をしている学生でも、やっちゃうと恥ずかしいバグです。 うっかりミスだと言い訳できるレベルではありません。先日起きたプール事故での、「カナヅチの人をプールの監視員に雇ってた」てのと似た、会社側のずさんな人事体制が透けて見えます。
その他の回答 (6)
プログラムの内部的な話は皆さんが仰るとおりでしょうけど、 特定の文字(または文章)を送信(投稿)すると、送信や投稿処理以外の何らかの処理が行われ、セキュリティーホールとなる というのは、特にBBSではごく一般的で、初歩中の初歩としてどんな資料にも書かれています。 それを作ってしまった、ということでもあるんじゃないでしょうか。 また、自動操作・遠隔操作ソフトの場合でいうと、 命令文として使われているコードをメールで送信すると、 (本来は操作ソフトを通じなければ動かないはずなのに、メールを送信するだけで)相手側の機器を乗っ取ることが出来てしまった というパターンだったら最悪ですね。 (むしろ、メールを使って遠隔操作するテストコードが残ってたとかだったら、、、) 今回は関係ありませんが、 長い文章を送信すると、バッファオーバーフローという現象によりクライアントやサーバーがクラッシュしたり、任意のコード(アプリケーション)が実行される というセキュリティーホールは有名ですね。
お礼
ちょっとしたミスで最悪の可能性もありえるのですね。 回答ありがとうございました。
- MrBan
- ベストアンサー率53% (331/615)
# ごめんなさい、間違ってた…orz %nは標準規格に入ってます。 実装による定義と位置づけられるのは%Sの方。
- MrBan
- ベストアンサー率53% (331/615)
# 前の回答に対する補足となってしまいますが。 > でも、よく考えたら "%n" と "%S" はどっちも特殊文字ではない……。 標準C/C++のprintfとしては特殊文字ではないのですが、 それを特殊文字として実装している環境などもあります…。 >Microsoft %n:整数へのポインタ %S:printf用のワイド文字列(wchar_t*) 内情はわかりませんが、テストケースをきった担当にこういう知識がなかった?
- sakusaker7
- ベストアンサー率62% (800/1280)
#2さんのに補足 > でも、よく考えたら "%n" と "%S" はどっちも特殊文字ではない……。 そんなことはありません(%Sのほうはobsoleteだったりしますが)。 %n → これまでに出力された文字数を int * (または類似の型) のポインタ引き数が指す整数に保存する。 %S → ワイド文字指定 です。
えとですね。 C言語を使うプログラマーには有名な話なのですが、"%" で始まる一部の文字は特殊な意味を持つのです。 "%d" "%s" "%x" などは、「ここに文字を埋め込め」という命令を示します。 ユーザーがこのような仕様を意識しないで済むよう、処理を施すことはプログラマーとしては基本中の基本であり、「風呂に入るのにパンツを脱ぐのを忘れていた」というくらい恥ずかしいことなのです。 でも、よく考えたら "%n" と "%S" はどっちも特殊文字ではない……。 記事に書いてあるほどには恥ずかしいバグじゃないですね。これ。 なんでこんなバグが……???
お礼
分かりやすい喩えと答えをありがとうございました。
- my_namae_ue
- ベストアンサー率29% (29/99)
たいていの組み込み型プログラムはC言語で書かれてあり、その中で基本的に文字を表示するのに使われる文法に、printf というのがあって。 その中で %とその後の文字は特殊な意味が、、、 後はリンクを見て。 でも、何故チェックから漏れたのかな、、基本過ぎて漏れたのか? いやいや、私も気をつけよう!
お礼
なるほど、基本中の基本のプログラムミスだったのですね。 回答ありがとうございました。
お礼
なるほど、メール本文がメールのデータとして扱われしまうので今回は再起動してしまう事になったのですね。 分かりやすい回答ありがとうございました。