Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
cbae2943
Commit
cbae2943
authored
Nov 20, 2012
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge MariaDB 5.1->5.2.
parents
094f4cf7
47c5018f
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
58 additions
and
28 deletions
+58
-28
mysql-test/r/information_schema.result
mysql-test/r/information_schema.result
+6
-0
mysql-test/t/information_schema.test
mysql-test/t/information_schema.test
+11
-0
mysys/mf_pack.c
mysys/mf_pack.c
+7
-7
plugin/feedback/url_http.cc
plugin/feedback/url_http.cc
+6
-3
sql/log.cc
sql/log.cc
+11
-13
sql/log.h
sql/log.h
+1
-1
sql/sql_acl.cc
sql/sql_acl.cc
+16
-4
No files found.
mysql-test/r/information_schema.result
View file @
cbae2943
...
@@ -1686,4 +1686,10 @@ SELECT length(CAST(b AS CHAR)) FROM ubig;
...
@@ -1686,4 +1686,10 @@ SELECT length(CAST(b AS CHAR)) FROM ubig;
length(CAST(b AS CHAR))
length(CAST(b AS CHAR))
20
20
DROP TABLE ubig;
DROP TABLE ubig;
select 1 from information_schema.tables where table_schema=repeat('a', 2000);
1
grant usage on *.* to mysqltest_1@localhost;
select 1 from information_schema.tables where table_schema=repeat('a', 2000);
1
drop user mysqltest_1@localhost;
End of 5.1 tests.
End of 5.1 tests.
mysql-test/t/information_schema.test
View file @
cbae2943
...
@@ -1438,6 +1438,17 @@ SELECT length(CAST(b AS CHAR)) FROM ubig;
...
@@ -1438,6 +1438,17 @@ SELECT length(CAST(b AS CHAR)) FROM ubig;
DROP
TABLE
ubig
;
DROP
TABLE
ubig
;
#
# Bug #13889741: HANDLE_FATAL_SIGNAL IN _DB_ENTER_ | HANDLE_FATAL_SIGNAL IN STRNLEN
#
select
1
from
information_schema
.
tables
where
table_schema
=
repeat
(
'a'
,
2000
);
grant
usage
on
*.*
to
mysqltest_1
@
localhost
;
connect
(
con1
,
localhost
,
mysqltest_1
,,);
connection
con1
;
select
1
from
information_schema
.
tables
where
table_schema
=
repeat
(
'a'
,
2000
);
connection
default
;
disconnect
con1
;
drop
user
mysqltest_1
@
localhost
;
--
echo
End
of
5.1
tests
.
--
echo
End
of
5.1
tests
.
...
...
mysys/mf_pack.c
View file @
cbae2943
...
@@ -35,7 +35,7 @@ void pack_dirname(char * to, const char *from)
...
@@ -35,7 +35,7 @@ void pack_dirname(char * to, const char *from)
int
cwd_err
;
int
cwd_err
;
size_t
d_length
,
length
,
UNINIT_VAR
(
buff_length
);
size_t
d_length
,
length
,
UNINIT_VAR
(
buff_length
);
char
*
start
;
char
*
start
;
char
buff
[
FN_REFLEN
];
char
buff
[
FN_REFLEN
+
1
];
DBUG_ENTER
(
"pack_dirname"
);
DBUG_ENTER
(
"pack_dirname"
);
(
void
)
intern_filename
(
to
,
from
);
/* Change to intern name */
(
void
)
intern_filename
(
to
,
from
);
/* Change to intern name */
...
@@ -132,7 +132,7 @@ size_t cleanup_dirname(register char *to, const char *from)
...
@@ -132,7 +132,7 @@ size_t cleanup_dirname(register char *to, const char *from)
reg3
char
*
from_ptr
;
reg3
char
*
from_ptr
;
reg4
char
*
start
;
reg4
char
*
start
;
char
parent
[
5
],
/* for "FN_PARENTDIR" */
char
parent
[
5
],
/* for "FN_PARENTDIR" */
buff
[
FN_REFLEN
+
1
],
*
end_parentdir
;
buff
[
FN_REFLEN
+
1
],
*
end_parentdir
;
#ifdef BACKSLASH_MBTAIL
#ifdef BACKSLASH_MBTAIL
CHARSET_INFO
*
fs
=
fs_character_set
();
CHARSET_INFO
*
fs
=
fs_character_set
();
#endif
#endif
...
@@ -245,7 +245,7 @@ my_bool my_use_symdir=0; /* Set this if you want to use symdirs */
...
@@ -245,7 +245,7 @@ my_bool my_use_symdir=0; /* Set this if you want to use symdirs */
#ifdef USE_SYMDIR
#ifdef USE_SYMDIR
void
symdirget
(
char
*
dir
)
void
symdirget
(
char
*
dir
)
{
{
char
buff
[
FN_REFLEN
+
1
];
char
buff
[
FN_REFLEN
+
1
];
char
*
pos
=
strend
(
dir
);
char
*
pos
=
strend
(
dir
);
if
(
dir
[
0
]
&&
pos
[
-
1
]
!=
FN_DEVCHAR
&&
my_access
(
dir
,
F_OK
))
if
(
dir
[
0
]
&&
pos
[
-
1
]
!=
FN_DEVCHAR
&&
my_access
(
dir
,
F_OK
))
{
{
...
@@ -295,7 +295,7 @@ void symdirget(char *dir)
...
@@ -295,7 +295,7 @@ void symdirget(char *dir)
size_t
normalize_dirname
(
char
*
to
,
const
char
*
from
)
size_t
normalize_dirname
(
char
*
to
,
const
char
*
from
)
{
{
size_t
length
;
size_t
length
;
char
buff
[
FN_REFLEN
];
char
buff
[
FN_REFLEN
+
1
];
DBUG_ENTER
(
"normalize_dirname"
);
DBUG_ENTER
(
"normalize_dirname"
);
/*
/*
...
@@ -423,7 +423,7 @@ static char * NEAR_F expand_tilde(char * *path)
...
@@ -423,7 +423,7 @@ static char * NEAR_F expand_tilde(char * *path)
size_t
unpack_filename
(
char
*
to
,
const
char
*
from
)
size_t
unpack_filename
(
char
*
to
,
const
char
*
from
)
{
{
size_t
length
,
n_length
,
buff_length
;
size_t
length
,
n_length
,
buff_length
;
char
buff
[
FN_REFLEN
];
char
buff
[
FN_REFLEN
+
1
];
DBUG_ENTER
(
"unpack_filename"
);
DBUG_ENTER
(
"unpack_filename"
);
length
=
dirname_part
(
buff
,
from
,
&
buff_length
);
/* copy & convert dirname */
length
=
dirname_part
(
buff
,
from
,
&
buff_length
);
/* copy & convert dirname */
...
@@ -459,7 +459,7 @@ size_t system_filename(char * to, const char *from)
...
@@ -459,7 +459,7 @@ size_t system_filename(char * to, const char *from)
int
libchar_found
;
int
libchar_found
;
size_t
length
;
size_t
length
;
char
*
to_pos
,
from_pos
,
pos
;
char
*
to_pos
,
from_pos
,
pos
;
char
buff
[
FN_REFLEN
];
char
buff
[
FN_REFLEN
+
1
];
DBUG_ENTER
(
"system_filename"
);
DBUG_ENTER
(
"system_filename"
);
libchar_found
=
0
;
libchar_found
=
0
;
...
@@ -516,7 +516,7 @@ size_t system_filename(char * to, const char *from)
...
@@ -516,7 +516,7 @@ size_t system_filename(char * to, const char *from)
char
*
intern_filename
(
char
*
to
,
const
char
*
from
)
char
*
intern_filename
(
char
*
to
,
const
char
*
from
)
{
{
size_t
length
,
to_length
;
size_t
length
,
to_length
;
char
buff
[
FN_REFLEN
];
char
buff
[
FN_REFLEN
+
1
];
if
(
from
==
to
)
if
(
from
==
to
)
{
/* Dirname may destroy from */
{
/* Dirname may destroy from */
strmov
(
buff
,
from
);
strmov
(
buff
,
from
);
...
...
plugin/feedback/url_http.cc
View file @
cbae2943
...
@@ -258,18 +258,21 @@ int Url_http::send(const char* data, size_t data_length)
...
@@ -258,18 +258,21 @@ int Url_http::send(const char* data, size_t data_length)
Extract the first string between <h1>...</h1> tags
Extract the first string between <h1>...</h1> tags
and put it as a server reply into the error log.
and put it as a server reply into the error log.
*/
*/
len
=
0
;
for
(;;)
for
(;;)
{
{
size_t
i
=
vio_read
(
vio
,
(
uchar
*
)
buf
+
len
,
sizeof
(
buf
)
-
len
-
1
);
size_t
i
=
sizeof
(
buf
)
-
len
-
1
;
if
(
i
)
i
=
vio_read
(
vio
,
(
uchar
*
)
buf
+
len
,
i
);
if
((
int
)
i
<=
0
)
if
((
int
)
i
<=
0
)
break
;
break
;
len
+=
i
;
len
+=
i
;
}
}
if
(
len
&&
len
<
sizeof
(
buf
)
)
if
(
len
)
{
{
char
*
from
;
char
*
from
;
buf
[
len
+
1
]
=
0
;
// safety
buf
[
len
]
=
0
;
// safety
if
((
from
=
strstr
(
buf
,
"<h1>"
)))
if
((
from
=
strstr
(
buf
,
"<h1>"
)))
{
{
...
...
sql/log.cc
View file @
cbae2943
...
@@ -5623,8 +5623,9 @@ int TC_LOG_MMAP::open(const char *opt_name)
...
@@ -5623,8 +5623,9 @@ int TC_LOG_MMAP::open(const char *opt_name)
syncing
=
0
;
syncing
=
0
;
active
=
pages
;
active
=
pages
;
DBUG_ASSERT
(
npages
>=
2
);
pool
=
pages
+
1
;
pool
=
pages
+
1
;
pool_last
=
pages
+
npages
-
1
;
pool_last
_ptr
=
&
((
pages
+
npages
-
1
)
->
next
)
;
return
0
;
return
0
;
...
@@ -5655,8 +5656,8 @@ void TC_LOG_MMAP::get_active_from_pool()
...
@@ -5655,8 +5656,8 @@ void TC_LOG_MMAP::get_active_from_pool()
do
do
{
{
best_p
=
p
=
&
pool
;
best_p
=
p
=
&
pool
;
if
((
*
p
)
->
waiters
==
0
)
// can the first page be used ?
if
((
*
p
)
->
waiters
==
0
&&
(
*
p
)
->
free
>
0
)
// can the first page be used ?
break
;
// yes - take it.
break
;
// yes - take it.
best_free
=
0
;
// no - trying second strategy
best_free
=
0
;
// no - trying second strategy
for
(
p
=&
(
*
p
)
->
next
;
*
p
;
p
=&
(
*
p
)
->
next
)
for
(
p
=&
(
*
p
)
->
next
;
*
p
;
p
=&
(
*
p
)
->
next
)
...
@@ -5673,10 +5674,10 @@ void TC_LOG_MMAP::get_active_from_pool()
...
@@ -5673,10 +5674,10 @@ void TC_LOG_MMAP::get_active_from_pool()
safe_mutex_assert_owner
(
&
LOCK_active
);
safe_mutex_assert_owner
(
&
LOCK_active
);
active
=*
best_p
;
active
=*
best_p
;
if
((
*
best_p
)
->
next
)
// unlink the page from the pool
/* Unlink the page from the pool. */
*
best_p
=
(
*
best_p
)
->
next
;
if
(
!
(
*
best_p
)
->
next
)
else
pool_last_ptr
=
best_p
;
pool_last
=*
best_p
;
*
best_p
=
(
*
best_p
)
->
next
;
pthread_mutex_unlock
(
&
LOCK_pool
);
pthread_mutex_unlock
(
&
LOCK_pool
);
pthread_mutex_lock
(
&
active
->
lock
);
pthread_mutex_lock
(
&
active
->
lock
);
...
@@ -5783,12 +5784,9 @@ int TC_LOG_MMAP::log_xid(THD *thd, my_xid xid)
...
@@ -5783,12 +5784,9 @@ int TC_LOG_MMAP::log_xid(THD *thd, my_xid xid)
pthread_mutex_unlock
(
&
LOCK_active
);
pthread_mutex_unlock
(
&
LOCK_active
);
pthread_mutex_lock
(
&
p
->
lock
);
pthread_mutex_lock
(
&
p
->
lock
);
p
->
waiters
++
;
p
->
waiters
++
;
for
(;;
)
while
(
p
->
state
==
DIRTY
&&
syncing
)
{
{
int
not_dirty
=
p
->
state
!=
DIRTY
;
pthread_mutex_unlock
(
&
p
->
lock
);
pthread_mutex_unlock
(
&
p
->
lock
);
if
(
not_dirty
||
!
syncing
)
break
;
pthread_cond_wait
(
&
p
->
cond
,
&
LOCK_sync
);
pthread_cond_wait
(
&
p
->
cond
,
&
LOCK_sync
);
pthread_mutex_lock
(
&
p
->
lock
);
pthread_mutex_lock
(
&
p
->
lock
);
}
}
...
@@ -5840,8 +5838,8 @@ int TC_LOG_MMAP::sync()
...
@@ -5840,8 +5838,8 @@ int TC_LOG_MMAP::sync()
/* page is synced. let's move it to the pool */
/* page is synced. let's move it to the pool */
pthread_mutex_lock
(
&
LOCK_pool
);
pthread_mutex_lock
(
&
LOCK_pool
);
pool_last
->
next
=
syncing
;
(
*
pool_last_ptr
)
=
syncing
;
pool_last
=
syncing
;
pool_last
_ptr
=&
(
syncing
->
next
)
;
syncing
->
next
=
0
;
syncing
->
next
=
0
;
syncing
->
state
=
err
?
ERROR
:
POOL
;
syncing
->
state
=
err
?
ERROR
:
POOL
;
pthread_cond_signal
(
&
COND_pool
);
// in case somebody's waiting
pthread_cond_signal
(
&
COND_pool
);
// in case somebody's waiting
...
...
sql/log.h
View file @
cbae2943
...
@@ -81,7 +81,7 @@ class TC_LOG_MMAP: public TC_LOG
...
@@ -81,7 +81,7 @@ class TC_LOG_MMAP: public TC_LOG
my_off_t
file_length
;
my_off_t
file_length
;
uint
npages
,
inited
;
uint
npages
,
inited
;
uchar
*
data
;
uchar
*
data
;
struct
st_page
*
pages
,
*
syncing
,
*
active
,
*
pool
,
*
pool_last
;
struct
st_page
*
pages
,
*
syncing
,
*
active
,
*
pool
,
*
*
pool_last_ptr
;
/*
/*
note that, e.g. LOCK_active is only used to protect
note that, e.g. LOCK_active is only used to protect
'active' pointer, to protect the content of the active page
'active' pointer, to protect the content of the active page
...
...
sql/sql_acl.cc
View file @
cbae2943
...
@@ -1352,14 +1352,20 @@ ulong acl_get(const char *host, const char *ip,
...
@@ -1352,14 +1352,20 @@ ulong acl_get(const char *host, const char *ip,
acl_entry
*
entry
;
acl_entry
*
entry
;
DBUG_ENTER
(
"acl_get"
);
DBUG_ENTER
(
"acl_get"
);
VOID
(
pthread_mutex_lock
(
&
acl_cache
->
lock
));
tmp_db
=
strmov
(
strmov
(
key
,
ip
?
ip
:
""
)
+
1
,
user
)
+
1
;
end
=
strmov
((
tmp_db
=
strmov
(
strmov
(
key
,
ip
?
ip
:
""
)
+
1
,
user
)
+
1
),
db
);
end
=
strnmov
(
tmp_db
,
db
,
key
+
sizeof
(
key
)
-
tmp_db
);
if
(
end
>=
key
+
sizeof
(
key
))
// db name was truncated
DBUG_RETURN
(
0
);
// no privileges for an invalid db name
if
(
lower_case_table_names
)
if
(
lower_case_table_names
)
{
{
my_casedn_str
(
files_charset_info
,
tmp_db
);
my_casedn_str
(
files_charset_info
,
tmp_db
);
db
=
tmp_db
;
db
=
tmp_db
;
}
}
key_length
=
(
size_t
)
(
end
-
key
);
key_length
=
(
size_t
)
(
end
-
key
);
VOID
(
pthread_mutex_lock
(
&
acl_cache
->
lock
));
if
(
!
db_is_pattern
&&
(
entry
=
(
acl_entry
*
)
acl_cache
->
search
((
uchar
*
)
key
,
if
(
!
db_is_pattern
&&
(
entry
=
(
acl_entry
*
)
acl_cache
->
search
((
uchar
*
)
key
,
key_length
)))
key_length
)))
{
{
...
@@ -4364,11 +4370,17 @@ static bool check_grant_db_routine(THD *thd, const char *db, HASH *hash)
...
@@ -4364,11 +4370,17 @@ static bool check_grant_db_routine(THD *thd, const char *db, HASH *hash)
bool
check_grant_db
(
THD
*
thd
,
const
char
*
db
)
bool
check_grant_db
(
THD
*
thd
,
const
char
*
db
)
{
{
Security_context
*
sctx
=
thd
->
security_ctx
;
Security_context
*
sctx
=
thd
->
security_ctx
;
char
helping
[
SAFE_NAME_LEN
+
USERNAME_LENGTH
+
2
];
char
helping
[
SAFE_NAME_LEN
+
USERNAME_LENGTH
+
2
]
,
*
end
;
uint
len
;
uint
len
;
bool
error
=
TRUE
;
bool
error
=
TRUE
;
len
=
(
uint
)
(
strmov
(
strmov
(
helping
,
sctx
->
priv_user
)
+
1
,
db
)
-
helping
)
+
1
;
end
=
strmov
(
helping
,
sctx
->
priv_user
)
+
1
;
end
=
strnmov
(
end
,
db
,
helping
+
sizeof
(
helping
)
-
end
);
if
(
end
>=
helping
+
sizeof
(
helping
))
// db name was truncated
return
1
;
// no privileges for an invalid db name
len
=
(
uint
)
(
end
-
helping
)
+
1
;
rw_rdlock
(
&
LOCK_grant
);
rw_rdlock
(
&
LOCK_grant
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment