auのW42CAとW42Hに「%n」や「%S」とメールなどで打つと強制再起動してしまうバグが発見されましたよね。これがまた恥ずかしいバグらしいのですがいったい何故なのでしょうか?
http://japanese.engadget.com/2006/08/04/au-w42ca …
No.6ベストアンサー
- 回答日時:
%nや%Sで異常になるということからして、printfのたぐいの何かの使い方を間違ったと想像されます。
printf系の関数は
printf(書式指定、データ、データ、・・・)という使い方をします。
文字列を1つだけ出力する場合、さぼって、printf(文字列)としてもだいたい動きますが、文字列の中に書式指定用の特殊文字が入っていると異常動作を起します。というわけで、携帯の異常動作は、printf(メールのデータ)としちゃったせいだと容易に想像できるわけです。
で、この手の間違いを避けるというのは初歩の初歩で、プロのプログラマどころか、Cの勉強をしている学生でも、やっちゃうと恥ずかしいバグです。
うっかりミスだと言い訳できるレベルではありません。先日起きたプール事故での、「カナヅチの人をプールの監視員に雇ってた」てのと似た、会社側のずさんな人事体制が透けて見えます。
なるほど、メール本文がメールのデータとして扱われしまうので今回は再起動してしまう事になったのですね。
分かりやすい回答ありがとうございました。
No.7
- 回答日時:
プログラムの内部的な話は皆さんが仰るとおりでしょうけど、
特定の文字(または文章)を送信(投稿)すると、送信や投稿処理以外の何らかの処理が行われ、セキュリティーホールとなる
というのは、特にBBSではごく一般的で、初歩中の初歩としてどんな資料にも書かれています。
それを作ってしまった、ということでもあるんじゃないでしょうか。
また、自動操作・遠隔操作ソフトの場合でいうと、
命令文として使われているコードをメールで送信すると、
(本来は操作ソフトを通じなければ動かないはずなのに、メールを送信するだけで)相手側の機器を乗っ取ることが出来てしまった
というパターンだったら最悪ですね。
(むしろ、メールを使って遠隔操作するテストコードが残ってたとかだったら、、、)
今回は関係ありませんが、
長い文章を送信すると、バッファオーバーフローという現象によりクライアントやサーバーがクラッシュしたり、任意のコード(アプリケーション)が実行される
というセキュリティーホールは有名ですね。
No.4
- 回答日時:
# 前の回答に対する補足となってしまいますが。
> でも、よく考えたら "%n" と "%S" はどっちも特殊文字ではない……。
標準C/C++のprintfとしては特殊文字ではないのですが、
それを特殊文字として実装している環境などもあります…。
>Microsoft
%n:整数へのポインタ
%S:printf用のワイド文字列(wchar_t*)
内情はわかりませんが、テストケースをきった担当にこういう知識がなかった?
No.3
- 回答日時:
#2さんのに補足
> でも、よく考えたら "%n" と "%S" はどっちも特殊文字ではない……。
そんなことはありません(%Sのほうはobsoleteだったりしますが)。
%n → これまでに出力された文字数を int * (または類似の型) のポインタ引き数が指す整数に保存する。
%S → ワイド文字指定
です。
参考URL:http://www.linux.or.jp/JM/html/LDP_man-pages/man …
No.2
- 回答日時:
えとですね。
C言語を使うプログラマーには有名な話なのですが、"%" で始まる一部の文字は特殊な意味を持つのです。
"%d" "%s" "%x" などは、「ここに文字を埋め込め」という命令を示します。
ユーザーがこのような仕様を意識しないで済むよう、処理を施すことはプログラマーとしては基本中の基本であり、「風呂に入るのにパンツを脱ぐのを忘れていた」というくらい恥ずかしいことなのです。
でも、よく考えたら "%n" と "%S" はどっちも特殊文字ではない……。
記事に書いてあるほどには恥ずかしいバグじゃないですね。これ。
なんでこんなバグが……???
No.1
- 回答日時:
たいていの組み込み型プログラムはC言語で書かれてあり、その中で基本的に文字を表示するのに使われる文法に、printf というのがあって。
その中で %とその後の文字は特殊な意味が、、、
後はリンクを見て。
でも、何故チェックから漏れたのかな、、基本過ぎて漏れたのか? いやいや、私も気をつけよう!
参考URL:http://www.isc.meiji.ac.jp/~deptec/cmanchp2.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(買い物・ショッピング) スタバでauペイは使えますでしょうか?? スタバに行ってこれを出し使えなかったら恥ずかしいので…泣 2 2022/09/08 02:10
- その他(コンピューター・テクノロジー) Ubuntu22.04ltsですが、たまにYou Tubeを聴いたり観たりしていると、無限ループでコ 2 2023/07/21 13:19
- au(KDDI) auからの 【重要なお知らせ】 は本物? 6 2022/04/07 22:09
- au(KDDI) auスマートパスプレミアム解約できなくて困ってます! 自分の管理不足でお恥ずかしいのですが、詳しい方 6 2023/02/27 13:37
- au(KDDI) au PAY プリペイドカードの再発行を行うとau pay残高は新しいカードに移行されず消滅しますか 1 2022/08/28 13:46
- au(KDDI) au料金の支払いについてです。口座引き落としではなく振り込み用紙での支払いにしているのですが25日の 5 2023/05/31 13:22
- パズドラ パズドラが開けません… 1 2022/12/26 13:45
- iPhone(アイフォーン) 位置情報アプリの友どこについてなんですが、昨日まで全く使えていたのに、今日いきなりバグって使えなくな 1 2023/07/22 16:04
- テレビ REGZA タイムシフトに録画されない、バグ 1 2023/06/21 05:43
- 政治 友達のauの携帯に電話がつながりません。選挙期間中ですから、責任は自民党政権に有りますよね? 6 2022/07/03 05:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンパイルエラーについて
-
LU分解法のピボッティングにつ...
-
テキストカーソル位置の取得
-
C言語です このプログラミング...
-
10個出力で改行したいのですが...
-
C言語の二項分布
-
printfの出力内の文字をdefine...
-
LU分解法のピボット選択機能実...
-
【C言語教えてください】sin波...
-
4の倍数を論理演算で表す。。
-
C言語の勉強しています。すみま...
-
空Enterの扱い方
-
C言語 文字列の比較 compare
-
C言語での、年複利の計算方法...
-
printf で二進表示を行いたい。
-
switch分のケースを範囲数?に...
-
scanfに文字が入力されたときに...
-
if文がコンパイルエラーを起こ...
-
C言語でマウス入力(クリックや...
-
なぜgccはstdio.hをインクルー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
printf で二進表示を行いたい。
-
【C言語教えてください】sin波...
-
strcmp
-
コンパイルエラーについて
-
c言語でAからZまでを表示する...
-
コマンドラインに出力した文字...
-
cshの文字列操作(0埋め)
-
4の倍数を論理演算で表す。。
-
C言語 プログラミング
-
%P と %X の違い
-
8人分のテストの点数を入力し、...
-
C言語での、年複利の計算方法...
-
printf( " %2d", p * q );
-
hit&bolwのプログラミングがで...
-
scanfに文字が入力されたときに...
-
error C2143: 構文エラー : ';'...
-
printfの出力内の文字をdefine...
-
テキストカーソル位置の取得
-
unsigned int型について
おすすめ情報