ソースを参照

acc: safety check for accounted values not to be NULL

- based on a patch by  Federico Cabiddu, FS#327
Daniel-Constantin Mierla 12 年 前
コミット
fb3a5f7022
2 ファイル変更11 行追加7 行削除
  1. 10 6
      modules/acc/acc.c
  2. 1 1
      modules/acc/acc_logic.c

+ 10 - 6
modules/acc/acc.c

@@ -241,13 +241,15 @@ int acc_log_request( struct sip_msg *rq)
 		memcpy(p, log_attrs[i].s, log_attrs[i].len);
 		p += log_attrs[i].len;
 		*(p++) = A_EQ_CHR;
-		memcpy(p, val_arr[i].s, val_arr[i].len);
-		p += val_arr[i].len;
+		if (val_arr[i].s != NULL) {
+			memcpy(p, val_arr[i].s, val_arr[i].len);
+			p += val_arr[i].len;
+		}
 	}
 
 	/* get per leg attributes */
 	if ( leg_info ) {
-	        n = legs2strar(leg_info,rq,val_arr+m,int_arr+m,type_arr+m, 1);
+		n = legs2strar(leg_info,rq,val_arr+m,int_arr+m,type_arr+m, 1);
 		do {
 			for (i=m; i<m+n; i++) {
 				if (p+1+log_attrs[i].len+1+val_arr[i].len >= log_msg_end) {
@@ -259,10 +261,12 @@ int acc_log_request( struct sip_msg *rq)
 				memcpy(p, log_attrs[i].s, log_attrs[i].len);
 				p += log_attrs[i].len;
 				*(p++) = A_EQ_CHR;
-				memcpy(p, val_arr[i].s, val_arr[i].len);
-				p += val_arr[i].len;
+				if (val_arr[i].s != NULL) {
+					memcpy(p, val_arr[i].s, val_arr[i].len);
+					p += val_arr[i].len;
+				}
 			}
-		}while (p!=log_msg_end && (n=legs2strar(leg_info,rq,val_arr+m,
+		} while (p!=log_msg_end && (n=legs2strar(leg_info,rq,val_arr+m,
 							int_arr+m,type_arr+m,
 							0))!=0);
 	}

+ 1 - 1
modules/acc/acc_logic.c

@@ -220,7 +220,7 @@ int w_acc_db_request(struct sip_msg *rq, char *comment, char *table)
 	if(acc_db_set_table_name(rq, (void*)table, NULL)<0) {
 		LM_ERR("cannot set table name\n");
 		return -1;
-    }
+	}
 	env_set_to( rq->to );
 	env_set_comment((struct acc_param*)comment);
 	return acc_db_request(rq);