おすすめハードソフト情報

おすすめのハードウェアやソフトウェアの紹介・ニュース

PS4のメッセージクラッシュバグ 原因と対策

PS4のメッセージ機能で特定のメッセージを受信すると、PS4がクラッシュし、ファクトリーリセットをしないと復活しないという不具合。

 

メッセージが送りつけられる前に、アカウント管理でメッセージの受信を「許可しない」に設定する事で対策できます。

怖い人は、PS4を起動する前に、PS AppかPlayStationの公式サイトでログインして、変なメッセージが来てないかチェックするのが良いかと思います。 見つけたらPS4を起動する前にそれを削除しておく。

 

さらに、Live from PlayStationを使わないようにしてください。

PS4のシェア機能による映像配信も行わないようにしてください。

配信を見るならスマホやPCで。

アップデートで問題が修正されるまでは気をつけてください。

PS4の映像をPC経由で配信している場合は問題ありません

 

 

既に受信してPS4がクラッシュしてしまった人は、PlayStationスマホアプリか、PCのブラウザから、PSNにログインし、メッセージ設定で該当のメッセージを全て削除し、受信設定を許可しないにしてください。

その後、PS4の電源ボタンを長押しし、2回音が鳴ったら離します。セーフモードで起動するので、「データベースを再構築」を選択。これでしばらくすると直るかと思います。

 

 

 

原因

ではなぜこのバグが発生したのか。

かつてiPhoneでも似たような不具合が起こりました。

japanese.engadget.com

 

PS4のメッセージ機能は文字数がアルファベットだと120字、日本語だと30字に制限されています。

随分差がありますが、これはbyte基準で文字数が制限されているためです。

 

文字が入力された際のUIの幅をどう変化させるのか、画面にどう表示させるのかというのは普通の文字列なら問題ありませんが、絵文字は全く話が別です。

 

Unicodeの絵文字をスマホ等外部から入力してPS4にメッセージで送った場合、とてもバッファの上限内に収まりません。

おそらく、仕様ではPS4が絵文字を受信しても表示できないようになっているとは思いますが、特定の文字の並びの時だけ絵文字を受信してしまって、本来ではありえないサイズのメッセージを受信することになり、クラッシュするのでしょう。

  

スマホで絵文字を普段見た時に、それを「画像」だと思って見てる人って今はほとんどいませんよね?Twitterでも絵文字1個使っても1文字カウントですが、あれを画像として認識してそれを文字列として表現すると、とても1文字分のbyteには収まりません。

  

簡単に言えば、絵文字を含んだメッセージを無理やり送りつける事でPS4のテキスト処理をめちゃくちゃにしてバグらせてしまう、という感じですね。

 

PCでオンラインゲームをやってる人が、チャット欄にTwitterからコピーしてきた絵文字を貼っても表示されないですよね?四角みたいな文字が出るだけとか。

←これ皆さんただの四角ですよね? しかし、FF14だとこれはサイコロのような絵で表示されます。このように、絵文字のような特殊文字の処理というのは見かけ以上に複雑だったりします。

 

PS4がこの問題を処理するには、おそらく特殊な並び方の時でも絵文字をカットする、あるいはそもそもPS4側にUnicode対応する絵文字を作ってしまうといった感じですかね。

 

ファームウェアのアップデートで対策されるでしょうけど、それまではメッセージが受信されないように設定しておくのが良いです。

 

 

海外のユーザーが原因を解説した文章がこちら

There are all kinds of interesting ways you can fuck up text processing, especially if you're coding in C, C++ or another unsafe language.

For example, say messages have a maximum size of 140 characters (I don't know if they do, I don't use this feature, but let's assume they do for the sake of the example) and you naively reserve a fixed size 140 byte buffer for them. As long as people are just sending plain english messages, no problem. But when people can enter other characters, like emoji, that are encoded using multiple bytes you suddenly get a message that's too large for the buffer, even if it's only 140 characters, that doesn't necessarily mean only 140 bytes. It does for simple text so you don't notice during testing, until someone posts a bunch of unicode text and boom.

Dealing with text is more complicated than you'd think. A question like 'how long is this piece of text' has multiple different answers depending on what length you're actually looking for.