Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Android5以降で曲タイトルが表示されなくなる問題を修正 #81

Merged
merged 1 commit into from Dec 12, 2015

Conversation

suzukiplan
Copy link
Owner

問題内容

曲のタイトルとcopyrightの表示が欠損する(下記参照)
https://twitter.com/suzukiplan/status/675356355927015424

原因

Android 5以降で vsnprintf の仕様が次の様に変わったため:

  • Android4以前: format-stringにロケール外MBCSが混入していても正常に文字列が組み立てられる
  • Android5以降: format-stringにロケール外MBCSが混入しているとそこが '\0' に置換される

回避策

  • a) format-string は "%s" にしておき、可変引数にロケール外MBCSを含む文字列ポインタを渡すことで回避可能
  • b) ロケール外MBCSに format-string を含む場合は回避不可能なので iconv 等をするか setlocale をする必要があるものと考えられる

対策方法

回避策aでの回避を行う。

suzukiplan added a commit that referenced this pull request Dec 12, 2015
Android5以降で曲タイトルが表示されなくなる問題を修正
@suzukiplan suzukiplan merged commit 5259740 into master Dec 12, 2015
@suzukiplan suzukiplan deleted the v2.00a branch December 12, 2015 01:59
@suzukiplan
Copy link
Owner Author

理想的にはプランbかもしれないけど、LinuxではSJIS自体がobsoleteなのでお手軽な回避策( setlocale )での回避ができない。UTF-8からUCS2へデコード後コードテーブルを参照してJIS X 0208へマップさせる手段もあるけど、やや面倒臭い。という訳でプランaにしておいた。

@suzukiplan
Copy link
Owner Author

「仕様変更」とマイルドな表現をしているけど、どう見ても Android 5 のデグレードだと思います。
POSIXにそんな仕様は書かれていなかったと思うので。
「セキュリティ対策」とかみたいなフワッとした表現で治したんだろうなぁと想像。
...などという事をOS屋さんへ言うと「そこはAndroidじゃなくてCRTだ」みたいな責任逃れをするかもしれないけど。AndroidはLinuxの上に乗っかっているので、Androidのバージョンアップによるカーネル更新でCRT側の更新がされたことによる仕様変更だろうとは思っていますが。(オープンソースの世界ではよくあること)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant