Bug #9568 | mysql segfaults from CTRL-R | ||
---|---|---|---|
Submitted: | 1 Apr 2005 18:00 | Modified: | 22 Apr 2005 18:51 |
Reporter: | Matthew Lord | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Command-line Clients | Severity: | S2 (Serious) |
Version: | 4.1.10a | OS: | Solaris (Solaris 8 and 9 (64 bit)) |
Assigned to: | Magnus Blåudd | CPU Architecture: | Any |
[1 Apr 2005 18:00]
Matthew Lord
[1 Apr 2005 18:01]
Matthew Lord
truss of the client process
Attachment: truss.out (application/octet-stream, text), 68.62 KiB.
[1 Apr 2005 18:46]
Timothy Smith
It might be useful to apply the patches from here: ftp://ftp.gnu.org/pub/gnu/readline/readline-4.3-patches/ Regards, Timothy
[6 Apr 2005 2:42]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/23693
[6 Apr 2005 4:18]
Jim Winstead
This doesn't happen with 5.0 after upgrading it to readline-5.0: http://lists.mysql.com/internals/23689 (Sorry, the other linked patch mentioned the wrong Bug #.)
[14 Apr 2005 15:16]
MySQL Verification Team
Problem is present in 4.1.11 too ...
[15 Apr 2005 11:05]
Magnus Blåudd
See also Bug#2596 "MySQL Client Segmentation Fault on Solaris 9"
[18 Apr 2005 16:16]
Magnus Blåudd
This occurs in function rl_message which is defined like this: >#if defined (USE_VARARGS) >int >#if defined (PREFER_STDARG) >rl_message (const char *format, ...) >#else >rl_message (va_alist) > va_dcl >#endif >{ > va_list args; >#if defined (PREFER_VARARGS) > char *format; >#endif > >#if defined (PREFER_STDARG) > va_start (args, format); >#else > va_start (args); > format = va_arg (args, char *); >#endif > >#if defined (HAVE_VSNPRINTF) > vsnprintf (msg_buf, sizeof (msg_buf) - 1, format, args); >#else > vsprintf (msg_buf, format, args); > msg_buf[sizeof(msg_buf) - 1] = '\0'; /* overflow? */ >#endif > va_end (args); > > rl_display_prompt = msg_buf; > (*rl_redisplay_function) (); > return 0; >} >#else /* !USE_VARARGS */ >int >rl_message (format, arg1, arg2) > char *format; > int arg1, arg2; >{ > sprintf (msg_buf, format, arg1, arg2); Since USE_VARARGS is not defined the last form is used and since arg1 is used to receive a 64 bit pointer only half the pointer will be "recieved" and the rest of the pointer will be seen in arg2. If the function is chanegd to something like : >rl_message (format, arg1, arg2) > char *format; > long int arg1, arg2; >{ > sprintf (msg_buf, format, arg1, arg2); then arg1 will contain a valid 64but pointer which can be passed to sprintf. But we should aim at defining USE_VARARGS.
[19 Apr 2005 11:14]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/24137
[20 Apr 2005 14:13]
Magnus Blåudd
Pushed to 4.1.12 and 5.0.5
[22 Apr 2005 18:51]
Paul DuBois
Noted in 4.1.12, 5.0.5 changelog.