diff options
author | unknown <eric@mysql.com> | 2005-11-17 06:05:09 -0800 |
---|---|---|
committer | unknown <eric@mysql.com> | 2005-11-17 06:05:09 -0800 |
commit | 1e2d3c9b97fe901266c9eb0c0b8241c221090c36 (patch) | |
tree | cf318156358b3d639417fb09d47c148aa4fe659f /sql/ha_federated.cc | |
parent | 3b7c799fbffe79f2aa081f9249a45e1d501860ca (diff) | |
download | mariadb-git-1e2d3c9b97fe901266c9eb0c0b8241c221090c36.tar.gz |
fix potential security hole, pointed out by Sergei. Also simplify code per Sergei's suggestion.
sql/ha_federated.cc:
if the mysql_error(mysql) contained any %-format specifiers, my_snprintf would try to interppret them. Essentially replacing printf(str) with printf("%s", str);
sql/ha_federated.h:
removed unused remote_error_len variable
Diffstat (limited to 'sql/ha_federated.cc')
-rw-r--r-- | sql/ha_federated.cc | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/sql/ha_federated.cc b/sql/ha_federated.cc index 00516bef5a3..015ad185a24 100644 --- a/sql/ha_federated.cc +++ b/sql/ha_federated.cc @@ -2616,10 +2616,8 @@ int ha_federated::stash_remote_error() DBUG_ENTER("ha_federated::stash_remote_error()"); remote_error_number= mysql_errno(mysql); const char *remote_error= mysql_error(mysql); - remote_error_len= strlen(remote_error); - if(remote_error_len > (sizeof(remote_error_buf) - 1)) - remote_error_len= (sizeof(remote_error_buf) - 1); - my_snprintf(remote_error_buf, remote_error_len + 1, remote_error); + my_snprintf(remote_error_buf, sizeof(remote_error_buf), "%s", + mysql_error(mysql)); DBUG_RETURN(HA_FEDERATED_ERROR_WITH_REMOTE_SYSTEM); } @@ -2633,11 +2631,10 @@ bool ha_federated::get_error_message(int error, String* buf) buf->append("Error on remote system: "); buf->qs_append(remote_error_number); buf->append(": "); - buf->append(remote_error_buf, remote_error_len); + buf->append(remote_error_buf); remote_error_number= 0; remote_error_buf[0]= '\0'; - remote_error_len= 0; } DBUG_PRINT("exit", ("message: %s", buf->ptr())); DBUG_RETURN(FALSE); |