diff options
author | unknown <ram@gw.mysql.r18.ru> | 2004-08-12 09:41:35 +0500 |
---|---|---|
committer | unknown <ram@gw.mysql.r18.ru> | 2004-08-12 09:41:35 +0500 |
commit | bb10ca26ec92adc7caaafe63468ba56bb48a53a6 (patch) | |
tree | 8ee40dcb6c0352ac02f260f2178159d53366163d | |
parent | 3603196b19b0e7a22077d3af86690c72f403454f (diff) | |
download | mariadb-git-bb10ca26ec92adc7caaafe63468ba56bb48a53a6.tar.gz |
A fix (Bug#4898: User privileges depending on ORDER BY Settings of table db)
-rw-r--r-- | sql/sql_acl.cc | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 4af6f407b57..58d0fe9a7fa 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -460,22 +460,30 @@ static ulong get_sort(uint count,...) va_start(args,count); ulong sort=0; + /* Should not use this function with more than 4 arguments for compare. */ + DBUG_ASSERT(count <= 4); + while (count--) { - char *str=va_arg(args,char*); - uint chars=0,wild=0; + char *start, *str= va_arg(args,char*); + uint chars= 0; + uint wild_pos= 0; /* first wildcard position */ - if (str) + if (start= str) { for (; *str ; str++) { if (*str == wild_many || *str == wild_one || *str == wild_prefix) - wild++; + { + wild_pos= str - start + 1; + break; + } else chars++; } } - sort= (sort << 8) + (wild ? 1 : chars ? 2 : 0); + sort= (sort << 8) + (wild_pos ? (wild_pos > 127 ? 127 : wild_pos) : + (chars ? 128 : 0)); } va_end(args); return sort; |