Quellcode durchsuchen

topos_htable: fix xtag and add more snprintf checks

Stefan Mititelu vor 7 Monaten
Ursprung
Commit
e0e0884627
1 geänderte Dateien mit 18 neuen und 5 gelöschten Zeilen
  1. 18 5
      src/modules/topos_htable/topos_htable_storage.c

+ 18 - 5
src/modules/topos_htable/topos_htable_storage.c

@@ -185,7 +185,7 @@ static int tps_htable_insert_initial_method_branch(
 	}
 	}
 
 
 	if(ret < 0 || ret >= TPS_HTABLE_SIZE_VAL) {
 	if(ret < 0 || ret >= TPS_HTABLE_SIZE_VAL) {
-		LM_ERR("failed to build htable value\n");
+		LM_ERR("failed to build htable val\n");
 		return -1;
 		return -1;
 	}
 	}
 
 
@@ -758,7 +758,7 @@ static int tps_htable_insert_dialog_helper(tps_data_t *td, int set_expire)
 				  td->a_uuid.len, td->a_uuid.s)
 				  td->a_uuid.len, td->a_uuid.s)
 							   : snprintf(ptr, TPS_HTABLE_SIZE_KEY, "%.*s",
 							   : snprintf(ptr, TPS_HTABLE_SIZE_KEY, "%.*s",
 									   td->b_uuid.len, td->b_uuid.s);
 									   td->b_uuid.len, td->b_uuid.s);
-	if(ret < 0) {
+	if(ret < 0 || ret >= TPS_HTABLE_SIZE_KEY) {
 		LM_ERR("failed to build htable key\n");
 		LM_ERR("failed to build htable key\n");
 		return -1;
 		return -1;
 	}
 	}
@@ -771,6 +771,11 @@ static int tps_htable_insert_dialog_helper(tps_data_t *td, int set_expire)
 		ret = snprintf(ptr, TPS_HTABLE_SIZE_KEY, "%s", _tps_base64_buf[0]);
 		ret = snprintf(ptr, TPS_HTABLE_SIZE_KEY, "%s", _tps_base64_buf[0]);
 	}
 	}
 
 
+	if(ret < 0 || ret >= TPS_HTABLE_SIZE_KEY) {
+		LM_ERR("failed to build htable key\n");
+		return -1;
+	}
+
 
 
 	// build val
 	// build val
 	rectime = (unsigned long)time(NULL);
 	rectime = (unsigned long)time(NULL);
@@ -849,7 +854,7 @@ static int tps_htable_insert_dialog_helper(tps_data_t *td, int set_expire)
 				td->x_context.s);
 				td->x_context.s);
 	}
 	}
 
 
-	if(ret < 0) {
+	if(ret < 0 || ret >= TPS_HTABLE_SIZE_VAL) {
 		LM_ERR("failed to build htable val\n");
 		LM_ERR("failed to build htable val\n");
 		return -1;
 		return -1;
 	}
 	}
@@ -919,7 +924,7 @@ int tps_htable_load_dialog(sip_msg_t *msg, tps_data_t *md, tps_data_t *sd)
 				  md->a_uuid.len, md->a_uuid.s)
 				  md->a_uuid.len, md->a_uuid.s)
 							   : snprintf(ptr, TPS_HTABLE_SIZE_KEY, "%.*s",
 							   : snprintf(ptr, TPS_HTABLE_SIZE_KEY, "%.*s",
 									   md->b_uuid.len, md->b_uuid.s);
 									   md->b_uuid.len, md->b_uuid.s);
-	if(ret < 0) {
+	if(ret < 0 || ret >= TPS_HTABLE_SIZE_KEY) {
 		LM_ERR("failed to build htable key\n");
 		LM_ERR("failed to build htable key\n");
 		return -1;
 		return -1;
 	}
 	}
@@ -931,6 +936,10 @@ int tps_htable_load_dialog(sip_msg_t *msg, tps_data_t *md, tps_data_t *sd)
 				_tps_base64_buf[0], TPS_BASE64_SIZE - 1);
 				_tps_base64_buf[0], TPS_BASE64_SIZE - 1);
 		ret = snprintf(ptr, TPS_HTABLE_SIZE_KEY, "%s", _tps_base64_buf[0]);
 		ret = snprintf(ptr, TPS_HTABLE_SIZE_KEY, "%s", _tps_base64_buf[0]);
 	}
 	}
+	if(ret < 0 || ret >= TPS_HTABLE_SIZE_KEY) {
+		LM_ERR("failed to build htable key\n");
+		return -1;
+	}
 
 
 	hkey.s = _tps_htable_key_buf;
 	hkey.s = _tps_htable_key_buf;
 	hkey.len = strlen(_tps_htable_key_buf);
 	hkey.len = strlen(_tps_htable_key_buf);
@@ -1190,7 +1199,7 @@ int tps_htable_end_dialog(sip_msg_t *msg, tps_data_t *md, tps_data_t *sd)
 				  sd->a_uuid.len, sd->a_uuid.s)
 				  sd->a_uuid.len, sd->a_uuid.s)
 							   : snprintf(ptr, TPS_HTABLE_SIZE_KEY, "%.*s",
 							   : snprintf(ptr, TPS_HTABLE_SIZE_KEY, "%.*s",
 									   sd->b_uuid.len, sd->b_uuid.s);
 									   sd->b_uuid.len, sd->b_uuid.s);
-	if(ret < 0) {
+	if(ret < 0 || ret >= TPS_HTABLE_SIZE_KEY) {
 		LM_ERR("failed to build htable key\n");
 		LM_ERR("failed to build htable key\n");
 		return -1;
 		return -1;
 	}
 	}
@@ -1202,6 +1211,10 @@ int tps_htable_end_dialog(sip_msg_t *msg, tps_data_t *md, tps_data_t *sd)
 				_tps_base64_buf[0], TPS_BASE64_SIZE - 1);
 				_tps_base64_buf[0], TPS_BASE64_SIZE - 1);
 		ret = snprintf(ptr, TPS_HTABLE_SIZE_KEY, "%s", _tps_base64_buf[0]);
 		ret = snprintf(ptr, TPS_HTABLE_SIZE_KEY, "%s", _tps_base64_buf[0]);
 	}
 	}
+	if(ret < 0 || ret >= TPS_HTABLE_SIZE_KEY) {
+		LM_ERR("failed to build htable key\n");
+		return -1;
+	}
 
 
 
 
 	// dialog ended -- keep it for branch lifetime only
 	// dialog ended -- keep it for branch lifetime only