From cc98d26a2318bd5c3e9169a39eb90cba8db46307 Mon Sep 17 00:00:00 2001 From: "kroki/tomash@moonlight.intranet" <> Date: Sat, 29 Jul 2006 13:50:08 +0400 Subject: [PATCH] Fix after manual merge. --- mysys/my_bitmap.c | 2 +- tests/mysql_client_test.c | 44 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/mysys/my_bitmap.c b/mysys/my_bitmap.c index 3a83372b637..25ff2651e90 100644 --- a/mysys/my_bitmap.c +++ b/mysys/my_bitmap.c @@ -445,7 +445,7 @@ uint bitmap_get_first(const MY_BITMAP *map) { uchar *bitmap=map->bitmap; uint bit_found = MY_BIT_NONE; - uint bitmap_size=map->bitmap_size*8; + uint bitmap_size=map->bitmap_size; uint i; DBUG_ASSERT(map->bitmap); diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index 76a220e2454..5ee63cb8738 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -15028,6 +15028,49 @@ static void test_bug20152() } +/* + Bug#21206: memory corruption when too many cursors are opened at once + + Memory corruption happens when more than 1024 cursors are open + simultaneously. +*/ +static void test_bug21206() +{ + const size_t cursor_count= 1025; + + const char *create_table[]= + { + "DROP TABLE IF EXISTS t1", + "CREATE TABLE t1 (i INT)", + "INSERT INTO t1 VALUES (1), (2), (3)" + }; + const char *query= "SELECT * FROM t1"; + + Stmt_fetch *fetch_array= + (Stmt_fetch*) calloc(cursor_count, sizeof(Stmt_fetch)); + + Stmt_fetch *fetch; + + DBUG_ENTER("test_bug21206"); + myheader("test_bug21206"); + + fill_tables(create_table, sizeof(create_table) / sizeof(*create_table)); + + for (fetch= fetch_array; fetch < fetch_array + cursor_count; ++fetch) + { + /* Init will exit(1) in case of error */ + stmt_fetch_init(fetch, fetch - fetch_array, query); + } + + for (fetch= fetch_array; fetch < fetch_array + cursor_count; ++fetch) + stmt_fetch_close(fetch); + + free(fetch_array); + + DBUG_VOID_RETURN; +} + + /* Read and parse arguments and MySQL options from my.cnf */ @@ -15300,6 +15343,7 @@ static struct my_tests_st my_tests[]= { { "test_bug14169", test_bug14169 }, { "test_bug17667", test_bug17667 }, { "test_bug19671", test_bug19671}, + { "test_bug21206", test_bug21206}, { 0, 0 } };