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

JIS第3水準(JIS X 0213)の一部の漢字を、iconv()でISO-2022-JP-3に変換しようとするとkaoriya版gvimが落ちる #248

Closed
deton opened this Issue Sep 6, 2012 · 9 comments

Comments

Projects
None yet
2 participants
@deton
Member

deton commented Sep 6, 2012

Windows用kaoriya版gvimで、JIS第3水準・第4水準(JIS X 0213)の一部の漢字を、iconv()でISO-2022-JP-3に変換しようとするとgvimが落ちます。
(Linuxでは問題ないので、kaoriya版に含まれるiconv.dll側の問題のような気がします。)

環境

  • vim73-kaoriya-win32-20120902
  • Windows 7 (32bit)

再現手順1

:let tmp = iconv("\xe9\xb7\x97", 'UTF-8', 'ISO-2022-JP-3')
:let tmp = iconv("\xfe\xe5", 'euc-jisx0213', 'iso-2022-jp-3')

('iso-2022-jp'でも落ちる。)

再現手順2

「鷗」(U+9DD7)を含むファイルtest.utf-8を開く、もしくは<C-v>u9dd7と入力して、iso-2022-jp-3で保存。

:se enc=utf-8
:e test.utf-8 もしくは、a<C-v>u9dd7<Esc>
:w ++enc=iso-2022-jp-3 jis

備考

カーソル位置の漢字のcharset(jisx0208,jisx0213等)を(iso-2022-jp-3やiso-2022-jp-2に変換してみて)判定するpluginを書いて、Linuxで使っていたのですが、Windowsで動かしてみたらgvimが落ちたので気づきました。
https://github.com/deton/getjpcharset.vim

@koron

This comment has been minimized.

Member

koron commented Sep 6, 2012

KaoriYa版に付属のiconvはかなり古くて1.10。それ以降のは版はWindowsでコンパイルできなかったりしたので。加えてUNICODEにMSな独自パッチがあたっている。あれ?CP932とEUC_JPの間の変換だったか? ちょっと覚えてない。

@ghost ghost assigned koron Sep 6, 2012

@koron

This comment has been minimized.

Member

koron commented Sep 6, 2012

わお。コレで落ちた。

let tmp = iconv("\xe9\xb7\x97", 'UTF-8', 'ISO-2022-JP-3')
@koron

This comment has been minimized.

Member

koron commented Sep 6, 2012

手元にiconv.dllのデバッグ版がなくて死亡w…メンドイ

@koron

This comment has been minimized.

Member

koron commented Sep 6, 2012

独自のeuc-jpの変換が悪さしてたっぽい。気を利かせてJISX0212の変換をやっていた箇所を消したら、落ちなくなった。

@koron

This comment has been minimized.

Member

koron commented Sep 6, 2012

@deton gvim.exe に付属のiconv.dll を http://files.kaoriya.net/var/iconv-20120906_01.zip このバージョンに差し替えて試してもらえますか? 良さそうなら次の版から差し替えます。zipの中には iconv-20120906_01.dll というファイルが入っているので iconv.dll に変更して使ってください。

@deton

This comment has been minimized.

Member

deton commented Sep 6, 2012

落ちなくなりました。ありがとうございます。
が、一部の漢字がiso-2022-jp-3に変換すると壊れるようです。
例:仡(U+4EE1)をiso-2022-jp-3で保存するとjisx0208に変換しようとしている模様。

以下のデータを使って動作確認しています。(網羅的に作ったものではないですが)
https://github.com/deton/getjpcharset.vim/tree/master/test

@koron

This comment has been minimized.

Member

koron commented Sep 7, 2012

一部の漢字がiso-2022-jp-3に変換すると壊れるようです。

libiconvが古い&へんなパッチがあたってるので、現状では&暫くの間は改善の見込みがありません。

対策として最新のlibiconvをMSVCに対応させる(+kaoriyaなVimで使う)ためのプロジェクトを作りましたので、以降はそっちでやりましょう。

https://github.com/koron/libiconv

@koron

This comment has been minimized.

Member

koron commented Sep 7, 2012

落ちなくなったことを持ってこっちは閉じます。

@koron koron closed this Sep 7, 2012

@koron

This comment has been minimized.

Member

koron commented Sep 7, 2012

一部の漢字がiso-2022-jp-3に変換すると壊れるようです。
例:仡(U+4EE1)をiso-2022-jp-3で保存するとjisx0208に変換しようとしている模様。

koron/libiconv#2 に対象文字が含まれているか確認する

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment