Module: kamailio Branch: master Commit: f06e09b3a83f88678318f4aabeb6afdbf5a46ff0 URL: https://github.com/kamailio/kamailio/commit/f06e09b3a83f88678318f4aabeb6afdbf5a46ff0
Author: Daniel-Constantin Mierla <mico...@gmail.com> Committer: Daniel-Constantin Mierla <mico...@gmail.com> Date: 2017-07-28T10:45:07+02:00 db_text: safety checks before memsets inside dbt_build_where() --- Modified: src/modules/db_text/dbt_raw_util.c --- Diff: https://github.com/kamailio/kamailio/commit/f06e09b3a83f88678318f4aabeb6afdbf5a46ff0.diff Patch: https://github.com/kamailio/kamailio/commit/f06e09b3a83f88678318f4aabeb6afdbf5a46ff0.patch --- diff --git a/src/modules/db_text/dbt_raw_util.c b/src/modules/db_text/dbt_raw_util.c index 92b60287d6..f5cf756e25 100644 --- a/src/modules/db_text/dbt_raw_util.c +++ b/src/modules/db_text/dbt_raw_util.c @@ -183,13 +183,12 @@ int dbt_build_where(char* where, db_key_t** _k, db_op_t** _o, db_val_t** _v) int offset = 0; int idx = -1; char int_buf[50]; + int res; *_k = NULL; *_o = NULL; *_v = NULL; - int res; - len = strlen(where); res = regcomp(&preg, _regexp, REG_EXTENDED); @@ -199,21 +198,21 @@ int dbt_build_where(char* where, db_key_t** _k, db_op_t** _o, db_val_t** _v) } _k1 = pkg_malloc(sizeof(db_key_t) * MAX_CLAUSES); - memset(_k1, 0, sizeof(db_key_t) * MAX_CLAUSES); _o1 = pkg_malloc(sizeof(char*) * MAX_CLAUSES); - memset(_o1, 0, sizeof(db_op_t) * MAX_CLAUSES); _v1 = pkg_malloc(sizeof(db_val_t) * MAX_CLAUSES); - memset(_v1, 0, sizeof(db_val_t) * MAX_CLAUSES); - matches = (regmatch_t*)pkg_malloc(sizeof(regmatch_t) * MAX_MATCH); - if(matches==NULL || _k1==NULL || _o1==NULL || _v1==NULL) { + + if(_k1==NULL || _o1==NULL || _v1==NULL || matches==NULL) { LM_ERR("error getting pkg memory\n"); - pkg_free(_k1); - pkg_free(_o1); - pkg_free(_v1); - pkg_free(matches); + if(_k1) pkg_free(_k1); + if(_o1) pkg_free(_o1); + if(_v1) pkg_free(_v1); + if(matches) pkg_free(matches); return -1; } + memset(_k1, 0, sizeof(db_key_t) * MAX_CLAUSES); + memset(_o1, 0, sizeof(char*) * MAX_CLAUSES); + memset(_v1, 0, sizeof(db_val_t) * MAX_CLAUSES); while(offset < len) { char* buffer = where + offset; _______________________________________________ Kamailio (SER) - Development Mailing List sr-dev@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev