diff options
author | Andrey Hristov <andrey@php.net> | 2010-12-06 13:50:51 +0000 |
---|---|---|
committer | Andrey Hristov <andrey@php.net> | 2010-12-06 13:50:51 +0000 |
commit | e183ea0495feed73b478f211aa60398578d397b9 (patch) | |
tree | 184a242d342e44ba8815ac677a7d6bb5ec08490b /ext | |
parent | 3722811395fef76193efe805439a8a05c76d5ea7 (diff) | |
download | php-git-e183ea0495feed73b478f211aa60398578d397b9.tar.gz |
don't crash if the API is used incorrectly
Diffstat (limited to 'ext')
-rw-r--r-- | ext/mysqlnd/mysqlnd.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/ext/mysqlnd/mysqlnd.c b/ext/mysqlnd/mysqlnd.c index bb7967c093..6405de905a 100644 --- a/ext/mysqlnd/mysqlnd.c +++ b/ext/mysqlnd/mysqlnd.c @@ -1994,15 +1994,19 @@ MYSQLND_METHOD(mysqlnd_conn, change_user)(MYSQLND * const conn, } } if (ret == PASS) { + char * tmp = NULL; + /* if we get conn->user as parameter and then we first free it, then estrndup it, we will crash */ + tmp = mnd_pestrndup(user, user_len, conn->persistent); if (conn->user) { mnd_pefree(conn->user, conn->persistent); } - conn->user = mnd_pestrndup(user, user_len, conn->persistent); + conn->user = tmp; + tmp = mnd_pestrdup(passwd, conn->persistent); if (conn->passwd) { mnd_pefree(conn->passwd, conn->persistent); } - conn->passwd = mnd_pestrdup(passwd, conn->persistent); + conn->passwd = tmp; if (conn->last_message) { mnd_pefree(conn->last_message, conn->persistent); |