@@ -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
10881091int 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
12621267gboolean 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