[MDEV-3492] LP:700982 - Non-portable code in client plugin (fails on ARM) Created: 2011-01-10  Updated: 2015-02-02  Resolved: 2012-10-04

Status: Closed
Project: MariaDB Server
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Major
Reporter: Kristian Nielsen Assignee: Sergei Golubchik
Resolution: Fixed Votes: 0
Labels: Launchpad

Attachments: XML File LPexportBug700982.xml    

 Description   

The sql-common/client_plugin.c has this code:

static struct st_mysql_client_plugin *
add_plugin(MYSQL *mysql, struct st_mysql_client_plugin *plugin, void *dlhandle,
           int argc, va_list args)

{ ... }

int mysql_client_plugin_init()
{
  ...
    add_plugin(&mysql, *builtin, 0, 0, 0);

struct st_mysql_client_plugin *
mysql_client_register_plugin(MYSQL *mysql,
                             struct st_mysql_client_plugin *plugin)
{
  ...
    plugin= add_plugin(mysql, plugin, 0, 0, 0);

This passes 0 for the va_list argument. This is not correct C, there is no
guarantee that va_list is a pointer (or other type compatible with integer).
I got a report that GCC 4.5 fails on this on ARM.

An easy solution is to just declare and pass a dummy va_list instead; as argc
is zero it won't be used anyway.

[There is no code example in the source tree that actually uses the va_list arg
in the init function. The only client plugin I could find is, in
plugin/auth/dialog.c, and doesn't use the va_list argument:

static int init_dialog()
{
  ...
}

mysql_declare_client_plugin(AUTHENTICATION)
  "dialog",
  ...
  init_dialog,

This BTW seems to be putting an int () for init_dialog, where it should be
int (char *, size_t, int, va_list). This also isn't correct C, and while
perhaps unlikely to fail in practice, there is no reason not to use the
correct type for the function.]



 Comments   
Comment by Rasmus Johansson (Inactive) [ 2011-01-10 ]

Re: Non-portable code in client plugin (fails on ARM)
Here is the full error message:

/home/esmil/mysql-5.5.8/sql-common/client_plugin.c: In function ‘mysql_client_plugin_init’:
/home/esmil/mysql-5.5.8/sql-common/client_plugin.c:252:5: error: incompatible type for argument 5 of ‘add_plugin’
/home/esmil/mysql-5.5.8/sql-common/client_plugin.c:126:1: note: expected ‘va_list’ but argument is of type ‘int’
/home/esmil/mysql-5.5.8/sql-common/client_plugin.c: In function ‘mysql_client_register_plugin’:
/home/esmil/mysql-5.5.8/sql-common/client_plugin.c:310:5: error: incompatible type for argument 5 of ‘add_plugin’
/home/esmil/mysql-5.5.8/sql-common/client_plugin.c:126:1: note: expected ‘va_list’ but argument is of type ‘int’
make[2]: *** [libmysqld/CMakeFiles/sql_embedded.dir/__/sql-common/client_plugin.c.o] Error 1

Comment by Rasmus Johansson (Inactive) [ 2011-11-22 ]

Re: Non-portable code in client plugin (fails on ARM)
This bug was fixed in the package mysql-5.5 - 5.5.17-4ubuntu2

---------------
mysql-5.5 (5.5.17-4ubuntu2) precise; urgency=low

  • d/patches/70_mysql_va_list.patch: cherry pick patch from
    upstream bug tracker to fix ARM build failure. (LP: #700982)
    • Clint Byrum <clint@ubuntu.com> Tue, 22 Nov 2011 11:00:14 -0800
Comment by Rasmus Johansson (Inactive) [ 2012-06-15 ]

Launchpad bug id: 700982

Generated at Thu Feb 08 06:49:02 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.