View Issue Details
Category | |||||
---|---|---|---|---|---|
SSPBT:本体(SSP) | |||||
Severity | minor | Reproducibility | always | ||
Status | closed | ||||
Fixed in Version | 2.4 (リリース) | ||||
Summary | 0000028: 特定条件下で期待通りに文字が表示されない(Wine) | ||||
Description | *バグの詳細 Wine 4.2以降でさくらスクリプト"00\n1\nA\nあ"を実行すると test1.pngのように表示されます。 ("1", "A", "あ" が全て"0"になる) *再現方法 4.2以降のWineでSSPを起動し、適当なゴーストを選んでCtrl+S→"00\n1\nA\nあ"を実行。 "1", "A", "あ" は任意の一文字(ワイド文字1文字分)であれば同じ症状が起こります。 *環境 Debian 10 (buster) Wine (PlayOnLinux) 4.2, 4.4, 4.11, 4.12 SSP 2.3.97, 2.4.00, 2.4.41, 2.4.42 *原因 Wine 4.2以降に実装されている、NormalizeString関数が失敗したときの処理に起因しているようです。 MSDNのNormalizeStringの説明[1]には > NormalizeStringのSrcLengthに"-1"を指定する場合は > DstStringの末尾にNull終端が書き込まれる。 とありますが、SSPでは"1"や"あ"のようなワイド文字1文字に対して NormalizeStringを実行する際に DstLengthが"1"になっている[2]ためDstStringにNull終端が書き込めず失敗します。 Wine 4.2以降に実装されているNormalizeStringは 上記のような場合にはDstStringに*何も書き込まない*が成功扱いになるため、 SSPは成功したと誤認して直前にNormalizeStringに成功した文字列の1文字目を 誤って表示しているように見えます。 [1] https://docs.microsoft.com/en-us/windows/win32/api/winnls/nf-winnls-normalizestring#return-value [2] WINEDEBUG=trace+nls wine /path/to/ssp.exe |& grep -i normalize を実行すると 0030:trace:nls:NormalizeString 1 L"00" -1 0x102c63c 3 0030:trace:nls:NormalizeString 1 L"1" -1 0x102c63c 1 0030:trace:nls:NormalizeString 1 L"A" -1 0x102c63c 1 0030:trace:nls:NormalizeString 1 L"\3042" -1 0x102c63c 1 のようなログが出力されました。(NormalizeStringの後の文字は引数) | ||||
Tags | No tags attached. | ||||
Attach Tags | |||||
Attached Files | |||||
Date Modified | Username | Field | Change |
---|---|---|---|
2019-09-15 00:47 | guest | New Issue | |
2019-09-15 00:47 | guest | File Added: test1.png | |
2019-09-30 10:59 | ponapalt | Assigned To | => ponapalt |
2019-09-30 10:59 | ponapalt | Status | new => closed |
2019-09-30 10:59 | ponapalt | Resolution | open => fixed |
2019-09-30 10:59 | ponapalt | Fixed in Version | => 2.4 (リリース) |
2019-09-30 10:59 | ponapalt | Note Added: 0000042 |