mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug#23010 _my_b_read() passing illegal file handles to my_seek()
- The io cache flag seek_not_done was not set properly in the reinit_io_cache function call and this led my_seek to be called desipite an invalid file handle. - Added a test in reinit_io_cache to ensure we have a valid file handle before setting seek_not_done flag. mysys/mf_iocache.c: Added a test to only trigger my_seek function calls if we have a valid file descriptor. mysys/my_seek.c: Refactored incomplete condition into an assertion. This also ensures that variable newpos is initialized properly.
This commit is contained in:
@ -313,7 +313,11 @@ my_bool reinit_io_cache(IO_CACHE *info, enum cache_type type,
|
|||||||
if (info->type == READ_CACHE)
|
if (info->type == READ_CACHE)
|
||||||
{
|
{
|
||||||
info->write_end=info->write_buffer+info->buffer_length;
|
info->write_end=info->write_buffer+info->buffer_length;
|
||||||
info->seek_not_done=1;
|
/*
|
||||||
|
Trigger a new seek only if we have a valid
|
||||||
|
file handle.
|
||||||
|
*/
|
||||||
|
info->seek_not_done= (info->file >= 0);
|
||||||
}
|
}
|
||||||
info->end_of_file = ~(my_off_t) 0;
|
info->end_of_file = ~(my_off_t) 0;
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,11 @@ my_off_t my_seek(File fd, my_off_t pos, int whence,
|
|||||||
whence, MyFlags));
|
whence, MyFlags));
|
||||||
DBUG_ASSERT(pos != MY_FILEPOS_ERROR); /* safety check */
|
DBUG_ASSERT(pos != MY_FILEPOS_ERROR); /* safety check */
|
||||||
|
|
||||||
|
/*
|
||||||
|
Make sure we are using a valid file descriptor
|
||||||
|
*/
|
||||||
|
DBUG_ASSERT(fd >= 0);
|
||||||
|
|
||||||
newpos=lseek(fd, pos, whence);
|
newpos=lseek(fd, pos, whence);
|
||||||
if (newpos == (os_off_t) -1)
|
if (newpos == (os_off_t) -1)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user