Ticket #35279

閉じてない /* コメントブロックのハイライトで例外が起きる

Open Date: 2015-06-23 00:34 Last Update: 2015-07-04 09:01

Reporter:
Owner:
Type:
Status:
Closed
Component:
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
None

Details

v1.6.3 で、閉じていない /* コメントブロックがあると、以下の例外が発生します。

System.ArgumentOutOfRangeException: Invalid index was given (end:102, this.Length:101).
パラメータ名: end
   場所 Sgry.Azuki.Document.GetTextInRange(Int32& begin, Int32& end)
   場所 Sgry.Azuki.Highlighter.KeywordHighlighter.Highlight(Document doc, Int32 begin, Int32 end, CharClass klass)
   場所 Sgry.Azuki.Highlighter.KeywordHighlighter.TryHighlightEnclosure(Document doc, List`1 pairs, Int32 startIndex, Int32 endIndex)
   場所 Sgry.Azuki.Highlighter.KeywordHighlighter.Highlight(Document doc, Int32& dirtyBegin, Int32& dirtyEnd)
   場所 Sgry.Azuki.Highlighter.KeywordHighlighter.Highlight(Document doc)

確認目的で応急処置パッチも作成してみました。
よろしくお願い致します。

--- Azuki/Highlighter/KeywordHighlighter.cs	Wed Oct 10 22:52:37 2012
+++ Azuki/Highlighter/KeywordHighlighter.cs	Tue Jun 23 00:30:33 2015
@@ -576,12 +576,13 @@
 					return startIndex;
 				}
 			}
 
 			// highlight enclosed part
-			Highlight( doc, startIndex, closePos + pair.closer.Length, pair.klass );
-			return closePos + pair.closer.Length;
+            int nextPos = Math.Min( closePos + pair.closer.Length, endIndex );
+			Highlight( doc, startIndex, nextPos, pair.klass );
+            return nextPos;
 		}
 
 		/// <summary>
 		/// Highlight line comment.
 		/// </summary>

 }}}

Ticket History (3/3 Histories)

2015-06-23 00:34 Updated by: neparze
  • New Ticket "閉じてない /* コメントブロックのハイライトで例外が起きる" created
2015-06-27 13:51 Updated by: sgry
  • Component Update from (None) to Azuki
  • Resolution Update from None to Fixed
  • Status Update from Open to Closed
  • Ticket Close date is changed to 2015-06-27 13:51
  • Owner Update from (None) to sgry
Comment

ご報告ありがとうございます、再現を確認しました。

いただいたパッチをそのまま使わせていただき、先ほど1.6.4をリリースしておきました。

よろしくお願いします。

2015-07-04 09:01 Updated by: neparze
Comment

早々のリリースありがとうございました。

早速入れ換えてみたところ、手元の環境(Windows 8.1)では、行末で折り返しオプションを有効にすると、最初のテキスト内容の表示までに、1.6.3に比べて倍以上の時間がかかるようです。(5万行程度のテキストファイルで5秒ちょいが20秒ぐらいになりました。)

しかし、手元でソースからビルドした Azuki.dll を使ったり、ソースを直接プロジェクトに取り込んだ場合には、再現しないようです。(Visual Studio 2012 です)

また、1.6.3からの変更量のわりには、バイナリサイズが膨らんでいるように見えますが、こちらは何とも言えません。

もしよろしければ、一度見ていただけると大変助かります。 よろしくお願い致します。

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login