----- Original Message ----- From: "ik" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Friday, August 31, 2007 11:01 AM
Subject: Re: [lazarus] Critical BUG in TBits class!


Hi Please see my code inline

On 8/31/07, 12 12 <[EMAIL PROTECTED]> wrote:
I tried to include sophisticated unit with math operations into my
project.
The unit worked fine in Delphi.
But in Lazarus it get error when call TBits.SetSize(0):
"Invalid bit index -1".
I go to implementation of method TBits.SetSize and see this:

"procedure TBits.setSize(value : longint);
begin

     if (Value > 0) then
       grow(value - 1)
    else  ....

This is your attempt at a bug fix. (next time mention it cause it looked kinda confusing)

However you didn't supply the full bug fix.

What if he wants to set the size to zero to reduce the memory to zero.

That should be possible !

end;"

The method tries to set negative value of size!

Who can help?


Please always check that you are able to do the operation without
arriving to overflow (for example).
A question is, why Value is longint and not a Cardinal, is there a
reason for negative size ?!

Suppose it was a longword.

0 - 1 wraps back to 4 billion.

That would have allocated 4 billion bits.

In this case he was probably lucky that did not happen and instead got index -1 error ;)

Also the -1 seems a logical coding mistake. (I am not sure what grow does)

If grow is simply a SetLength method that it is incorrect.

Size := 1; // means 1 bit. So at least 1 "thing" must be allocated.

Value(1)-1=0; // nothing would be allocated ?

Weird code.

Sloppy too ?

Bye,
Skybuck.
_________________________________________________________________
    To unsubscribe: mail [EMAIL PROTECTED] with
               "unsubscribe" as the Subject
  archives at http://www.lazarus.freepascal.org/mailarchives

Reply via email to