Merge branch 'issue588' into v1.2.0

Conflicts:
	lib/ProxySQL_Admin.cpp
connleak
René Cannaò 10 years ago
commit e559cfefe5

@ -160,3 +160,4 @@ bool Proxy_file_regular(const char *);
int remove_spaces(const char *);
char *trim_spaces_in_place(char *str);
char *trim_spaces_and_quotes_in_place(char *str);

@ -529,8 +529,9 @@ bool MySQL_Session::handler_special_queries(PtrSize_t *pkt) {
l_free(pkt->size,pkt->ptr);
return true;
}
if ( (pkt->size < 25) && (pkt->size > 15) && (strncasecmp((char *)"SET NAMES ",(char *)pkt->ptr+5,10)==0) ) {
char *name=strndup((char *)pkt->ptr+15,pkt->size-15);
if ( (pkt->size < 35) && (pkt->size > 15) && (strncasecmp((char *)"SET NAMES ",(char *)pkt->ptr+5,10)==0) ) {
char *unstripped=strndup((char *)pkt->ptr+15,pkt->size-15);
char *name=trim_spaces_and_quotes_in_place(unstripped);
const CHARSET_INFO * c = proxysql_find_charset_name(name);
client_myds->DSS=STATE_QUERY_SENT_NET;
if (!c) {
@ -549,7 +550,7 @@ bool MySQL_Session::handler_special_queries(PtrSize_t *pkt) {
client_myds->DSS=STATE_SLEEP;
status=WAITING_CLIENT_DATA;
l_free(pkt->size,pkt->ptr);
free(name);
free(unstripped);
return true;
}

@ -531,7 +531,7 @@ bool admin_handler_command_set(char *query_no_space, unsigned int query_no_space
*ql = strlen(*q) + 1;
}
}
free(var_name);
free(untrimmed_var_name);
free(var_value);
return run_query;
}

@ -60,6 +60,22 @@ char *trim_spaces_in_place(char *str)
return str;
}
char *trim_spaces_and_quotes_in_place(char *str) {
char *end;
// Trim leading space
while(isspace(*str) || *str=='\"' || *str=='\'')
str++;
if(*str == 0) // All spaces?
return str;
// Trim trailing space
end = str + strlen(str) - 1;
while(end > str && (isspace(*end) || *end=='\"' || *end=='\'')) end--;
// Write new null terminator
*(end+1) = 0;
return str;
}
#define MIN_ARRAY_LEN 8
#define MIN_ARRAY_DELETE_RATIO 8

Loading…
Cancel
Save