Factory BLog: 今日あったとは限らないが出来事についてリンクを交えて語る雑記 powered by blosxom wiz MOEPA
RSS feed meter for http://www.g-fact.jp/fblog/blosxom.cgi 最新記事
記事一覧

2004年10月25日

11月1日よりいくつかのパーツを販売停止します。(mingol.net mgo site)

…結局パッチは当てる気なしですか
 
ショップにパーツを置いただけで価格の表示内容がおかしくなり、しかもパーツ追加自体は正常に完了していること、新配布に伴って同数の旧パーツが販売停止になったこと、その相関関係に特筆すべき点が見当たらないことから考察するに、おそらくショップのデータは以下のような構造体になっているのではないだろうか。(フィールド名は適当、PS2のアーキテクチャは判らんのであくまでVisual C++相当)
unsigned char id; // ショップ内での識別ID
unsigned int partsid; // パーツの識別ID
unsigned long price; // 価格 (購入可能フラグを兼ねる)
で、これとは別に、価格>0である場合に、partsidをキーに商品名、商品種別ID(ソートに使用する)、アイコンを引っ張ってくるようなプログラムになっているのではないだろうか。
 
ショップ内での識別IDがunsigned char(0〜255)であることがミソである。
私は全種をまだ並べられていないので正確な数字はわからない(神、以上の段位である方、ご協力いただけたら幸いである)のだが、おそらく現在ショップに並んでいるパーツ数が255個か、それに近い値なのではないだろうか?
プログラムというのは冷淡なもので、メモリ上のデータエリアをここからここまで、と指定したところで、それが正確に行使されるかどうかはプログラム次第なのである(なので、プログラム中からプログラムを書き換えるという荒業も使えた。これを悪用したのがいわゆるバッファオーバーラン脆弱性)。
当然データエリア上においても同じことが発生するわけで、データの格納に必要なメモリ量を超えてしまって別な部分を上書きしてしまっても、それをプログラムで回避しない限りプログラムは破壊されたデータを正常なデータと認識して使うしかないのである。
川奈パッチの時、川奈を回ったときのラウンド結果に妙な値が表示されたことを覚えていらっしゃる方もおられるだろう。
要はあれと似たような状況になっているのである。
脱線した。おそらくショップにパーツを並べる機構というのは、パーツにショップ用の一意なIDを振り、そのパーツのパーツIDと価格を設定したデータをショップ用のデータエリアに追加することで新しく商品として認識されるようになっているものと思われる(新商品が並ぶ時にパッチがないことを考慮せよ)が、256個めを追加しようとしたためにunsigned charで確保された8ビットの領域(0〜255)を飛び越し、価格データを上書きしてしまったのだろう。
256は16進数で0x100、これをunsigned charに格納すると00の部分だけが格納されて、1は直前にある「価格」フィールドを上書きしてしまう。これにより、データエリアを初期化したデータとたまたま同じ値のパーツIDを持つパーツ(壁紙セット)が、異常な価格で表示されてしまう、という事態が発生したのではないか。
 
実際のプログラム内容がどうなっているかはわからないが、おそらく不具合内容としてはこんなもんか、これにかなり近いと思われる。

"mgo-parts-selling-stop-200411" Post: at 2004.10.25 15:48 to [/Factory BLog/mgo]
この記事のコメントとトラックバック(現在 0 件)
この記事のURL(MOEPAつき) ノーマルモード 携帯用 はてなブックマーク - 11月1日よりいくつかのパーツを販売停止します。(mingol.net mgo site) このエントリーを含むはてなブックマーク


・この記事のコメントとトラックバック


・この記事へのトラックバック

・この記事にトラックバックを行う場合は、以下のURLにTrackback Pingを送信してください。


・この記事にコメントする

コメント/trackback spam対策を試験的に導入しております。投稿時に「403 Forbidden」と表示された場合は、管理者までご連絡を御願い申し上げます。
ご連絡があった場合はなるべく迅速に(事情のない限り当日中)、そうでない場合でも気付き次第(最短で翌日)復旧を行います。

・できる限りで動作確認は行っておりますが、設定調整の狭間やサーバ負荷状況によって稀にHTTP/500系のエラー(サーバエラー)が発生してしまうことがあります。万一発生した場合、少し時間を置いてから再度アクセスをお願い申し上げます。ご迷惑をおかけして申し訳ありません。

・基本的にいただいたコメントには極力応答いたしますが、必ずしも全てのコメントに応答しない場合があります。あらかじめご了承ください。

・ボケたら突っ込みましょう。

 
お名前:
URL/メールアドレス: [http://... or mailto:you@wherever] (省略可)
タイトル: (省略可)

・以下のように記述することで、特殊効果を使用することができます(テスト中機能)。

* … *
*で囲まれた部分を強調する
** … **
**で囲まれた部分を赤色をつけて強調する
[[ … ]]( … )
[[ ]]で囲まれた部分に、( )で囲まれた内容のルビ(振り仮名)をつける
(( … ))
(( ))で囲まれた部分を小さく表示する
行頭に >
引用としてその行を斜体で表示する
\*
強調表示しないで*を表示する


情報の取捨選択は自己責任でお願いいたします。

・主な情報元(Unicode順)
・ニュース系
BCNランキング
CNET Japan
excite News
Famitsu.com
impress Watch
Livedoor
Slashdot Japan
Wired Vision
Yahoo! Japan
・お気に入り
16連射のつぶやき
mochiめも
pya!
SWFBLOG
Time's ごはん
Wikipedia
うさだ
チャレンジ部
古今東西製品情報
舞軌内雑筆店
面白いサイトを見つけたよ。

直近2週間にコメントのあった記事
(別窓で開きます)

・Firefox/Mozillaユーザの方は、XHTML Ruby Supportをインストールされることをお勧めいたします。

・Factory BLog全般へのご意見・ご感想・苦情・ご要望・ネタのタレコミ等はこちらへ
半匿名メールフォーム
garagefactory@g-fact.jp [PGP KEY]
※ 個人が特定できない範囲内でネタにさせていただく場合があります。また、必ず対応が行われるとは限りません。予めご了承ください。

・こちらもどうぞ
Factory Log (携帯対応日記)
04年5月までの雑記
Garage Factory

RSS
・年月別の記事一覧:

2004年 (274)

6月 (67)
・7月 (38)
・8月 (29)
・9月 (37)
・10月 (36)
・11月 (32)
・12月 (35)

2005年 (756)

1月 (117)
・2月 (75)
・3月 (73)
・4月 (75)
・5月 (57)
・6月 (57)
・7月 (50)
・8月 (55)
・9月 (59)
・10月 (65)
・11月 (43)
・12月 (30)

2006年 (315)

1月 (52)
・2月 (52)
・3月 (38)
・4月 (18)
・5月 (12)
・6月 (15)
・7月 (20)
・8月 (23)
・9月 (24)
・10月 (23)
・11月 (29)
・12月 (9)

2007年 (172)

1月 (14)
・2月 (17)
・3月 (31)
・4月 (32)
・5月 (26)
・6月 (19)
・7月 (7)
・8月 (5)
・9月 (7)
・10月 (8)
・11月 (4)
・12月 (2)

2008年 (12)

2月 (7)
・4月 (2)
・6月 (2)
・8月 (1)

2009年 (2)

2月 (1)
・3月 (1)

2011年 (1)

2月 (1)
[00007194] この日記のはてなブックマーク数