mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 11:27:39 +02:00
MDEV-36341 UBSAN: FederatedX fill_server runtime error: applying non-zero offset to null pointer
UBSAN is nuanced around null pointer additions, but there is no offset on schema, its the start of the server->key.
This commit is contained in:
parent
13dd073742
commit
3995de0318
1 changed files with 11 additions and 12 deletions
|
|
@ -1489,20 +1489,20 @@ static void fill_server(MEM_ROOT *mem_root, FEDERATEDX_SERVER *server,
|
|||
sizeof(int) + 8);
|
||||
key.append(scheme);
|
||||
key.q_append('\0');
|
||||
server->hostname= (const char *) (intptr) key.length();
|
||||
size_t hostname_pos= key.length();
|
||||
key.append(hostname);
|
||||
key.q_append('\0');
|
||||
server->database= (const char *) (intptr) key.length();
|
||||
size_t database_pos= key.length();
|
||||
key.append(database);
|
||||
key.q_append('\0');
|
||||
key.q_append((uint32) share->port);
|
||||
server->socket= (const char *) (intptr) key.length();
|
||||
size_t socket_pos= key.length();
|
||||
key.append(socket);
|
||||
key.q_append('\0');
|
||||
server->username= (const char *) (intptr) key.length();
|
||||
size_t username_pos= key.length();
|
||||
key.append(username);
|
||||
key.q_append('\0');
|
||||
server->password= (const char *) (intptr) key.length();
|
||||
size_t password_pos= key.length();
|
||||
key.append(password);
|
||||
key.c_ptr_safe(); // Ensure we have end \0
|
||||
|
||||
|
|
@ -1510,13 +1510,12 @@ static void fill_server(MEM_ROOT *mem_root, FEDERATEDX_SERVER *server,
|
|||
/* Copy and add end \0 */
|
||||
server->key= (uchar *) strmake_root(mem_root, key.ptr(), key.length());
|
||||
|
||||
/* pointer magic */
|
||||
server->scheme+= (intptr) server->key;
|
||||
server->hostname+= (intptr) server->key;
|
||||
server->database+= (intptr) server->key;
|
||||
server->username+= (intptr) server->key;
|
||||
server->password+= (intptr) server->key;
|
||||
server->socket+= (intptr) server->key;
|
||||
server->scheme= (const char *)server->key;
|
||||
server->hostname= (const char *)server->key + hostname_pos;
|
||||
server->database= (const char *)server->key + database_pos;
|
||||
server->username= (const char *)server->key + username_pos;
|
||||
server->password= (const char *)server->key + password_pos;
|
||||
server->socket= (const char*)server->key + socket_pos;
|
||||
server->port= share->port;
|
||||
|
||||
if (!share->socket)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue