2
0
Эх сурвалжийг харах

db_text: fixed leak for raw query where bulding

Daniel-Constantin Mierla 10 жил өмнө
parent
commit
646bcf919e

+ 13 - 7
modules/db_text/dbt_raw_util.c

@@ -165,15 +165,18 @@ int dbt_build_where(char* where, db_key_t** _k, db_op_t** _o, db_val_t** _v)
 	db_key_t* _k1 = NULL;
 	char** _o1 = NULL;
 	db_val_t* _v1 = NULL;
+	regmatch_t* matches = NULL;
+	int n, l;
+	int len;
+	regex_t preg;
+	int offset = 0;
+	int idx = -1;
 
 	*_k = NULL;
 	*_o = NULL;
 	*_v = NULL;
 
-	int n, l;
-	int len = strlen(where);
-
-	regex_t preg;
+	len = strlen(where);
 
 	if (regcomp(&preg, _regexp, REG_EXTENDED | REG_NEWLINE)) {
 		LM_ERR("error compiling regexp\n");
@@ -187,10 +190,12 @@ int dbt_build_where(char* where, db_key_t** _k, db_op_t** _o, db_val_t** _v)
 	_v1 = pkg_malloc(sizeof(db_val_t) * MAX_CLAUSES);
 	memset(_v1, 0, sizeof(db_val_t) * MAX_CLAUSES);
 
-	regmatch_t* matches = (regmatch_t*)pkg_malloc(sizeof(regmatch_t) * MAX_MATCH);
+	matches = (regmatch_t*)pkg_malloc(sizeof(regmatch_t) * MAX_MATCH);
+	if(matches==NULL) {
+		LM_ERR("error getting pkg memory\n");
+		return -1;
+	}
 
-	int offset = 0;
-	int idx = -1;
 	while(offset < len) {
 		char* buffer = where + offset;
 
@@ -238,6 +243,7 @@ int dbt_build_where(char* where, db_key_t** _k, db_op_t** _o, db_val_t** _v)
 
 	}
 	regfree(&preg);
+	pkg_free(matches);
 
 	*_k = _k1;
 	*_o = (db_op_t*)_o1;