「エディットモードのバグについて(暫定)」の編集履歴(バックアップ)一覧はこちら

エディットモードのバグについて(暫定)」(2010/12/24 (金) 03:45:45) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*エディットモードの歌詞入力における禁則文字列について このページはエディットスレ[[【エディット専用】初音ミク -Project DIVA- 23>http://toki.2ch.net/test/read.cgi/handygame/1281527703/]]のレス番[[213-218>http://toki.2ch.net/test/read.cgi/handygame/1281527703/213-218]]を見て、もしやと思い検証した結果です。 ***概要 エディットモードでは歌詞を入力することができますが、特定の文字列を入力すると異常動作を引き起こすことがあります。 検索しても話題になっていないようです。筆者は規制で2chスレの方に書けないので、暫定的にここにまとめておきます。 一応、筆者が実機で確認したものですが、人によって結果が異なったり、未発見の動作があるかも知れません。 ***問題の要因と動作 具体的にいくつかの動作を確認したところ、以下に示す文字列で動作が見られました。 ※筆者環境:いっぱいパック同梱のPSP-3000とソフトでインストールデータ使用。楽曲MP3は外部のものを読み込んでいます。 - 半角の円記号(¥)を1つ入力すると、表示は2つの円記号(¥¥)、歌詞データは2つのバックスラッシュ(\\)に変化します。 特に問題は無いでしょうが、円記号を表示させたい場合は全角を使うか、注意してバックスラッシュを使う必要があります。 - 半角で「\a」「\b」等を入力すると、出力では別の文字が表示されます。 制御文字。ただし「\n」「\t」は反応なし(?)。 - 半角のパーセント記号(%)を出力するためには、記号を2つ連続して入力する(%%)必要があります。 特殊文字のエスケープ。printf系関数の仕様です。 - 半角で「%d」「%f」「%c」「%p」「%x」等を入力すると、歌詞の表示では数値になります。 書式指定子。スタックメモリ(ゲームが使う領域みたいなもの)から定められたバイト数のデータを読み取り、 「10進数値」「16進数値」「文字」「小数」として表示するものです。決まったバイト数分読み取るだけなので特に実害はないと思われます。 ちなみに20バイトくらい16進で読むと「deadbeef(興味あったらググッてね)」を見ることができました^^ - &bold(){半角で「%s」「%ls」「%S」「%n」を入力すると、不正なメモリアクセスが発生し、操作不能になった後PSP本体の電源が落ちます。} 同じく書式指定子。 「%s」「%ls」「%S」はアドレスを参照して文字列を出力しようとする。「%n」はアドレスに書き込む。 どちらも「メモリアドレスを勝手に参照」し、不定数のデータを出力しようとしたり勝手に書き込もうとしたりで、電源が落ちても当然と言えます。 ただ、電源落ちは場所によって起こる場合と起こらない場合があるようです。1小節目に「%s」で落ちましたが「%X%X%X%X%X%s」では落ちませんでした。 28日夜に文字の種類を追加検証しました。よって、歌詞中に「1000%SPARKING!」なども迂闊に書けないことが分かりました。 ***備考 原因はおそらくC言語のprintf系関数の書式指定子です(そのまま)。 件の問題の挙動から、入力された歌詞がprintf系関数で処理されていることが推測できます。 しかし、入力文字列をそのまま「fmt」として渡している等のある意味「禁則処理」によって、上記のような問題が発生します。 つまり、printf関数の場合なら     printf(inputstring); /* 入力文字列を「書式」として渡している! */ というようなプログラムが記述されている可能性があり、特に英文とパーセント記号を用いるでは電源落ちの問題等を引き起こしてしまいます。 大まかに検証した結果、printfの書式指定子の仕様がこのソフトでもかなり生きているようなので、いろいろな文字で注意が必要です。 まだセガに報告とかはしていません。わざわざ報告するほどのことかなぁとも思うので……誰かがもうしているかも知れませが//// ソフトウェアの修正が必要なのは確定的に明らかですが、普通の歌詞なら特に問題はないはずです。 今のところ電源落ちでデータが飛んだりはしていませんが、セーブしてない分は普通に消えるので、まぁ気をつけましょうということで^^ ***参考 [[Wikipedia - printf>http://ja.wikipedia.org/wiki/Printf]] ---- #pcomment(reply,enableurl)&aname(comment)
#setmenu(2ndメニュー) *エディットモードの歌詞入力における禁則文字列について このページはエディットスレ[[【エディット専用】初音ミク -Project DIVA- 23>http://toki.2ch.net/test/read.cgi/handygame/1281527703/]]のレス番[[213-218>http://toki.2ch.net/test/read.cgi/handygame/1281527703/213-218]]を見て、もしやと思い検証した結果です。 ***概要 エディットモードでは歌詞を入力することができますが、特定の文字列を入力すると異常動作を引き起こすことがあります。 検索しても話題になっていないようです。筆者は規制で2chスレの方に書けないので、暫定的にここにまとめておきます。 一応、筆者が実機で確認したものですが、人によって結果が異なったり、未発見の動作があるかも知れません。 ***問題の要因と動作 具体的にいくつかの動作を確認したところ、以下に示す文字列で動作が見られました。 ※筆者環境:いっぱいパック同梱のPSP-3000とソフトでインストールデータ使用。楽曲MP3は外部のものを読み込んでいます。 - 半角の円記号(¥)を1つ入力すると、表示は2つの円記号(¥¥)、歌詞データは2つのバックスラッシュ(\\)に変化します。 特に問題は無いでしょうが、円記号を表示させたい場合は全角を使うか、注意してバックスラッシュを使う必要があります。 - 半角で「\a」「\b」等を入力すると、出力では別の文字が表示されます。 制御文字。ただし「\n」「\t」は反応なし(?)。 - 半角のパーセント記号(%)を出力するためには、記号を2つ連続して入力する(%%)必要があります。 特殊文字のエスケープ。printf系関数の仕様です。 - 半角で「%d」「%f」「%c」「%p」「%x」等を入力すると、歌詞の表示では数値になります。 書式指定子。スタックメモリ(ゲームが使う領域みたいなもの)から定められたバイト数のデータを読み取り、 「10進数値」「16進数値」「文字」「小数」として表示するものです。決まったバイト数分読み取るだけなので特に実害はないと思われます。 ちなみに20バイトくらい16進で読むと「deadbeef(興味あったらググッてね)」を見ることができました^^ - &bold(){半角で「%s」「%ls」「%S」「%n」を入力すると、不正なメモリアクセスが発生し、操作不能になった後PSP本体の電源が落ちます。} 同じく書式指定子。 「%s」「%ls」「%S」はアドレスを参照して文字列を出力しようとする。「%n」はアドレスに書き込む。 どちらも「メモリアドレスを勝手に参照」し、不定数のデータを出力しようとしたり勝手に書き込もうとしたりで、電源が落ちても当然と言えます。 ただ、電源落ちは場所によって起こる場合と起こらない場合があるようです。1小節目に「%s」で落ちましたが「%X%X%X%X%X%s」では落ちませんでした。 28日夜に文字の種類を追加検証しました。よって、歌詞中に「1000%SPARKING!」なども迂闊に書けないことが分かりました。 ***備考 原因はおそらくC言語のprintf系関数の書式指定子です(そのまま)。 件の問題の挙動から、入力された歌詞がprintf系関数で処理されていることが推測できます。 しかし、入力文字列をそのまま「fmt」として渡している等のある意味「禁則処理」によって、上記のような問題が発生します。 つまり、printf関数の場合なら     printf(inputstring); /* 入力文字列を「書式」として渡している! */ というようなプログラムが記述されている可能性があり、特に英文とパーセント記号を用いるでは電源落ちの問題等を引き起こしてしまいます。 大まかに検証した結果、printfの書式指定子の仕様がこのソフトでもかなり生きているようなので、いろいろな文字で注意が必要です。 まだセガに報告とかはしていません。わざわざ報告するほどのことかなぁとも思うので……誰かがもうしているかも知れませが//// ソフトウェアの修正が必要なのは確定的に明らかですが、普通の歌詞なら特に問題はないはずです。 今のところ電源落ちでデータが飛んだりはしていませんが、セーブしてない分は普通に消えるので、まぁ気をつけましょうということで^^ ***参考 [[Wikipedia - printf>http://ja.wikipedia.org/wiki/Printf]] ---- #pcomment(reply,enableurl)&aname(comment)

表示オプション

横に並べて表示:
変化行の前後のみ表示:
記事メニュー
目安箱バナー