[Lazarus] Lazarus Bug: No exception raised when attempting to access an array outside of range.

Graham Ward graham at evroysystems.com
Mon May 1 01:53:55 CEST 2017


Hi,

Apologies if this email has been sent to the wrong location (I'm a brand 
new user to the Lazarus emailing list).

I recently had a software/compilation bug whereby no exception was 
raised when my code was accessing an array outside of its range. Took 
some detective work, as it was resulting in corruption at runtime with 
completely unrelated code. This was caused by a bug in my own software 
that tried to access index 72 for an array of range [0..71]. What was 
more interesting was that if I expanded the array to 72 (or 73,74,75 for 
that matter) and then tried to access range+1 (IE index 73 for the array 
with an index of [0..72] this appeared to cause no ill effect to my 
program once more, so I was extremely "lucky" to have such an obvious 
bug appear in my code. Something more subtle would have been a lot more 
difficult to locate.

The offending code is as follows:

  setlength(isMerged, ParityCol);     // fixed length for array keeping 
track of merged cells.
  setlength(ColIndex, ParityCol);     // Define the length of the Column 
Index
  For J := 0 to ParityCol do
    Begin
      isMerged[J] := False; //This line was leading to the program 
becoming unresponsive in another totally unrelated part of code 
(AssignFile...) in another procedure
      ColIndex[J] := 1000; // This line, although also accessing outside 
of the legal range, did not appear to cause any problems!!!
    end;

Note I even tried the following line, which is obviously wrong (as the 
array has a maximum index of 71)

    ColIndex[175] := 500;

In other languages (that I am more familiar with) an exception (Error : 
Array index outside of range) would have been raised. Why does the 
Lazarus compiler not raise a similar error?

I am using:

Code Typhon Version 6.0
FPC Version 3.1.1
SVN Revision : 54036


Assuming this is an actual bug in the compiler, then I hope this 
information proves useful. If not, then please advise me accordingly, 
thanks.

Aside from this, let me say a very big thank you to you guys for all 
your hard work in what is a very useful piece of software for me (FPC). 
Your efforts are greatly appreciated.

Kind Regards,
Graham
New Zealand


More information about the Lazarus mailing list