Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-3492

LP:700982 - Non-portable code in client plugin (fails on ARM)

    XMLWordPrintable

Details

    • Bug
    • Status: Closed (View Workflow)
    • Major
    • Resolution: Fixed
    • None
    • None
    • None

    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.]

      Attachments

        Activity

          People

            serg Sergei Golubchik
            knielsen Kristian Nielsen
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.