[fpc-devel] Read from memory stream with position before start of file

Michael Van Canneyt michael at freepascal.org
Thu Jan 1 17:26:30 CET 2009



On Thu, 1 Jan 2009, Paul Ishenin wrote:

> Michael Van Canneyt wrote:
> > > While finding the bug #12897 I found that a memory stream position could
> > > be set to before the start of the file without giving an error, and
> > > subsequent reads would appear to work (unless the position was so far
> > > off an invalid region of memory was read). I found the precise problem
> > > by patching TCustomMemoryStream to raise an exception if the position is
> > > set before the start of the file. Should an exception be raised in this
> > > circumstance, which would make finding bugs easier? Or should the
> > > position just be set to 0, which would be more consistent with the
> > > behaviour when going beyond the end of the stream?
> > >     
> >
> > I think that an exception is better. If you set the position to a
> > non-existing
> > position, there is an error in your logic anyway.
> >   
> Just tested with delphi
> 
> procedure TForm1.Button1Click(Sender: TObject);
> var
>  S: TMemoryStream;
> begin
>  S := TMemoryStream.Create;
>  S.Position := 10;
>  ShowMessage(IntToStr(S.Position));
>  S.Position := -1;
>  ShowMessage(IntToStr(S.Position));
>  S.Free;
> end;
> 
> It shows 10 and -1.
> 
> If you do an exception or silent change of position it can cause
> incompatibilities. Maybe read operation must be fixed to ignore positions out
> of the range 0..Size -1?

What does Delphi do in such a case ?

Michael.



More information about the fpc-devel mailing list