From 44ed935b212d67d35c937037ff649f548737e0bc Mon Sep 17 00:00:00 2001 From: Dmitry Shulga Date: Wed, 15 Jun 2011 16:18:08 +0700 Subject: [PATCH] Fixed bug#12403662 (formerly known as bug#60987): LOAD DATA LOCAL INFILE can't parse relative paths "higher" than 3 levels up When trying to LOAD DATA LOCAL INFILE using a relative path with 3 or more levels up in the directory hierarchy, mysqld wrongly parses the path and as a consequence, can't find the file. This bug was introduced by patch for bug#58205. The reason for bug is that implementaiton of function cleanup_dirname() doesn't take into account the begin of buffer being processed during handling of path to file. mysys/mf_pack.c: function cleanup_dirname() was modified: fixed wrong comparison condition when handling substring "../" at the begining of the buffer. --- mysys/mf_pack.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysys/mf_pack.c b/mysys/mf_pack.c index 292cd8c0454..790936461a4 100644 --- a/mysys/mf_pack.c +++ b/mysys/mf_pack.c @@ -193,7 +193,7 @@ size_t cleanup_dirname(register char *to, const char *from) while (pos >= start && *pos != FN_LIBCHAR) /* remove prev dir */ pos--; if (pos[1] == FN_HOMELIB || - (pos > start && memcmp(pos, parent, length) == 0)) + (pos >= start && memcmp(pos, parent, length) == 0)) { /* Don't remove ~user/ */ pos=strmov(end_parentdir+1,parent); *pos=FN_LIBCHAR;