소스 검색

p_usrloc: fix resource leak

Lucian Balaceanu 8 년 전
부모
커밋
2a67f79945
1개의 변경된 파일11개의 추가작업 그리고 9개의 파일을 삭제
  1. 11 9
      src/modules/p_usrloc/ul_db_layer.c

+ 11 - 9
src/modules/p_usrloc/ul_db_layer.c

@@ -218,27 +218,26 @@ int ul_add_domain_db(str * d, int t, str * url) {
 		return -1;
 		return -1;
 	}
 	}
 	memset(new_d, 0, sizeof(ul_domain_db_list_t));
 	memset(new_d, 0, sizeof(ul_domain_db_list_t));
-	if(!d){
-		return -1;
-	}
-	if(!d->s){
-		return -1;		
-	}
+
+	if(!d || !d->s) goto error;
+
 	if((new_d->domain.name.s = pkg_malloc(d->len + 1)) == NULL) {
 	if((new_d->domain.name.s = pkg_malloc(d->len + 1)) == NULL) {
-		return -1;
+		goto error;
 	}
 	}
+
 	if(t == DB_TYPE_SINGLE) {
 	if(t == DB_TYPE_SINGLE) {
 		if(url) {
 		if(url) {
 			LM_DBG("url: %.*s", url->len, url->s);
 			LM_DBG("url: %.*s", url->len, url->s);
 			if((new_d->domain.url.s = pkg_malloc(url->len + 1)) == NULL) {
 			if((new_d->domain.url.s = pkg_malloc(url->len + 1)) == NULL) {
-				return -1;
+				goto error;
 			}
 			}
+
 			strncpy(new_d->domain.url.s, url->s, url->len);
 			strncpy(new_d->domain.url.s, url->s, url->len);
                        new_d->domain.url.s[url->len] = '\0';
                        new_d->domain.url.s[url->len] = '\0';
 			new_d->domain.url.len = url->len;
 			new_d->domain.url.len = url->len;
 		} else {
 		} else {
 			if((new_d->domain.url.s = pkg_malloc(default_db_url.len + 1)) == NULL) {
 			if((new_d->domain.url.s = pkg_malloc(default_db_url.len + 1)) == NULL) {
-				return -1;
+				goto error;
 			}
 			}
 			strcpy(new_d->domain.url.s, default_db_url.s);
 			strcpy(new_d->domain.url.s, default_db_url.s);
 			new_d->domain.url.len = default_db_url.len;
 			new_d->domain.url.len = default_db_url.len;
@@ -250,6 +249,9 @@ int ul_add_domain_db(str * d, int t, str * url) {
 	new_d->next = domain_db_list;
 	new_d->next = domain_db_list;
 	domain_db_list = new_d;
 	domain_db_list = new_d;
 	return 1;
 	return 1;
+error:
+	pkg_free(new_d);
+	return -1;
 }
 }
 
 
 ul_domain_db_t * ul_find_domain(const char * s) {
 ul_domain_db_t * ul_find_domain(const char * s) {