summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorMurthy Narkedimilli <murthy.narkedimilli@oracle.com>2014-07-08 11:13:37 +0200
committerMurthy Narkedimilli <murthy.narkedimilli@oracle.com>2014-07-08 11:13:37 +0200
commita7163ce964029fcf379f2512799ac0218e1b263e (patch)
tree2ded564874389426bdf692bab23824429a356f9f /client
parentd3625112b150544f555e253a474f81e7eec377b0 (diff)
downloadmariadb-git-a7163ce964029fcf379f2512799ac0218e1b263e.tar.gz
Applying patch for bug 18779944
Diffstat (limited to 'client')
-rw-r--r--client/mysqldump.c39
1 files changed, 28 insertions, 11 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c
index c19b0b1822a..2a873903d60 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -5538,19 +5538,36 @@ int main(int argc, char **argv)
dump_all_tablespaces();
dump_all_databases();
}
- else if (argc > 1 && !opt_databases)
- {
- /* Only one database and selected table(s) */
- if (!opt_alltspcs && !opt_notspcs)
- dump_tablespaces_for_tables(*argv, (argv + 1), (argc -1));
- dump_selected_tables(*argv, (argv + 1), (argc - 1));
- }
else
{
- /* One or more databases, all tables */
- if (!opt_alltspcs && !opt_notspcs)
- dump_tablespaces_for_databases(argv);
- dump_databases(argv);
+ // Check all arguments meet length condition. Currently database and table
+ // names are limited to NAME_LEN bytes and stack-based buffers assumes
+ // that escaped name will be not longer than NAME_LEN*2 + 2 bytes long.
+ int argument;
+ for (argument= 0; argument < argc; argument++)
+ {
+ size_t argument_length= strlen(argv[argument]);
+ if (argument_length > NAME_LEN)
+ {
+ die(EX_CONSCHECK, "[ERROR] Argument '%s' is too long, it cannot be "
+ "name for any table or database.\n", argv[argument]);
+ }
+ }
+
+ if (argc > 1 && !opt_databases)
+ {
+ /* Only one database and selected table(s) */
+ if (!opt_alltspcs && !opt_notspcs)
+ dump_tablespaces_for_tables(*argv, (argv + 1), (argc - 1));
+ dump_selected_tables(*argv, (argv + 1), (argc - 1));
+ }
+ else
+ {
+ /* One or more databases, all tables */
+ if (!opt_alltspcs && !opt_notspcs)
+ dump_tablespaces_for_databases(argv);
+ dump_databases(argv);
+ }
}
/* if --dump-slave , start the slave sql thread */