From cea5cf757b0d119b29fb6eac028402504f8bebad Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Sat, 19 Mar 2016 00:05:35 +0100 Subject: [PATCH] fix, AV in string ranges --- src/ce_messages.lfm | 2 +- src/ce_messages.pas | 9 +++++++-- src/ce_stringrange.pas | 5 +++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/ce_messages.lfm b/src/ce_messages.lfm index b5f12780..ea27dc6e 100644 --- a/src/ce_messages.lfm +++ b/src/ce_messages.lfm @@ -24,7 +24,7 @@ inherited CEMessagesWidget: TCEMessagesWidget Width = 759 Align = alClient BorderSpacing.Around = 2 - DefaultItemHeight = 18 + DefaultItemHeight = 16 Font.Height = -12 Font.Name = 'Courier New' Font.Quality = fqProof diff --git a/src/ce_messages.pas b/src/ce_messages.pas index c8042993..89c7915f 100644 --- a/src/ce_messages.pas +++ b/src/ce_messages.pas @@ -1002,6 +1002,8 @@ begin rng.init(aMessg); while true do begin + if rng.empty then + break; idt := rng.popUntil(alp)^.takeWhile(alp).yield; if idt = '' then exit; @@ -1017,11 +1019,14 @@ var lne: string; col: string = ''; begin + Result := Point(-1,-1); + if aMessage.isEmpty then + exit; rng.init(aMessage); - rng.popUntil(['('])^.popWhile(['(']); + rng.popUntil('(')^.popWhile('('); lne := rng.takeUntil([',', ':', ')']).yield; if rng.front in [',', ':'] then - col := rng.popWhile([',', ':'])^.takeUntil([')']).yield; + col := rng.popWhile([',', ':'])^.takeUntil(')').yield; result.y := strToIntDef(lne, -1); result.x := strToIntDef(col, -1); end; diff --git a/src/ce_stringrange.pas b/src/ce_stringrange.pas index 6c3ca0a8..772db505 100644 --- a/src/ce_stringrange.pas +++ b/src/ce_stringrange.pas @@ -97,6 +97,11 @@ end; function TStringRange.init(const str: string): PStringRange; begin + ptr := nil; + pos := 0; + len := 0; + if str = '' then + exit; ptr := @str[1]; pos := 0; len := length(str);