[fpc-devel] Questions on TStringList.Find change (Mantis 28744)

David Jenkins david at scootersoftware.com
Mon Mar 21 20:33:33 CET 2016


I just ran across the change that checks Sorted at beginning of find and 
exits if Sorted = False.  This has caused some problems for us

a)  We have lists that are sorted manually and we'd like to continue 
keeping them sorted manually (and be able to call .insert()).  This 
means not setting the sorted flag.  But without setting 'sorted' we can 
no longer use find.  We are sharing code between VCL and FPC - delphi 
compatibility has been broken.

b) The change, in my opinion, hasn't solved the unpredictable response 
problem.  There is still nothing to indicate to a caller that they have 
called the function inappropriately i.e. they do not know why find has 
returned false.

Furthermore the documentation also indicates that if false is returned 
then 'Index' will contain the position where the string should be 
inserted.  Index used to at least be within the range of FCount or 0.  
Now the value 'Index' is even more indeterminte as the code exits before 
Index has been set to anything.  It has gone from possibly placing a 
string at a wrong location to possibly causing a crash with index out of 
range.

It could be argued whether this is worse but it certainly doesn't seem 
to have made the situation any better for people blindly misusing Find 
an unsorted list - while at the same time breaking Delphi compatibility 
and the option to manually keep lists sorted.

Thoughts?

David Jenkins
david at scootersoftware.com




More information about the fpc-devel mailing list