mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
BUG#9626 valgrind warnings
- after review fixes mysql-test/r/ndb_basic.result: Test using table with long name mysql-test/t/ndb_basic.test: Test using table with long name ndb/include/transporter/TransporterDefinitions.hpp: Define constant for max section size ndb/src/ndbapi/NdbDictionaryImpl.cpp: Add check for not sending too long table name to ndb kernel
This commit is contained in:
@ -667,3 +667,9 @@ counter datavalue
|
||||
57 newval
|
||||
58 newval
|
||||
drop table t1;
|
||||
create table atablewithareallylongandirritatingname (a int);
|
||||
insert into atablewithareallylongandirritatingname values (2);
|
||||
select * from atablewithareallylongandirritatingname;
|
||||
a
|
||||
2
|
||||
drop table atablewithareallylongandirritatingname;
|
||||
|
@ -605,3 +605,12 @@ insert into t1 (datavalue) select datavalue from t1 where counter < 100;
|
||||
select * from t1 order by counter;
|
||||
|
||||
drop table t1;
|
||||
|
||||
|
||||
#
|
||||
# Test long table name
|
||||
#
|
||||
create table atablewithareallylongandirritatingname (a int);
|
||||
insert into atablewithareallylongandirritatingname values (2);
|
||||
select * from atablewithareallylongandirritatingname;
|
||||
drop table atablewithareallylongandirritatingname;
|
||||
|
@ -45,8 +45,9 @@ enum SendStatus {
|
||||
* Protocol6 Header +
|
||||
* (optional signal id) + (optional checksum) + (signal data)
|
||||
*/
|
||||
const Uint32 MAX_SECTION_SIZE= 4096;
|
||||
//const Uint32 MAX_MESSAGE_SIZE = (12+4+4+(4*25));
|
||||
const Uint32 MAX_MESSAGE_SIZE = (12+4+4+(4*25)+(3*4)+4*4096);
|
||||
const Uint32 MAX_MESSAGE_SIZE = (12+4+4+(4*25)+(3*4)+4*MAX_SECTION_SIZE);
|
||||
|
||||
/**
|
||||
* TransporterConfiguration
|
||||
|
@ -1088,6 +1088,7 @@ NdbDictInterface::getTable(int tableId, bool fullyQualifiedNames)
|
||||
Send GET_TABINFOREQ signal with the table name in the first
|
||||
long section part
|
||||
*/
|
||||
|
||||
NdbTableImpl *
|
||||
NdbDictInterface::getTable(const char * name, bool fullyQualifiedNames)
|
||||
{
|
||||
@ -1095,12 +1096,16 @@ NdbDictInterface::getTable(const char * name, bool fullyQualifiedNames)
|
||||
GetTabInfoReq* const req = CAST_PTR(GetTabInfoReq, tSignal.getDataPtrSend());
|
||||
|
||||
const Uint32 str_len= strlen(name) + 1; // NULL terminated
|
||||
const Uint32 str_len_words= (str_len + 3) / 4; // Size in words
|
||||
|
||||
/* Note! It might be a good idea to check that the length of
|
||||
table name does not exceed the max size of a long signal */
|
||||
if (str_len > MAX_SECTION_SIZE)
|
||||
{
|
||||
m_error.code= 4307;
|
||||
return 0;
|
||||
}
|
||||
|
||||
m_namebuf.clear();
|
||||
m_namebuf.grow(str_len+(4-str_len%4)); // Round up to word size
|
||||
m_namebuf.grow(str_len_words*4); // Word size aligned number of bytes
|
||||
m_namebuf.append(name, str_len);
|
||||
|
||||
req->senderRef= m_reference;
|
||||
@ -1114,7 +1119,7 @@ NdbDictInterface::getTable(const char * name, bool fullyQualifiedNames)
|
||||
|
||||
LinearSectionPtr ptr[1];
|
||||
ptr[0].p= (Uint32*)m_namebuf.get_data();
|
||||
ptr[0].sz= (str_len + 3)/ 4; // Size in words
|
||||
ptr[0].sz= str_len_words;
|
||||
|
||||
return getTable(&tSignal, ptr, 1, fullyQualifiedNames);
|
||||
}
|
||||
|
Reference in New Issue
Block a user