From: Sergey Glukhov Date: June 19 2009 8:24am Subject: bzr commit into mysql-5.1-bugteam branch (Sergey.Glukhov:2961) Bug#44834 List-Archive: http://lists.mysql.com/commits/76648 X-Bug: 44834 Message-Id: <0KLH00GLLBHIA660@fe-emea-09.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary_(ID_1EN/tK/+Ynv5uLiELP+jhw)" --Boundary_(ID_1EN/tK/+Ynv5uLiELP+jhw) MIME-version: 1.0 Content-type: text/plain; CHARSET=US-ASCII Content-transfer-encoding: 7BIT Content-disposition: inline #At file:///home/gluh/MySQL/mysql-5.1-bugteam/ based on revid:davi.arnaut@stripped 2961 Sergey Glukhov 2009-06-19 Bug#44834 strxnmov is expected to behave as you'd expect The problem: described in the bug report. The fix: --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used @ client/mysql.cc --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used as argument for strxnmov function @ sql/ha_ndbcluster.cc --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used as argument for strxnmov function @ sql/ha_ndbcluster_binlog.cc --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used as argument for strxnmov function @ sql/handler.cc --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used as argument for strxnmov function @ sql/log.cc --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used as argument for strxnmov function @ sql/mysqld.cc removed unnecessary line @ sql/parse_file.cc --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used as argument for strxnmov function @ sql/sql_acl.cc --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used as argument for strxnmov function @ sql/sql_base.cc --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used as argument for strxnmov function @ sql/sql_db.cc --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used as argument for strxnmov function @ sql/sql_delete.cc --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used as argument for strxnmov function @ sql/sql_partition.cc --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used as argument for strxnmov function @ sql/sql_rename.cc --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used as argument for strxnmov function @ sql/sql_show.cc --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used as argument for strxnmov function @ sql/sql_table.cc --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used as argument for strxnmov function @ sql/sql_view.cc --increase buffers where it's necessary (buffers which are used in stxnmov) --decrease buffer lengths which are used as argument for strxnmov function modified: client/mysql.cc sql/ha_ndbcluster.cc sql/ha_ndbcluster_binlog.cc sql/handler.cc sql/log.cc sql/mysqld.cc sql/parse_file.cc sql/sql_acl.cc sql/sql_base.cc sql/sql_db.cc sql/sql_delete.cc sql/sql_partition.cc sql/sql_rename.cc sql/sql_show.cc sql/sql_table.cc sql/sql_view.cc === modified file 'client/mysql.cc' --- a/client/mysql.cc 2009-06-17 12:38:19 +0000 +++ b/client/mysql.cc 2009-06-19 08:24:43 +0000 @@ -2732,7 +2732,7 @@ static int com_server_help(String *buffe { MYSQL_ROW cur; const char *server_cmd= buffer->ptr(); - char cmd_buf[100]; + char cmd_buf[100 + 1]; MYSQL_RES *result; int error; === modified file 'sql/ha_ndbcluster.cc' --- a/sql/ha_ndbcluster.cc 2009-05-15 12:57:51 +0000 +++ b/sql/ha_ndbcluster.cc 2009-06-19 08:24:43 +0000 @@ -1247,7 +1247,7 @@ int ha_ndbcluster::add_index_handle(THD } if (idx_type == UNIQUE_ORDERED_INDEX || idx_type == UNIQUE_INDEX) { - char unique_index_name[FN_LEN]; + char unique_index_name[FN_LEN + 1]; static const char* unique_suffix= "$unique"; m_has_unique_index= TRUE; strxnmov(unique_index_name, FN_LEN, index_name, unique_suffix, NullS); @@ -5150,7 +5150,7 @@ int ha_ndbcluster::create(const char *na uchar *data= NULL, *pack_data= NULL; bool create_from_engine= (create_info->table_options & HA_OPTION_CREATE_FROM_ENGINE); bool is_truncate= (thd->lex->sql_command == SQLCOM_TRUNCATE); - char tablespace[FN_LEN]; + char tablespace[FN_LEN + 1]; NdbDictionary::Table::SingleUserMode single_user_mode= NdbDictionary::Table::SingleUserModeLocked; DBUG_ENTER("ha_ndbcluster::create"); @@ -5613,7 +5613,7 @@ int ha_ndbcluster::create_index(const ch NDB_INDEX_TYPE idx_type, uint idx_no) { int error= 0; - char unique_name[FN_LEN]; + char unique_name[FN_LEN + 1]; static const char* unique_suffix= "$unique"; DBUG_ENTER("ha_ndbcluster::create_ordered_index"); DBUG_PRINT("info", ("Creating index %u: %s", idx_no, name)); @@ -6661,7 +6661,7 @@ int ndbcluster_discover(handlerton *hton size_t len; uchar* data= NULL; Ndb* ndb; - char key[FN_REFLEN]; + char key[FN_REFLEN + 1]; DBUG_ENTER("ndbcluster_discover"); DBUG_PRINT("enter", ("db: %s, name: %s", db, name)); @@ -6672,7 +6672,7 @@ int ndbcluster_discover(handlerton *hton ERR_RETURN(ndb->getNdbError()); } NDBDICT* dict= ndb->getDictionary(); - build_table_filename(key, sizeof(key), db, name, "", 0); + build_table_filename(key, sizeof(key) - 1, db, name, "", 0); /* ndb_share reference temporary */ NDB_SHARE *share= get_share(key, 0, FALSE); if (share) @@ -6837,9 +6837,9 @@ int ndbcluster_drop_database_impl(const drop_list.push_back(thd->strdup(elmt.name)); } // Drop any tables belonging to database - char full_path[FN_REFLEN]; + char full_path[FN_REFLEN + 1]; char *tmp= full_path + - build_table_filename(full_path, sizeof(full_path), dbname, "", "", 0); + build_table_filename(full_path, sizeof(full_path) - 1, dbname, "", "", 0); if (ndb->setDatabaseName(dbname)) { ERR_RETURN(ndb->getNdbError()); @@ -6908,7 +6908,7 @@ int ndb_create_table_from_engine(THD *th int ndbcluster_find_all_files(THD *thd) { Ndb* ndb; - char key[FN_REFLEN]; + char key[FN_REFLEN + 1]; NDBDICT *dict; int unhandled, retries= 5, skipped; DBUG_ENTER("ndbcluster_find_all_files"); @@ -6966,7 +6966,7 @@ int ndbcluster_find_all_files(THD *thd) /* check if database exists */ char *end= key + - build_table_filename(key, sizeof(key), elmt.database, "", "", 0); + build_table_filename(key, sizeof(key) - 1, elmt.database, "", "", 0); if (my_access(key, F_OK)) { /* no such database defined, skip table */ @@ -7047,7 +7047,7 @@ int ndbcluster_find_files(handlerton *ht { // extra bracket to avoid gcc 2.95.3 warning uint i; Ndb* ndb; - char name[FN_REFLEN]; + char name[FN_REFLEN + 1]; HASH ndb_tables, ok_tables; NDBDICT::List list; @@ -7117,7 +7117,8 @@ int ndbcluster_find_files(handlerton *ht DBUG_PRINT("info", ("%s", file_name->str)); if (hash_search(&ndb_tables, (uchar*) file_name->str, file_name->length)) { - build_table_filename(name, sizeof(name), db, file_name->str, reg_ext, 0); + build_table_filename(name, sizeof(name) - 1, db, + file_name->str, reg_ext, 0); if (my_access(name, F_OK)) { pthread_mutex_lock(&LOCK_open); @@ -7139,7 +7140,8 @@ int ndbcluster_find_files(handlerton *ht } // Check for .ndb file with this name - build_table_filename(name, sizeof(name), db, file_name->str, ha_ndb_ext, 0); + build_table_filename(name, sizeof(name) - 1, db, + file_name->str, ha_ndb_ext, 0); DBUG_PRINT("info", ("Check access for %s", name)); if (my_access(name, F_OK)) { @@ -7182,7 +7184,7 @@ int ndbcluster_find_files(handlerton *ht /* setup logging to binlog for all discovered tables */ { char *end, *end1= name + - build_table_filename(name, sizeof(name), db, "", "", 0); + build_table_filename(name, sizeof(name) - 1, db, "", "", 0); for (i= 0; i < ok_tables.records; i++) { file_name_str= (char*)hash_element(&ok_tables, i); @@ -7204,7 +7206,8 @@ int ndbcluster_find_files(handlerton *ht file_name_str= (char*) hash_element(&ndb_tables, i); if (!hash_search(&ok_tables, (uchar*) file_name_str, strlen(file_name_str))) { - build_table_filename(name, sizeof(name), db, file_name_str, reg_ext, 0); + build_table_filename(name, sizeof(name) - 1, + db, file_name_str, reg_ext, 0); if (my_access(name, F_OK)) { DBUG_PRINT("info", ("%s must be discovered", file_name_str)); @@ -7584,7 +7587,7 @@ void ndbcluster_print_error(int error, c void ha_ndbcluster::set_dbname(const char *path_name, char *dbname) { char *end, *ptr, *tmp_name; - char tmp_buff[FN_REFLEN]; + char tmp_buff[FN_REFLEN + 1]; tmp_name= tmp_buff; /* Scan name from the end */ @@ -7610,7 +7613,7 @@ void ha_ndbcluster::set_dbname(const cha ptr++; } #endif - filename_to_tablename(tmp_name, dbname, FN_REFLEN); + filename_to_tablename(tmp_name, dbname, sizeof(tmp_buff) - 1); } /** @@ -7630,7 +7633,7 @@ void ha_ndbcluster::set_tabname(const char *path_name, char * tabname) { char *end, *ptr, *tmp_name; - char tmp_buff[FN_REFLEN]; + char tmp_buff[FN_REFLEN + 1]; tmp_name= tmp_buff; /* Scan name from the end */ @@ -7651,7 +7654,7 @@ ha_ndbcluster::set_tabname(const char *p ptr++; } #endif - filename_to_tablename(tmp_name, tabname, FN_REFLEN); + filename_to_tablename(tmp_name, tabname, sizeof(tmp_buff) - 1); } /** @@ -7837,11 +7840,12 @@ uint8 ha_ndbcluster::table_cache_type() uint ndb_get_commitcount(THD *thd, char *dbname, char *tabname, Uint64 *commit_count) { - char name[FN_REFLEN]; + char name[FN_REFLEN + 1]; NDB_SHARE *share; DBUG_ENTER("ndb_get_commitcount"); - build_table_filename(name, sizeof(name), dbname, tabname, "", 0); + build_table_filename(name, sizeof(name) - 1, + dbname, tabname, "", 0); DBUG_PRINT("enter", ("name: %s", name)); pthread_mutex_lock(&ndbcluster_mutex); if (!(share=(NDB_SHARE*) hash_search(&ndbcluster_open_tables, @@ -9945,7 +9949,7 @@ bool ha_ndbcluster::check_if_incompatibl ai=1; } - char tablespace_name[FN_LEN]; + char tablespace_name[FN_LEN + 1]; if (get_tablespace_name(current_thd, tablespace_name, FN_LEN)) { if (create_info->tablespace) === modified file 'sql/ha_ndbcluster_binlog.cc' --- a/sql/ha_ndbcluster_binlog.cc 2009-05-30 13:32:28 +0000 +++ b/sql/ha_ndbcluster_binlog.cc 2009-06-19 08:24:43 +0000 @@ -788,7 +788,7 @@ static int ndbcluster_create_ndb_apply_s if (g_ndb_cluster_connection->get_no_ready() <= 0) DBUG_RETURN(0); - char buf[1024], *end; + char buf[1024 + 1], *end; if (ndb_extra_logging) sql_print_information("NDB: Creating " NDB_REP_DB "." NDB_APPLY_TABLE); @@ -798,7 +798,7 @@ static int ndbcluster_create_ndb_apply_s if so, remove it since there is none in Ndb */ { - build_table_filename(buf, sizeof(buf), + build_table_filename(buf, sizeof(buf) - 1, NDB_REP_DB, NDB_APPLY_TABLE, reg_ext, 0); my_delete(buf, MYF(0)); } @@ -846,7 +846,7 @@ static int ndbcluster_create_schema_tabl if (g_ndb_cluster_connection->get_no_ready() <= 0) DBUG_RETURN(0); - char buf[1024], *end; + char buf[1024 + 1], *end; if (ndb_extra_logging) sql_print_information("NDB: Creating " NDB_REP_DB "." NDB_SCHEMA_TABLE); @@ -856,7 +856,7 @@ static int ndbcluster_create_schema_tabl if so, remove it since there is none in Ndb */ { - build_table_filename(buf, sizeof(buf), + build_table_filename(buf, sizeof(buf) - 1, NDB_REP_DB, NDB_SCHEMA_TABLE, reg_ext, 0); my_delete(buf, MYF(0)); } @@ -1321,8 +1321,8 @@ int ndbcluster_log_schema_op(THD *thd, N NDB_SCHEMA_OBJECT *ndb_schema_object; { - char key[FN_REFLEN]; - build_table_filename(key, sizeof(key), db, table_name, "", 0); + char key[FN_REFLEN + 1]; + build_table_filename(key, sizeof(key) - 1, db, table_name, "", 0); ndb_schema_object= ndb_get_schema_object(key, TRUE, FALSE); } @@ -1674,7 +1674,7 @@ ndb_handle_schema_change(THD *thd, Ndb * if (is_remote_change && is_online_alter_table) { const char *tabname= table_share->table_name.str; - char key[FN_REFLEN]; + char key[FN_REFLEN + 1]; uchar *data= 0, *pack_data= 0; size_t length, pack_length; int error; @@ -1683,7 +1683,7 @@ ndb_handle_schema_change(THD *thd, Ndb * DBUG_PRINT("info", ("Detected frm change of table %s.%s", dbname, tabname)); - build_table_filename(key, FN_LEN-1, dbname, tabname, NullS, 0); + build_table_filename(key, FN_LEN - 1, dbname, tabname, NullS, 0); /* If the there is no local table shadowing the altered table and it has an frm that is different than the one on disk then @@ -1926,8 +1926,8 @@ ndb_binlog_thread_handle_schema_event(TH break; case SOT_TRUNCATE_TABLE: { - char key[FN_REFLEN]; - build_table_filename(key, sizeof(key), + char key[FN_REFLEN + 1]; + build_table_filename(key, sizeof(key) - 1, schema->db, schema->name, "", 0); /* ndb_share reference temporary, free below */ NDB_SHARE *share= get_share(key, 0, FALSE, FALSE); @@ -2173,8 +2173,8 @@ ndb_binlog_thread_handle_schema_event_po int log_query= 0; { enum SCHEMA_OP_TYPE schema_type= (enum SCHEMA_OP_TYPE)schema->type; - char key[FN_REFLEN]; - build_table_filename(key, sizeof(key), schema->db, schema->name, "", 0); + char key[FN_REFLEN + 1]; + build_table_filename(key, sizeof(key) - 1, schema->db, schema->name, "", 0); if (schema_type == SOT_CLEAR_SLOCK) { pthread_mutex_lock(&ndbcluster_mutex); @@ -2508,8 +2508,8 @@ ndb_rep_event_name(String *event_name,co bool ndbcluster_check_if_local_table(const char *dbname, const char *tabname) { - char key[FN_REFLEN]; - char ndb_file[FN_REFLEN]; + char key[FN_REFLEN + 1]; + char ndb_file[FN_REFLEN + 1]; DBUG_ENTER("ndbcluster_check_if_local_table"); build_table_filename(key, FN_LEN-1, dbname, tabname, reg_ext, 0); @@ -2534,9 +2534,9 @@ ndbcluster_check_if_local_tables_in_db(T DBUG_PRINT("info", ("Looking for files in directory %s", dbname)); LEX_STRING *tabname; List files; - char path[FN_REFLEN]; + char path[FN_REFLEN + 1]; - build_table_filename(path, sizeof(path), dbname, "", "", 0); + build_table_filename(path, sizeof(path) - 1, dbname, "", "", 0); if (find_files(thd, &files, dbname, path, NullS, 0) != FIND_FILES_OK) { DBUG_PRINT("info", ("Failed to find files")); === modified file 'sql/handler.cc' --- a/sql/handler.cc 2009-06-09 16:44:26 +0000 +++ b/sql/handler.cc 2009-06-19 08:24:43 +0000 @@ -3582,7 +3582,7 @@ int ha_create_table_from_engine(THD* thd int error; uchar *frmblob; size_t frmlen; - char path[FN_REFLEN]; + char path[FN_REFLEN + 1]; HA_CREATE_INFO create_info; TABLE table; TABLE_SHARE share; @@ -3601,7 +3601,7 @@ int ha_create_table_from_engine(THD* thd frmblob and frmlen are set, write the frm to disk */ - build_table_filename(path, FN_REFLEN-1, db, name, "", 0); + build_table_filename(path, sizeof(path) - 1, db, name, "", 0); // Save the frm file error= writefrm(path, frmblob, frmlen); my_free(frmblob, MYF(0)); @@ -4778,7 +4778,7 @@ fl_log_iterator_buffer_init(struct handl if ((ptr= (uchar*)my_malloc(ALIGN_SIZE(sizeof(fl_buff)) + ((ALIGN_SIZE(sizeof(LEX_STRING)) + sizeof(enum log_status) + - + FN_REFLEN) * + + FN_REFLEN + 1) * (uint) dirp->number_off_files), MYF(0))) == 0) { @@ -4806,7 +4806,7 @@ fl_log_iterator_buffer_init(struct handl name_ptr= strxnmov(buff->names[buff->entries].str= name_ptr, FN_REFLEN, fl_dir, file->name, NullS); buff->names[buff->entries].length= (name_ptr - - buff->names[buff->entries].str) - 1; + buff->names[buff->entries].str); buff->statuses[buff->entries]= st; buff->entries++; } === modified file 'sql/log.cc' --- a/sql/log.cc 2009-06-18 13:52:46 +0000 +++ b/sql/log.cc 2009-06-19 08:24:43 +0000 @@ -956,7 +956,7 @@ bool LOGGER::slow_log_print(THD *thd, co bool error= FALSE; Log_event_handler **current_handler; bool is_command= FALSE; - char user_host_buff[MAX_USER_HOST_SIZE]; + char user_host_buff[MAX_USER_HOST_SIZE + 1]; Security_context *sctx= thd->security_ctx; uint user_host_len= 0; ulonglong query_utime, lock_utime; @@ -1022,7 +1022,7 @@ bool LOGGER::general_log_write(THD *thd, { bool error= FALSE; Log_event_handler **current_handler= general_log_handler_list; - char user_host_buff[MAX_USER_HOST_SIZE]; + char user_host_buff[MAX_USER_HOST_SIZE + 1]; Security_context *sctx= thd->security_ctx; ulong id; uint user_host_len= 0; === modified file 'sql/mysqld.cc' --- a/sql/mysqld.cc 2009-06-08 22:05:24 +0000 +++ b/sql/mysqld.cc 2009-06-19 08:24:43 +0000 @@ -1664,7 +1664,6 @@ static void network_init(void) opt_enable_named_pipe) { - pipe_name[sizeof(pipe_name)-1]= 0; /* Safety if too long string */ strxnmov(pipe_name, sizeof(pipe_name)-1, "\\\\.\\pipe\\", mysqld_unix_port, NullS); bzero((char*) &saPipeSecurity, sizeof(saPipeSecurity)); === modified file 'sql/parse_file.cc' --- a/sql/parse_file.cc 2009-05-15 12:57:51 +0000 +++ b/sql/parse_file.cc 2009-06-19 08:24:43 +0000 @@ -231,7 +231,7 @@ sql_create_definition_file(const LEX_STR including dir name, file name itself, and an extension, and with unpack_filename() executed over it. */ - path_end= strxnmov(path, FN_REFLEN, file_name->str, NullS) - path; + path_end= strxnmov(path, sizeof(path) - 1, file_name->str, NullS) - path; } // temporary file name @@ -314,7 +314,7 @@ my_bool rename_in_schema_file(THD *thd, const char *schema, const char *old_name, const char *new_db, const char *new_name) { - char old_path[FN_REFLEN], new_path[FN_REFLEN], arc_path[FN_REFLEN]; + char old_path[FN_REFLEN + 1], new_path[FN_REFLEN + 1], arc_path[FN_REFLEN + 1]; build_table_filename(old_path, sizeof(old_path) - 1, schema, old_name, reg_ext, 0); === modified file 'sql/sql_acl.cc' --- a/sql/sql_acl.cc 2009-06-17 14:56:44 +0000 +++ b/sql/sql_acl.cc 2009-06-19 08:24:43 +0000 @@ -2995,8 +2995,8 @@ int mysql_table_grant(THD *thd, TABLE_LI { if (!(rights & CREATE_ACL)) { - char buf[FN_REFLEN]; - build_table_filename(buf, sizeof(buf), table_list->db, + char buf[FN_REFLEN + 1]; + build_table_filename(buf, sizeof(buf) - 1, table_list->db, table_list->table_name, reg_ext, 0); fn_format(buf, buf, "", "", MY_UNPACK_FILENAME | MY_RESOLVE_SYMLINKS | MY_RETURN_REAL_PATH | MY_APPEND_EXT); === modified file 'sql/sql_base.cc' --- a/sql/sql_base.cc 2009-06-17 14:56:44 +0000 +++ b/sql/sql_base.cc 2009-06-19 08:24:43 +0000 @@ -2432,7 +2432,7 @@ bool lock_table_name_if_not_cached(THD * bool check_if_table_exists(THD *thd, TABLE_LIST *table, bool *exists) { - char path[FN_REFLEN]; + char path[FN_REFLEN + 1]; int rc; DBUG_ENTER("check_if_table_exists"); @@ -2649,7 +2649,7 @@ TABLE *open_table(THD *thd, TABLE_LIST * real fix will be made after definition cache will be made) */ { - char path[FN_REFLEN]; + char path[FN_REFLEN + 1]; enum legacy_db_type not_used; build_table_filename(path, sizeof(path) - 1, table_list->db, table_list->table_name, reg_ext, 0); @@ -6340,7 +6340,7 @@ find_field_in_tables(THD *thd, Item_iden (report_error == REPORT_ALL_ERRORS || report_error == REPORT_EXCEPT_NON_UNIQUE)) { - char buff[NAME_LEN*2+1]; + char buff[NAME_LEN*2 + 2]; if (db && db[0]) { strxnmov(buff,sizeof(buff)-1,db,".",table_name,NullS); === modified file 'sql/sql_db.cc' --- a/sql/sql_db.cc 2009-05-30 13:32:28 +0000 +++ b/sql/sql_db.cc 2009-06-19 08:24:43 +0000 @@ -537,13 +537,13 @@ err1: bool load_db_opt_by_name(THD *thd, const char *db_name, HA_CREATE_INFO *db_create_info) { - char db_opt_path[FN_REFLEN]; + char db_opt_path[FN_REFLEN + 1]; /* Pass an empty file name, and the database options file name as extension to avoid table name to file name encoding. */ - (void) build_table_filename(db_opt_path, sizeof(db_opt_path), + (void) build_table_filename(db_opt_path, sizeof(db_opt_path) - 1, db_name, "", MY_DB_OPT_FILE, 0); return load_db_opt(thd, db_opt_path, db_create_info); @@ -645,7 +645,7 @@ int mysql_create_db(THD *thd, char *db, VOID(pthread_mutex_lock(&LOCK_mysql_create_db)); /* Check directory */ - path_len= build_table_filename(path, sizeof(path), db, "", "", 0); + path_len= build_table_filename(path, sizeof(path) - 1, db, "", "", 0); path[path_len-1]= 0; // Remove last '/' from path if (my_stat(path,&stat_info,MYF(0))) @@ -791,7 +791,7 @@ bool mysql_alter_db(THD *thd, const char We pass MY_DB_OPT_FILE as "extension" to avoid "table name to file name" encoding. */ - build_table_filename(path, sizeof(path), db, "", MY_DB_OPT_FILE, 0); + build_table_filename(path, sizeof(path) - 1, db, "", MY_DB_OPT_FILE, 0); if ((error=write_db_opt(thd, path, create_info))) goto exit; @@ -884,7 +884,7 @@ bool mysql_rm_db(THD *thd,char *db,bool VOID(pthread_mutex_lock(&LOCK_mysql_create_db)); - length= build_table_filename(path, sizeof(path), db, "", "", 0); + length= build_table_filename(path, sizeof(path) - 1, db, "", "", 0); strmov(path+length, MY_DB_OPT_FILE); // Append db option file name del_dbopt(path); // Remove dboption hash entry path[length]= '\0'; // Remove file name @@ -1841,7 +1841,7 @@ bool mysql_upgrade_db(THD *thd, LEX_STRI for (uint idx=0 ; idx < nfiles && !thd->killed ; idx++) { FILEINFO *file= dirp->dir_entry + idx; - char *extension, tname[FN_REFLEN]; + char *extension, tname[FN_REFLEN + 1]; LEX_STRING table_str; DBUG_PRINT("info",("Examining: %s", file->name)); @@ -1930,7 +1930,7 @@ bool mysql_upgrade_db(THD *thd, LEX_STRI for (uint idx=0 ; idx < nfiles ; idx++) { FILEINFO *file= dirp->dir_entry + idx; - char oldname[FN_REFLEN], newname[FN_REFLEN]; + char oldname[FN_REFLEN + 1], newname[FN_REFLEN + 1]; DBUG_PRINT("info",("Examining: %s", file->name)); /* skiping . and .. and MY_DB_OPT_FILE */ @@ -2000,10 +2000,10 @@ exit: bool check_db_dir_existence(const char *db_name) { - char db_dir_path[FN_REFLEN]; + char db_dir_path[FN_REFLEN + 1]; uint db_dir_path_len; - db_dir_path_len= build_table_filename(db_dir_path, sizeof(db_dir_path), + db_dir_path_len= build_table_filename(db_dir_path, sizeof(db_dir_path) - 1, db_name, "", "", 0); if (db_dir_path_len && db_dir_path[db_dir_path_len - 1] == FN_LIBCHAR) === modified file 'sql/sql_delete.cc' --- a/sql/sql_delete.cc 2009-06-18 14:16:14 +0000 +++ b/sql/sql_delete.cc 2009-06-19 08:24:43 +0000 @@ -1051,7 +1051,7 @@ static bool mysql_truncate_by_delete(THD bool mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok) { HA_CREATE_INFO create_info; - char path[FN_REFLEN]; + char path[FN_REFLEN + 1]; TABLE *table; bool error; uint path_length; @@ -1088,7 +1088,7 @@ bool mysql_truncate(THD *thd, TABLE_LIST goto end; } - path_length= build_table_filename(path, sizeof(path), table_list->db, + path_length= build_table_filename(path, sizeof(path) - 1, table_list->db, table_list->table_name, reg_ext, 0); if (!dont_send_ok) === modified file 'sql/sql_partition.cc' --- a/sql/sql_partition.cc 2009-04-01 05:34:59 +0000 +++ b/sql/sql_partition.cc 2009-06-19 08:24:43 +0000 @@ -5090,7 +5090,7 @@ static bool mysql_change_partitions(ALTE handler *file= lpt->table->file; DBUG_ENTER("mysql_change_partitions"); - build_table_filename(path, sizeof(path), lpt->db, lpt->table_name, "", 0); + build_table_filename(path, sizeof(path) - 1, lpt->db, lpt->table_name, "", 0); if ((error= file->ha_change_partitions(lpt->create_info, path, &lpt->copied, &lpt->deleted, lpt->pack_frm_data, lpt->pack_frm_len))) @@ -5130,7 +5130,7 @@ static bool mysql_rename_partitions(ALTE int error; DBUG_ENTER("mysql_rename_partitions"); - build_table_filename(path, sizeof(path), lpt->db, lpt->table_name, "", 0); + build_table_filename(path, sizeof(path) - 1, lpt->db, lpt->table_name, "", 0); if ((error= lpt->table->file->ha_rename_partitions(path))) { if (error != 1) @@ -5171,7 +5171,7 @@ static bool mysql_drop_partitions(ALTER_ int error; DBUG_ENTER("mysql_drop_partitions"); - build_table_filename(path, sizeof(path), lpt->db, lpt->table_name, "", 0); + build_table_filename(path, sizeof(path) - 1, lpt->db, lpt->table_name, "", 0); if ((error= lpt->table->file->ha_drop_partitions(path))) { lpt->table->file->print_error(error, MYF(0)); @@ -5516,10 +5516,10 @@ static bool write_log_drop_shadow_frm(AL partition_info *part_info= lpt->part_info; DDL_LOG_MEMORY_ENTRY *log_entry; DDL_LOG_MEMORY_ENTRY *exec_log_entry= NULL; - char shadow_path[FN_REFLEN]; + char shadow_path[FN_REFLEN + 1]; DBUG_ENTER("write_log_drop_shadow_frm"); - build_table_shadow_filename(shadow_path, sizeof(shadow_path), lpt); + build_table_shadow_filename(shadow_path, sizeof(shadow_path) - 1, lpt); pthread_mutex_lock(&LOCK_gdl); if (write_log_replace_delete_frm(lpt, 0UL, NULL, (const char*)shadow_path, FALSE)) @@ -5559,15 +5559,15 @@ static bool write_log_rename_frm(ALTER_P partition_info *part_info= lpt->part_info; DDL_LOG_MEMORY_ENTRY *log_entry; DDL_LOG_MEMORY_ENTRY *exec_log_entry= part_info->exec_log_entry; - char path[FN_REFLEN]; - char shadow_path[FN_REFLEN]; + char path[FN_REFLEN + 1]; + char shadow_path[FN_REFLEN + 1]; DDL_LOG_MEMORY_ENTRY *old_first_log_entry= part_info->first_log_entry; DBUG_ENTER("write_log_rename_frm"); part_info->first_log_entry= NULL; - build_table_filename(path, sizeof(path), lpt->db, + build_table_filename(path, sizeof(path) - 1, lpt->db, lpt->table_name, "", 0); - build_table_shadow_filename(shadow_path, sizeof(shadow_path), lpt); + build_table_shadow_filename(shadow_path, sizeof(shadow_path) - 1, lpt); pthread_mutex_lock(&LOCK_gdl); if (write_log_replace_delete_frm(lpt, 0UL, shadow_path, path, TRUE)) goto error; @@ -5610,16 +5610,16 @@ static bool write_log_drop_partition(ALT partition_info *part_info= lpt->part_info; DDL_LOG_MEMORY_ENTRY *log_entry; DDL_LOG_MEMORY_ENTRY *exec_log_entry= part_info->exec_log_entry; - char tmp_path[FN_REFLEN]; - char path[FN_REFLEN]; + char tmp_path[FN_REFLEN + 1]; + char path[FN_REFLEN + 1]; uint next_entry= 0; DDL_LOG_MEMORY_ENTRY *old_first_log_entry= part_info->first_log_entry; DBUG_ENTER("write_log_drop_partition"); part_info->first_log_entry= NULL; - build_table_filename(path, sizeof(path), lpt->db, + build_table_filename(path, sizeof(path) - 1, lpt->db, lpt->table_name, "", 0); - build_table_filename(tmp_path, sizeof(tmp_path), lpt->db, + build_table_filename(tmp_path, sizeof(tmp_path) - 1, lpt->db, lpt->table_name, "#", 0); pthread_mutex_lock(&LOCK_gdl); if (write_log_dropped_partitions(lpt, &next_entry, (const char*)path, @@ -5669,14 +5669,14 @@ static bool write_log_add_change_partiti partition_info *part_info= lpt->part_info; DDL_LOG_MEMORY_ENTRY *log_entry; DDL_LOG_MEMORY_ENTRY *exec_log_entry= NULL; - char tmp_path[FN_REFLEN]; - char path[FN_REFLEN]; + char tmp_path[FN_REFLEN + 1]; + char path[FN_REFLEN + 1]; uint next_entry= 0; DBUG_ENTER("write_log_add_change_partition"); - build_table_filename(path, sizeof(path), lpt->db, + build_table_filename(path, sizeof(path) - 1, lpt->db, lpt->table_name, "", 0); - build_table_filename(tmp_path, sizeof(tmp_path), lpt->db, + build_table_filename(tmp_path, sizeof(tmp_path) - 1, lpt->db, lpt->table_name, "#", 0); pthread_mutex_lock(&LOCK_gdl); if (write_log_dropped_partitions(lpt, &next_entry, (const char*)path, @@ -5723,16 +5723,16 @@ static bool write_log_final_change_parti partition_info *part_info= lpt->part_info; DDL_LOG_MEMORY_ENTRY *log_entry; DDL_LOG_MEMORY_ENTRY *exec_log_entry= part_info->exec_log_entry; - char path[FN_REFLEN]; - char shadow_path[FN_REFLEN]; + char path[FN_REFLEN + 1]; + char shadow_path[FN_REFLEN + 1]; DDL_LOG_MEMORY_ENTRY *old_first_log_entry= part_info->first_log_entry; uint next_entry= 0; DBUG_ENTER("write_log_final_change_partition"); part_info->first_log_entry= NULL; - build_table_filename(path, sizeof(path), lpt->db, + build_table_filename(path, sizeof(path) - 1, lpt->db, lpt->table_name, "", 0); - build_table_shadow_filename(shadow_path, sizeof(shadow_path), lpt); + build_table_shadow_filename(shadow_path, sizeof(shadow_path) - 1, lpt); pthread_mutex_lock(&LOCK_gdl); if (write_log_dropped_partitions(lpt, &next_entry, (const char*)path, lpt->alter_info->flags & ALTER_REORGANIZE_PARTITION)) === modified file 'sql/sql_rename.cc' --- a/sql/sql_rename.cc 2009-05-19 04:25:36 +0000 +++ b/sql/sql_rename.cc 2009-06-19 08:24:43 +0000 @@ -244,7 +244,7 @@ do_rename(THD *thd, TABLE_LIST *ren_tabl char *new_table_alias, bool skip_error) { int rc= 1; - char name[FN_REFLEN]; + char name[FN_REFLEN + 1]; const char *new_alias, *old_alias; frm_type_enum frm_type; enum legacy_db_type table_type; @@ -263,14 +263,14 @@ do_rename(THD *thd, TABLE_LIST *ren_tabl } DBUG_ASSERT(new_alias); - build_table_filename(name, sizeof(name), + build_table_filename(name, sizeof(name) - 1, new_db, new_alias, reg_ext, 0); if (!access(name,F_OK)) { my_error(ER_TABLE_EXISTS_ERROR, MYF(0), new_alias); DBUG_RETURN(1); // This can't be skipped } - build_table_filename(name, sizeof(name), + build_table_filename(name, sizeof(name) - 1, ren_table->db, old_alias, reg_ext, 0); frm_type= mysql_frm_type(thd, name, &table_type); === modified file 'sql/sql_show.cc' --- a/sql/sql_show.cc 2009-06-17 14:56:44 +0000 +++ b/sql/sql_show.cc 2009-06-19 08:24:43 +0000 @@ -2819,8 +2819,8 @@ make_table_name_list(THD *thd, Liststr, "", "", 0); + char path[FN_REFLEN + 1]; + build_table_filename(path, sizeof(path) - 1, db_name->str, "", "", 0); if (!lookup_field_vals->wild_table_value && lookup_field_vals->table_value.str) { @@ -2982,8 +2982,8 @@ static int fill_schema_table_names(THD * else { enum legacy_db_type not_used; - char path[FN_REFLEN]; - (void) build_table_filename(path, sizeof(path), db_name->str, + char path[FN_REFLEN + 1]; + (void) build_table_filename(path, sizeof(path) - 1, db_name->str, table_name->str, reg_ext, 0); switch (mysql_frm_type(thd, path, ¬_used)) { case FRMTYPE_ERROR: @@ -3470,7 +3470,7 @@ int fill_schema_schemata(THD *thd, TABLE MY_STAT stat_info; if (!lookup_field_vals.db_value.str[0]) DBUG_RETURN(0); - path_len= build_table_filename(path, sizeof(path), + path_len= build_table_filename(path, sizeof(path) - 1, lookup_field_vals.db_value.str, "", "", 0); path[path_len-1]= 0; if (!my_stat(path,&stat_info,MYF(0))) === modified file 'sql/sql_table.cc' --- a/sql/sql_table.cc 2009-06-17 14:56:44 +0000 +++ b/sql/sql_table.cc 2009-06-19 08:24:43 +0000 @@ -1515,7 +1515,7 @@ bool mysql_write_frm(ALTER_PARTITION_PAR /* Build shadow frm file name */ - build_table_shadow_filename(shadow_path, sizeof(shadow_path), lpt); + build_table_shadow_filename(shadow_path, sizeof(shadow_path) - 1, lpt); strxmov(shadow_frm_name, shadow_path, reg_ext, NullS); if (flags & WFRM_WRITE_SHADOW) { @@ -1590,7 +1590,7 @@ bool mysql_write_frm(ALTER_PARTITION_PAR /* Build frm file name */ - build_table_filename(path, sizeof(path), lpt->db, + build_table_filename(path, sizeof(path) - 1, lpt->db, lpt->table_name, "", 0); strxmov(frm_name, path, reg_ext, NullS); /* @@ -1792,7 +1792,7 @@ int mysql_rm_table_part2(THD *thd, TABLE bool dont_log_query) { TABLE_LIST *table; - char path[FN_REFLEN], *alias; + char path[FN_REFLEN + 1], *alias; uint path_length; String wrong_tables; int error= 0; @@ -1922,7 +1922,8 @@ int mysql_rm_table_part2(THD *thd, TABLE } alias= (lower_case_table_names == 2) ? table->alias : table->table_name; /* remove .frm file and engine files */ - path_length= build_table_filename(path, sizeof(path), db, alias, reg_ext, + path_length= build_table_filename(path, sizeof(path) - 1, db, alias, + reg_ext, table->internal_tmp_table ? FN_IS_TMP : 0); } @@ -2078,11 +2079,11 @@ err_with_placeholders: bool quick_rm_table(handlerton *base,const char *db, const char *table_name, uint flags) { - char path[FN_REFLEN]; + char path[FN_REFLEN + 1]; bool error= 0; DBUG_ENTER("quick_rm_table"); - uint path_length= build_table_filename(path, sizeof(path), + uint path_length= build_table_filename(path, sizeof(path) - 1, db, table_name, reg_ext, flags); if (my_delete(path,MYF(0))) error= 1; /* purecov: inspected */ @@ -3471,7 +3472,7 @@ bool mysql_create_table_no_lock(THD *thd bool internal_tmp_table, uint select_field_count) { - char path[FN_REFLEN]; + char path[FN_REFLEN + 1]; uint path_length; const char *alias; uint db_options, key_count; @@ -3679,7 +3680,7 @@ bool mysql_create_table_no_lock(THD *thd } else { - path_length= build_table_filename(path, sizeof(path), db, alias, reg_ext, + path_length= build_table_filename(path, sizeof(path) - 1, db, alias, reg_ext, internal_tmp_table ? FN_IS_TMP : 0); } @@ -3993,7 +3994,8 @@ mysql_rename_table(handlerton *base, con const char *new_name, uint flags) { THD *thd= current_thd; - char from[FN_REFLEN], to[FN_REFLEN], lc_from[FN_REFLEN], lc_to[FN_REFLEN]; + char from[FN_REFLEN + 1], to[FN_REFLEN + 1], + lc_from[FN_REFLEN + 1], lc_to[FN_REFLEN + 1]; char *from_base= from, *to_base= to; char tmp_name[NAME_LEN+1]; handler *file; @@ -4005,9 +4007,9 @@ mysql_rename_table(handlerton *base, con file= (base == NULL ? 0 : get_new_handler((TABLE_SHARE*) 0, thd->mem_root, base)); - build_table_filename(from, sizeof(from), old_db, old_name, "", + build_table_filename(from, sizeof(from) - 1, old_db, old_name, "", flags & FN_FROM_IS_TMP); - build_table_filename(to, sizeof(to), new_db, new_name, "", + build_table_filename(to, sizeof(to) - 1, new_db, new_name, "", flags & FN_TO_IS_TMP); /* @@ -4020,13 +4022,13 @@ mysql_rename_table(handlerton *base, con { strmov(tmp_name, old_name); my_casedn_str(files_charset_info, tmp_name); - build_table_filename(lc_from, sizeof(lc_from), old_db, tmp_name, "", + build_table_filename(lc_from, sizeof(lc_from) - 1, old_db, tmp_name, "", flags & FN_FROM_IS_TMP); from_base= lc_from; strmov(tmp_name, new_name); my_casedn_str(files_charset_info, tmp_name); - build_table_filename(lc_to, sizeof(lc_to), new_db, tmp_name, "", + build_table_filename(lc_to, sizeof(lc_to) - 1, new_db, tmp_name, "", flags & FN_TO_IS_TMP); to_base= lc_to; } @@ -4157,16 +4159,16 @@ static int prepare_for_restore(THD* thd, else { char* backup_dir= thd->lex->backup_dir; - char src_path[FN_REFLEN], dst_path[FN_REFLEN], uname[FN_REFLEN]; + char src_path[FN_REFLEN], dst_path[FN_REFLEN + 1], uname[FN_REFLEN]; char* table_name= table->table_name; char* db= table->db; - VOID(tablename_to_filename(table->table_name, uname, sizeof(uname))); + VOID(tablename_to_filename(table->table_name, uname, sizeof(uname) - 1)); if (fn_format_relative_to_data_home(src_path, uname, backup_dir, reg_ext)) DBUG_RETURN(-1); // protect buffer overflow - build_table_filename(dst_path, sizeof(dst_path), + build_table_filename(dst_path, sizeof(dst_path) - 1, db, table_name, reg_ext, 0); if (lock_and_wait_for_table_name(thd,table)) @@ -5088,7 +5090,7 @@ bool mysql_create_like_table(THD* thd, T HA_CREATE_INFO *create_info) { TABLE *name_lock= 0; - char src_path[FN_REFLEN], dst_path[FN_REFLEN]; + char src_path[FN_REFLEN], dst_path[FN_REFLEN + 1]; uint dst_path_length; char *db= table->db; char *table_name= table->table_name; @@ -5098,7 +5100,7 @@ bool mysql_create_like_table(THD* thd, T #ifdef WITH_PARTITION_STORAGE_ENGINE char tmp_path[FN_REFLEN]; #endif - char ts_name[FN_LEN]; + char ts_name[FN_LEN + 1]; DBUG_ENTER("mysql_create_like_table"); @@ -5147,7 +5149,7 @@ bool mysql_create_like_table(THD* thd, T goto err; if (!name_lock) goto table_exists; - dst_path_length= build_table_filename(dst_path, sizeof(dst_path), + dst_path_length= build_table_filename(dst_path, sizeof(dst_path) - 1, db, table_name, reg_ext, 0); if (!access(dst_path, F_OK)) goto table_exists; @@ -5888,7 +5890,7 @@ mysql_prepare_alter_table(THD *thd, TABL if (!create_info->tablespace && create_info->storage_media != HA_SM_MEMORY) { - char *tablespace= static_cast(thd->alloc(FN_LEN)); + char *tablespace= static_cast(thd->alloc(FN_LEN + 1)); /* Regular alter table of disk stored table (no tablespace/storage change) Copy tablespace name @@ -6255,10 +6257,10 @@ bool mysql_alter_table(THD *thd,char *ne { TABLE *table, *new_table= 0, *name_lock= 0; int error= 0; - char tmp_name[80],old_name[32],new_name_buff[FN_REFLEN]; + char tmp_name[80],old_name[32],new_name_buff[FN_REFLEN + 1]; char new_alias_buff[FN_REFLEN], *table_name, *db, *new_alias, *alias; char index_file[FN_REFLEN], data_file[FN_REFLEN]; - char path[FN_REFLEN]; + char path[FN_REFLEN + 1]; char reg_path[FN_REFLEN+1]; ha_rows copied,deleted; handlerton *old_db_type, *new_db_type, *save_old_db_type; @@ -6333,8 +6335,8 @@ bool mysql_alter_table(THD *thd,char *ne db=table_list->db; if (!new_db || !my_strcasecmp(table_alias_charset, new_db, db)) new_db= db; - build_table_filename(reg_path, sizeof(reg_path), db, table_name, reg_ext, 0); - build_table_filename(path, sizeof(path), db, table_name, "", 0); + build_table_filename(reg_path, sizeof(reg_path) - 1, db, table_name, reg_ext, 0); + build_table_filename(path, sizeof(path) - 1, db, table_name, "", 0); mysql_ha_rm_tables(thd, table_list, FALSE); @@ -6481,7 +6483,7 @@ view_err: DBUG_RETURN(TRUE); } - build_table_filename(new_name_buff, sizeof(new_name_buff), + build_table_filename(new_name_buff, sizeof(new_name_buff) - 1, new_db, new_name_buff, reg_ext, 0); if (!access(new_name_buff, F_OK)) { @@ -6982,9 +6984,9 @@ view_err: } else { - char path[FN_REFLEN]; + char path[FN_REFLEN + 1]; /* table is a normal table: Create temporary table in same directory */ - build_table_filename(path, sizeof(path), new_db, tmp_name, "", + build_table_filename(path, sizeof(path) - 1, new_db, tmp_name, "", FN_IS_TMP); /* Open our intermediate table */ new_table=open_temporary_table(thd, path, new_db, tmp_name,0); @@ -7312,7 +7314,7 @@ view_err: */ char path[FN_REFLEN]; TABLE *t_table; - build_table_filename(path, sizeof(path), new_db, table_name, "", 0); + build_table_filename(path + 1, sizeof(path) - 1, new_db, table_name, "", 0); t_table= open_temporary_table(thd, path, new_db, tmp_name, 0); if (t_table) { === modified file 'sql/sql_view.cc' --- a/sql/sql_view.cc 2009-06-17 14:56:44 +0000 +++ b/sql/sql_view.cc 2009-06-19 08:24:43 +0000 @@ -801,7 +801,7 @@ static int mysql_register_view(THD *thd, char md5[MD5_BUFF_LENGTH]; bool can_be_merged; - char dir_buff[FN_REFLEN], path_buff[FN_REFLEN]; + char dir_buff[FN_REFLEN + 1], path_buff[FN_REFLEN + 1]; LEX_STRING dir, file, path; int error= 0; DBUG_ENTER("mysql_register_view"); @@ -878,11 +878,11 @@ static int mysql_register_view(THD *thd, } loop_out: /* print file name */ - dir.length= build_table_filename(dir_buff, sizeof(dir_buff), + dir.length= build_table_filename(dir_buff, sizeof(dir_buff) - 1, view->db, "", "", 0); dir.str= dir_buff; - path.length= build_table_filename(path_buff, sizeof(path_buff), + path.length= build_table_filename(path_buff, sizeof(path_buff) - 1, view->db, view->table_name, reg_ext, 0); path.str= path_buff; @@ -1569,7 +1569,7 @@ err: bool mysql_drop_view(THD *thd, TABLE_LIST *views, enum_drop_mode drop_mode) { - char path[FN_REFLEN]; + char path[FN_REFLEN + 1]; TABLE_LIST *view; String non_existant_views; char *wrong_object_db= NULL, *wrong_object_name= NULL; @@ -1584,7 +1584,7 @@ bool mysql_drop_view(THD *thd, TABLE_LIS { TABLE_SHARE *share; frm_type_enum type= FRMTYPE_ERROR; - build_table_filename(path, sizeof(path), + build_table_filename(path, sizeof(path) - 1, view->db, view->table_name, reg_ext, 0); if (access(path, F_OK) || @@ -1929,7 +1929,7 @@ mysql_rename_view(THD *thd, { LEX_STRING pathstr; File_parser *parser; - char path_buff[FN_REFLEN]; + char path_buff[FN_REFLEN + 1]; bool error= TRUE; DBUG_ENTER("mysql_rename_view"); @@ -1942,7 +1942,7 @@ mysql_rename_view(THD *thd, is_equal(&view_type, parser->type())) { TABLE_LIST view_def; - char dir_buff[FN_REFLEN]; + char dir_buff[FN_REFLEN + 1]; LEX_STRING dir, file; /* --Boundary_(ID_1EN/tK/+Ynv5uLiELP+jhw) MIME-version: 1.0 Content-type: text/bzr-bundle; CHARSET=US-ASCII; name="bzr/sergey.glukhov@stripped" Content-transfer-encoding: 7BIT Content-disposition: inline; filename="bzr/sergey.glukhov@stripped" # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: sergey.glukhov@stripped # target_branch: file:///home/gluh/MySQL/mysql-5.1-bugteam/ # testament_sha1: f4cdb3a81424a4b41a125ae47e537b4e4d8df8e2 # timestamp: 2009-06-19 13:24:53 +0500 # source_branch: bzr+ssh://sgluhov@stripped/bzrroot\ # /server/mysql-5.1-bugteam/ # base_revision_id: davi.arnaut@stripped\ # i5ytql9whvtnao1z # # Begin bundle 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 --Boundary_(ID_1EN/tK/+Ynv5uLiELP+jhw)--