-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
https://github.com/oguna/yet-another-migemo-dict/releases/tag/v0.4 で配布されている migemo-compact-dict.zip を利用して
cargo build && ./target/debug/rustmigemo -d $HOME/Downloads/migemo-compact-dict
と実行したときに、's' や 'h' などの特定のクエリを実行したときに、panic してしまいます。
QUERY: s
thread 'main' panicked at src/migemo/regex_generator.rs:252:83:
called `Option::unwrap()` on a `None` value
stack backtrace:
0: rust_begin_unwind
at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:645:5
1: core::panicking::panic_fmt
at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panicking.rs:72:14
2: core::panicking::panic
at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panicking.rs:144:5
3: core::option::Option<T>::unwrap
at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/option.rs:931:21
4: rustmigemo::migemo::regex_generator::RegexGenerator::generate_stub
at ./src/migemo/regex_generator.rs:252:14
5: rustmigemo::migemo::regex_generator::RegexGenerator::generate
at ./src/migemo/regex_generator.rs:186:5
6: rustmigemo::migemo::query::query_a_word
at ./src/migemo/query.rs:40:21
7: rustmigemo::migemo::query::query
at ./src/migemo/query.rs:51:23
8: rustmigemo::main
at ./src/main.rs:98:26
9: core::ops::function::FnOnce::call_once
at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:250:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
diff --git src/migemo/regex_generator.rs src/migemo/regex_generator.rs
index 9ec12b8..111fe60 100644
--- src/migemo/regex_generator.rs
+++ src/migemo/regex_generator.rs
@@ -249,6 +249,10 @@ impl RegexGenerator {
{
buf.push('\\');
}
+ println!("TMP====");
+ println!("{:?}", tmp.as_ref().unwrap().code);
+ println!("{:?}", tmp.as_ref().unwrap().code as u32);
+ println!("{:?}", std::char::from_u32(tmp.as_ref().unwrap().code as u32));
buf.push(::std::char::from_u32(tmp.as_ref().unwrap().code as u32).unwrap());
if operator.newline.len() > 0 {
buf.push_str(&operator.newline);のように printf debug をしますと、以下のようになります。
(前略)
TMP====
40635
40635
Some('麻')
TMP====
40653
40653
Some('黍')
TMP====
55362
55362
None
thread 'main' panicked at src/migemo/regex_generator.rs:256:83:
called `Option::unwrap()` on a `None` value
stack backtrace:
0: rust_begin_unwind
at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/std/src/panicking.rs:645:5
1: core::panicking::panic_fmt
at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panicking.rs:72:14
2: core::panicking::panic
at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/panicking.rs:144:5
3: core::option::Option<T>::unwrap
at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/option.rs:931:21
4: rustmigemo::migemo::regex_generator::RegexGenerator::generate_stub
at ./src/migemo/regex_generator.rs:256:14
5: rustmigemo::migemo::regex_generator::RegexGenerator::generate
at ./src/migemo/regex_generator.rs:186:5
6: rustmigemo::migemo::query::query_a_word
at ./src/migemo/query.rs:40:21
7: rustmigemo::migemo::query::query
at ./src/migemo/query.rs:51:23
8: rustmigemo::main
at ./src/main.rs:98:26
9: core::ops::function::FnOnce::call_once
at /rustc/07dca489ac2d933c78d3c5158e3f43beefeb02ce/library/core/src/ops/function.rs:250:5
よって、意図しない 55362 によってエラーになっているようです。
コードの詳細は追っていないのですが、 55362 は十六進数で 0xD842 なのでUnicodeのHigh Surrogates (U+D842) だと思います。サロゲートペアに現在の rustmigemo が対応していないにもかかわらず、yet-another-migemo-dict には surrogate pair で表現されるような文字列が含まれているために発生しているのかなと想像しています。
- サロゲートペアに対応するように rustmigemo を修正する
- サロゲートペアで表現されるような文字は重要度が低いと考えて辞書の生成時点で除外してしまう。
などの対応策が考えられるのかなと思いました。
(なお、https://github.com/oguna/migemo-compact-dict-latest の辞書では問題なく動作しております)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels