[EMAIL PROTECTED] writes:

> builtins/evalfile.c
> _evalfile()
> {
>   fd = open (filename, O_RDONLY);
>   fstat (fd, &finfo);
>   file_size = (size_t)finfo.st_size;
>   string = (char *)xmalloc (1 + file_size);
>   result = read (fd, string, file_size);
>   string[result] = '\0';
>       ;;;
> }
> (I checked bash-3.0 too)
>
> When the file size is very large or the filesystem is poor, the read(2)
> systemcall may not read all of the file. In this case, the return value
> will be shorter than the requested bytes.

Even worse, if read returns -1 then this writes beyond array bounds.
Also, file_size is size_t, but result is only int.

Andreas.

-- 
Andreas Schwab, SuSE Labs, [EMAIL PROTECTED]
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."


_______________________________________________
Bug-bash mailing list
Bug-bash@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-bash

Reply via email to