From 5ed6483f01a333212fea302d2004cf4833d6b90c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Tue, 4 Jul 2017 12:21:25 +0300 Subject: [PATCH] Fix avro CREATE TABLE message The string was assumed to be null-terminated when in reality it was not. --- server/modules/routing/avrorouter/avro_file.c | 2 +- server/modules/routing/avrorouter/avro_schema.c | 4 ++-- server/modules/routing/avrorouter/avrorouter.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/modules/routing/avrorouter/avro_file.c b/server/modules/routing/avrorouter/avro_file.c index bb2ae2849..91db36308 100644 --- a/server/modules/routing/avrorouter/avro_file.c +++ b/server/modules/routing/avrorouter/avro_file.c @@ -1040,7 +1040,7 @@ void handle_query_event(AVRO_INSTANCE *router, REP_HEADER *hdr, int *pending_tra } else { - created = table_create_alloc(sql, db); + created = table_create_alloc(sql, len, db); } if (created && !save_and_replace_table_create(router, created)) diff --git a/server/modules/routing/avrorouter/avro_schema.c b/server/modules/routing/avrorouter/avro_schema.c index c9d9239c3..c0c522369 100644 --- a/server/modules/routing/avrorouter/avro_schema.c +++ b/server/modules/routing/avrorouter/avro_schema.c @@ -694,7 +694,7 @@ TABLE_CREATE* table_create_from_schema(const char* file, const char* db, * @param db Database where this query was executed * @return New CREATE_TABLE object or NULL if an error occurred */ -TABLE_CREATE* table_create_alloc(const char* sql, const char* event_db) +TABLE_CREATE* table_create_alloc(const char* sql, int len, const char* event_db) { /** Extract the table definition so we can get the column names from it */ int stmt_len = 0; @@ -704,7 +704,7 @@ TABLE_CREATE* table_create_alloc(const char* sql, const char* event_db) char database[MYSQL_DATABASE_MAXLEN + 1]; const char *db = event_db; - MXS_INFO("Create table: %s", sql); + MXS_INFO("Create table: %.*s", len, sql); if (!get_table_name(sql, table)) { diff --git a/server/modules/routing/avrorouter/avrorouter.h b/server/modules/routing/avrorouter/avrorouter.h index ec41c50fc..0c293c328 100644 --- a/server/modules/routing/avrorouter/avrorouter.h +++ b/server/modules/routing/avrorouter/avrorouter.h @@ -301,7 +301,7 @@ extern void read_table_info(uint8_t *ptr, uint8_t post_header_len, uint64_t *tab char* dest, size_t len); extern TABLE_MAP *table_map_alloc(uint8_t *ptr, uint8_t hdr_len, TABLE_CREATE* create); extern void table_map_free(TABLE_MAP *map); -extern TABLE_CREATE* table_create_alloc(const char* sql, const char* db); +extern TABLE_CREATE* table_create_alloc(const char* sql, int len, const char* db); extern TABLE_CREATE* table_create_copy(AVRO_INSTANCE *router, const char* sql, size_t len, const char* db); extern void table_create_free(TABLE_CREATE* value); extern bool table_create_save(TABLE_CREATE *create, const char *filename);