Commit 689a3238 authored by thek@kpdesk.mysql.com's avatar thek@kpdesk.mysql.com

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.
parent 2c356ec7
...@@ -313,7 +313,11 @@ my_bool reinit_io_cache(IO_CACHE *info, enum cache_type type, ...@@ -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, ...@@ -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)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment