Skip to content

Commit a5f9984

Browse files
author
zhuchao-hit
committed
check the length of tokens
1 parent 63d3217 commit a5f9984

1 file changed

Lines changed: 22 additions & 15 deletions

File tree

plugins/proxy/proxy-plugin.c

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,12 @@ guint get_table_index(GPtrArray* tokens, gint* d, gint* t) {
242242

243243
sql_token** ts = (sql_token**)(tokens->pdata);
244244
guint len = tokens->len;
245+
if (len <= 1) { return 0; }
245246

246247
guint i = 1, j;
247248
while (ts[i]->token_id == TK_COMMENT && ++i < len);
249+
if (i >= len) { return 0; } // sql contains TK_COMMENT only.
250+
248251
sql_token_id token_id = ts[i]->token_id;
249252

250253
if (token_id == TK_SQL_SELECT || token_id == TK_SQL_DELETE) {
@@ -1086,6 +1089,8 @@ NETWORK_MYSQLD_PLUGIN_PROTO(proxy_read_auth_result) {
10861089
}
10871090

10881091
int rw_split(GPtrArray* tokens, network_mysqld_con* con) {
1092+
if (tokens->len <= 1) { return idle_rw(con); }
1093+
10891094
sql_token* first_token = tokens->pdata[1];
10901095
sql_token_id token_id = first_token->token_id;
10911096
if (token_id == TK_COMMENT && strcasecmp(first_token->text->str, "MASTER") == 0) return idle_rw(con);
@@ -1261,22 +1266,24 @@ void check_flags(GPtrArray* tokens, network_mysqld_con* con) {
12611266

12621267
gboolean is_in_blacklist(GPtrArray* tokens) {
12631268
guint len = tokens->len;
1264-
guint i;
1269+
if (len > 1) {
1270+
guint i;
12651271

1266-
sql_token* token = tokens->pdata[1];
1267-
if (token->token_id == TK_SQL_DELETE || token->token_id == TK_SQL_UPDATE) {
1268-
for (i = 2; i < len; ++i) {
1269-
token = tokens->pdata[i];
1270-
if (token->token_id == TK_SQL_WHERE) break;
1272+
sql_token* token = tokens->pdata[1];
1273+
if (token->token_id == TK_SQL_DELETE || token->token_id == TK_SQL_UPDATE) {
1274+
for (i = 2; i < len; ++i) {
1275+
token = tokens->pdata[i];
1276+
if (token->token_id == TK_SQL_WHERE) break;
1277+
}
1278+
if (i == len) return TRUE;
12711279
}
1272-
if (i == len) return TRUE;
1273-
}
12741280

1275-
for (i = 2; i < len; ++i) {
1276-
token = tokens->pdata[i];
1277-
if (token->token_id == TK_OBRACE) {
1278-
token = tokens->pdata[i-1];
1279-
if (strcasecmp(token->text->str, "SLEEP") == 0) return TRUE;
1281+
for (i = 2; i < len; ++i) {
1282+
token = tokens->pdata[i];
1283+
if (token->token_id == TK_OBRACE) {
1284+
token = tokens->pdata[i-1];
1285+
if (strcasecmp(token->text->str, "SLEEP") == 0) return TRUE;
1286+
}
12801287
}
12811288
}
12821289

@@ -1296,9 +1303,9 @@ gboolean sql_is_write(GPtrArray *tokens) {
12961303
}
12971304

12981305
return (token_id != TK_SQL_SELECT && token_id != TK_SQL_SET && token_id != TK_SQL_USE && token_id != TK_SQL_SHOW && token_id != TK_SQL_DESC && token_id != TK_SQL_EXPLAIN);
1299-
} else {
1300-
return TRUE;
13011306
}
1307+
1308+
return TRUE;
13021309
}
13031310

13041311
/**

0 commit comments

Comments
 (0)