[ 新規に投稿する ]

アウトラインのツリー定義の読み込みでエラーが起きるNo.42421
Fzok4234 さん 25/12/29 07:00 [ コメントを投稿する ]
  おはようございます。Fzok4234 です。


「ファイルタイプ別の設定」->「アウトライン」->「解析」の「ツリー表示 - 通常」で、「読込み」から
以下のような内容の UTF-16 形式の .hilight ファイルからツリー定義を読み込もうとすると、
エラーメッセージが出てうまく読み込めません。

// ------------------------------------- test.hilight ------------------------------------------

/<TreeWord>
/0000,0002,0000,00000000,40011253,"(?:&#128105;&#127995;&#8205;&#128102;&#127996;|&#128104;&#127997;&#8205;&#128102;&#127998;&#8205;&#128102;&#127999;|&#128105;&#127996;&#8205;&#128104;&#127997;&#8205;&#128102;&#127996;&#8205;&#128103;&#127997;|&#128105;&#127995;&#8205;&#128105;&#127999;&#8205;&#128103;&#127996;&#8205;&#128103;&#127998;|&#128104;&#127995;&#8205;&#128104;&#127996;&#8205;&#128103;&#127995;&#8205;&#128103;&#127997;|&#128104;&#127997;&#8205;&#128105;&#127999;&#8205;&#128102;&#127995;&#8205;&#128103;&#127997;|&#128104;&#127999;&#8205;&#128105;&#127998;&#8205;&#128103;&#127999;&#8205;&#128103;|&#128104;&#8205;&#128104;&#127999;&#8205;&#128103;&#8205;&#128102;&#127995;|&#128105;&#127998;&#8205;&#128105;&#8205;&#128102;&#127998;|&#128104;&#8205;&#128104;&#8205;&#128103;&#8205;&#128102;&#127997;)",""
/<TreeWordEx>
/TreeWordExData:0

// ------------------------------------- test.hilight ------------------------------------------

エラーメッセージは、以下の 3 つが立て続けに出ました。


---------------------------
エラー
---------------------------
正規表現パターンでのカッコの対応が合ってません。
---------------------------
OK   
---------------------------


---------------------------
エラー
---------------------------
(?:&#128105;&#127995;&#8205;&#128102;&#127996;|&#128104;&#127997;&#8205;&#128102;&#127998;&#8205;&#128102;&#127999;|&#128105;&#127996;&#8205;&#128104;&#127997;&#8205;&#128102;&#127996;&#8205;&#128103;&#127997;|&#128105;&#127995;&#8205;&#128105;&#127999;&#8205;&#128103;&#127996;&#8205;&#128103;&#65533;&#63730;゚ - 正規表現の検索処理でエラーが発生しました。
---------------------------
OK   
---------------------------


---------------------------
エラー
---------------------------
ツリー表示用のバッファが一杯か、または不正な文字列があります。
---------------------------
OK   
---------------------------


対象の秀丸エディタは、9.52β7 x64 です。


[ ]
RE:42421 アウトラインのツリー定義の読み込みでエラーが起きるNo.42425
Fzok4234 さん 25/12/29 08:42 [ コメントを投稿する ]
  追伸


読み込む .hilight ファイルの内容を以下のように括弧を使わない正規表現に変えたところ、読み込み時の
エラーメッセージは出なくなりました。

// ------------------------------------- test.hilight ------------------------------------------

/<TreeWord>
/0000,0002,0000,00000000,40011253,"&#128105;&#127995;&#8205;&#128102;&#127996;|&#128104;&#127997;&#8205;&#128102;&#127998;&#8205;&#128102;&#127999;|&#128105;&#127996;&#8205;&#128104;&#127997;&#8205;&#128102;&#127996;&#8205;&#128103;&#127997;|&#128105;&#127995;&#8205;&#128105;&#127999;&#8205;&#128103;&#127996;&#8205;&#128103;&#127998;|&#128104;&#127995;&#8205;&#128104;&#127996;&#8205;&#128103;&#127995;&#8205;&#128103;&#127997;|&#128104;&#127997;&#8205;&#128105;&#127999;&#8205;&#128102;&#127995;&#8205;&#128103;&#127997;|&#128104;&#127999;&#8205;&#128105;&#127998;&#8205;&#128103;&#127999;&#8205;&#128103;|&#128104;&#8205;&#128104;&#127999;&#8205;&#128103;&#8205;&#128102;&#127995;|&#128105;&#127998;&#8205;&#128105;&#8205;&#128102;&#127998;|&#128104;&#8205;&#128104;&#8205;&#128103;&#8205;&#128102;&#127997;",""
/<TreeWordEx>
/TreeWordExData:0

// ------------------------------------- test.hilight ------------------------------------------

しかし、読み込まれた項目の内容が、以下のようにおかしくなってしまいました。
 ・内容     : &#128105;&#127995;&#8205;&#128102;&#127996;|&#128104;&#127997;&#8205;&#128102;&#127998;&#8205;&#128102;&#127999;|&#128105;&#127996;&#8205;&#128104;&#127997;&#8205;&#128102;&#127996;&#8205;&#128103;&#127997;|&#128105;&#127995;&#8205;&#128105;&#127999;&#8205;&#128103;&#127996;&#8205;&#128103;&#127998;|
 ・グループ : スリ鞋シリ゚頃スリ鞋シリ・頃スリ釛シリ゚頃スリ釛シリ&#63729;゚|スリ鞋シリ&#63729;゚頃スリ鰤シリ&#63731;゚頃スリ贖シリ゚頃スリ釛シリ&#63729;゚|スリ鞋シリ&#63731;゚頃スリ鰤シリ&#63730;゚頃スリ釛シリ&#63731;゚頃スリ釛|スリ鞋頃スリ鞋シリ&#63731;゚

文字列の内容が途中で途切れ、空欄にしたはずのグループに文字化けのような文字列が入り込んでいます。


[ ]
RE:42425 アウトラインのツリー定義の読み込みでエラーが起きるNo.42429
秀丸担当 さん 25/12/29 16:37 [ コメントを投稿する ]
  バグ情報ありがとうございます。
確かにおかしかったです。
何らかの対策を検討します。
[ ]
RE:42429 アウトラインのツリー定義の読み込みでエラーが起きるNo.42439
Fzok4234 さん 26/01/10 10:21 [ コメントを投稿する ]
  とりあえず、9.52β8 にアップデートして動作検証をしてみました。


読み込む .hilight ファイルを、

// --------------------------------------------- test.hilight ----------------------------------
/<TreeWord>
/0000,0002,0000,00000000,40011253,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",""
/<TreeWordEx>
/TreeWordExData:0
// --------------------------------------------- test.hilight ----------------------------------

というようにして「内容」のフィールドを極端に多い文字数にしても、これがバッファーオーバーフローして
「グループ」のフィールドまで流れ込む現象は起きなくなりました。


しかし、ヘルプには「内容」のフィールドは
 ・ASCII     : 1 文字
 ・Shift-JIS : 2 文字
 ・Unicode   : 4 文字
に換算して合計で 250 文字まで指定できる、という趣旨のことが書かれているが、実際に動作検証したところ、
これとは大きく異なる結果となりました。

まず、ASCII の「a」を 250 個並べて
/0000,0002,0000,00000000,40011253,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",""
としたところ、本文で「a」が上記より少ない 101 個並んだ
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
にヒットしてしまいました。すなわち、「内容」のフィールドで実際に指定できる ASCII の最大文字数は 101 文字
と思われます。

次に、Shift-JIS の「あ」を 125 個並べて
/0000,0002,0000,00000000,40011253,"あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ",""
としたところ、本文で「あ」が ASCII のときと同じ 101 個並んだ
あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ
にヒットしました。

次に、Unicode の「&#40960;」を 125 個並べて
/0000,0002,0000,00000000,40011253,"&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;",""
としたところ、これも ASCII や Shift-JIS と同様に「&#40960;」が 101 個並んだ
&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;&#40960;
にヒットしました。

さらに、別の Unicode の「&#128105;」を同様に 125 個並べて
/0000,0002,0000,00000000,40011253,"&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;",""
としましたが、今度は「&#40960;」のときと異なり、「&#128105;」が 101 個並んだ
&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;&#128105;
にはヒットしませんでした。

改めて、「&#128105;」を 1 個だけ指定して
/0000,0002,0000,00000000,40011253,"&#128105;",""
としましたが、
&#128105;aaaa
などの「&#128105;」から始まる行には一切ヒットしませんでした。これは完全なバグとみられます。


まとめると、「内容」フィールドに指定可能な最大文字数は
 ・ASCII の「a」      : 101 文字 ( 換算 101 文字 )
 ・Shift-JIS の「あ」 : 101 文字 ( 換算 202 文字 )
 ・Unicode の「&#40960;」   : 101 文字 ( 換算 404 文字 )
 ・Unicode の「&#128105;」   : 動作せず
となりました。


[ ]
RE:42439 アウトラインのツリー定義の読み込みでエラーが起きるNo.42442
Fzok4234 さん 26/01/14 09:05 [ コメントを投稿する ]
  > まとめると、「内容」フィールドに指定可能な最大文字数は
>  ・ASCII の「a」      : 101 文字 ( 換算 101 文字 )
>  ・Shift-JIS の「あ」 : 101 文字 ( 換算 202 文字 )
>  ・Unicode の「&#40960;」   : 101 文字 ( 換算 404 文字 )
>  ・Unicode の「&#128105;」   : 動作せず
> となりました。

そちらの環境では再現するでしょうか ?

さすがに正規表現パターンなどの ASCII 文字が 101 文字しか指定できないのはかなり不便です。なるべく
早く修正してもらえれば助かります。どうかよろしくお願いします。


[ ]
RE:42442 アウトラインのツリー定義の読み込みでエラーが起きるNo.42443
秀丸担当 さん 26/01/14 15:42 [ コメントを投稿する ]
  コメントは見ています。
何らかの対策をします。
[ ]
RE:42443 アウトラインのツリー定義の読み込みでエラーが起きるNo.42444
Fzok4234 さん 26/01/15 17:21 [ コメントを投稿する ]
  β9 での動作検証の結果です。

認識した最大文字数は、ASCII の「a」は 249 文字、Shift-Jis の「あ」は 124 文字、Unicode の「&#40960;」は
62 文字となっていて、概ね正常動作となっています。

ところが、Unicode の「&#128105;」は 1 文字も認識せず、β8 で入った不具合が未だ継続している状態です。


[ ]
RE:42444 アウトラインのツリー定義の読み込みでエラーが起きるNo.42447
秀丸担当 さん 26/01/16 14:16 [ コメントを投稿する ]
  ご指摘ありがとうございます。
また修正していきます。
[ ]
RE:42447 アウトラインのツリー定義の読み込みでエラーが起きるNo.42459
Fzok4234 さん 26/01/23 12:36 [ コメントを投稿する ]
  β10 での動作検証の結果です。

認識した最大文字数は、
・"a"  ( ASCII )     : 249 文字 ( 換算 : 1 * 249 = 249 文字 )
・"あ" ( Shift-JIS ) : 124 文字 ( 換算 : 2 * 124 = 248 文字 )
・"&#40960;" ( Unicode )   : 62  文字 ( 換算 : 4 * 62  = 248 文字 )
・"&#128105;" ( Unicode )   : 31  文字 ( 換算 : 4 * 31  = 124 文字 )
となりました。

同じ Unicode のはずの「&#40960;」と「&#128105;」とで認識した換算文字数が異なっています。「&#40960;」の方は
換算 248 ≒ 250 文字で、末尾の \0 を考慮すれば正しい動作ですが、「&#128105;」の方は換算 124 文字で
本来の半分の文字数しか認識していません。

まだ不具合が継続中ということで、修正のほうよろしくお願い申し上げます。


[ ]
RE:42459 アウトラインのツリー定義の読み込みでエラーが起きるNo.42462
秀丸担当 さん 26/01/23 17:25 [ コメントを投稿する ]
  UnicodeはUTF-16として数えたときの4バイト換算になります。
ヘルプに書いたらという話になると思うのでそういうご意見があるということで参考にします。
[ ]
(発言者削除)No.42463
Fzok4234 さん 26/01/23 17:49
 
[ ]
RE:42462 アウトラインのツリー定義の読み込みでエラーが起きるNo.42465
Fzok4234 さん 26/01/25 02:54 [ コメントを投稿する ]
  > UnicodeはUTF-16として数えたときの4バイト換算になります。

つまりこれは、UTF-16 における「サロゲートペア」に該当する Unicode 文字は、換算で 8 文字を
消費することでしょうか ?

今調べてみたところ、確かに「&#128105;」の UTF-16 表記は「0xD83D 0xDC69」となっていてサロゲートペアに
該当していました。

であれば、換算で 8 * 31 = 248 文字で計算通りとなっています。

ただ、この「31 文字」というのはちょっと少な過ぎるのではないでしょうか。家族絵文字のような Unicode の
合字だとかだと、あっという間に使い切ってしまう容量です。

やはり、素直に ASCII での最大文字数を現行の 8 倍の 2000 文字に拡張して、サロゲートペアが確実に 
250 文字程度入るようにした方がよいと思われます。

恐らく、実際には
#define HEADING_DEFINITIONS_STRING_LENGTH 250
というように、プロジェクト全体で「1 箇所だけ」で定義されているはずなので、これを 2000 とかに
変更するだけで対応は完了すると思います。

どうかよろしくお願いします。


[ ]

[ 新規に投稿する ]