Several years ago, I specialized in Delphi software development.

Amongst several other endeavors, I wrote and sold a Regular Expression matcher. Well, it turns out that my matcher has a significant bug that was only just noticed by a user - handling of “$” to require a match to finish at the end of the line was broken.

Yikes!

For future reference of anyone consulting with Professor Google or Doctor Bing, here’s the fix.

The code inside TniRegularExpressionMatcher.MatchExpression is missing a check for mfFinishOnly.

Inside the repeat loop:

if oState.Accept then begin
  MatchFound(...);
  Result := true;
  if not bContinue then
    break;
end;

This code needs to check for mfFinishOnly as follows:

if oState.Accept then begin
  if not (mfFinishOnly in FxFlags)
     or (iScan=Length(aString)) then
  begin
    MatchFound(...);
    Result := true;
    if not bContinue then
      break;
  end;
end;

In english: If mfFinishOnly is not specified, any match is acceptable; if we’re at the end of the string, the match is always acceptable.

Comments

blog comments powered by Disqus
Next Post
On Priorities  17 Dec 2009
Prior Post
Sequence diagrams in Visual Studio 2010  23 Nov 2009
Related Posts
Browsers and WSL  31 Mar 2024
Factory methods and functions  05 Mar 2023
Using Constructors  27 Feb 2023
An Inconvenient API  18 Feb 2023
Method Archetypes  11 Sep 2022
A bash puzzle, solved  02 Jul 2022
A bash puzzle  25 Jun 2022
Improve your troubleshooting by aggregating errors  11 Jun 2022
Improve your troubleshooting by wrapping errors  28 May 2022
Keep your promises  14 May 2022
Archives
December 2009
2009