Преглед на файлове

- bugs reported by Jiri fixed.

Jan Janak преди 22 години
родител
ревизия
bfcd836452
променени са 2 файла, в които са добавени 13 реда и са изтрити 5 реда
  1. 3 2
      parser/parse_param.c
  2. 10 3
      parser/parse_rr.c

+ 3 - 2
parser/parse_param.c

@@ -469,7 +469,7 @@ static inline int do_duplicate_params(param_t** _n, param_t* _p, int _shm)
 {
 	param_t* last, *ptr, *t;
 
-	if (!_n || !_p) {
+	if (!_n) {
 		LOG(L_ERR, "duplicate_params(): Invalid parameter value\n");
 		return -1;
 	}
@@ -496,10 +496,11 @@ static inline int do_duplicate_params(param_t** _n, param_t* _p, int _shm)
 
 		ptr = ptr->next;
 	}
+	return 0;
 
  err:
 	do_free_params(*_n, _shm);
-	return 0;
+	return -2;
 }
 
 

+ 10 - 3
parser/parse_rr.c

@@ -223,10 +223,10 @@ static inline void xlate_pointers(struct sip_msg* _m, rr_t* _r)
  */
 static inline int do_duplicate_rr(struct sip_msg* _m, rr_t** _new, rr_t* _r, int _shm)
 {
-	int len;
+	int len, ret;
 	rr_t* res;
 
-	if (!_m || !_new || _r) {
+	if (!_m || !_new || !_r) {
 		LOG(L_ERR, "duplicate_rr(): Invalid parameter value\n");
 		return -1;
 	}
@@ -243,11 +243,18 @@ static inline int do_duplicate_rr(struct sip_msg* _m, rr_t** _new, rr_t* _r, int
 		LOG(L_ERR, "duplicate_rr(): No memory left\n");
 		return -2;
 	}
+	memset(res, 0, sizeof(rr_t));
 
         res->nameaddr.name.s = (char*)res + sizeof(rr_t);
 	memcpy(res->nameaddr.name.s, _r->nameaddr.name.s, len);
 
-	if (duplicate_params(&res->params, _r->params) < 0) {
+	if (_shm) {
+		ret = shm_duplicate_params(&res->params, _r->params);
+	} else {
+		ret = duplicate_params(&res->params, _r->params);
+	}
+
+	if (ret < 0) {
 		LOG(L_ERR, "Error while duplicating parameters\n");
 		if (_shm) shm_free(res);
 		else pkg_free(res);