Selaa lähdekoodia

mtree: safety checks for column types and values

- following the report FS#412 by adeel
Daniel-Constantin Mierla 11 vuotta sitten
vanhempi
commit
6c0370b806
1 muutettua tiedostoa jossa 17 lisäystä ja 6 poistoa
  1. 17 6
      modules/mtree/mtree_mod.c

+ 17 - 6
modules/mtree/mtree_mod.c

@@ -548,12 +548,11 @@ static int mt_load_db(m_tree_t *pt)
 		if(mt_dbf.fetch_result(db_con, &db_res, mt_fetch_rows)<0)
 		{
 			LM_ERR("Error while fetching result\n");
-			if (db_res)
-				mt_dbf.free_result(db_con, db_res);
 			goto error;
 		} else {
 			if(RES_ROW_N(db_res)==0)
 			{
+				mt_dbf.free_result(db_con, db_res);
 				return 0;
 			}
 		}
@@ -562,9 +561,9 @@ static int mt_load_db(m_tree_t *pt)
 						pt->multi, 2, 0, &db_res))!=0
 				|| RES_ROW_N(db_res)<=0 )
 		{
-			mt_dbf.free_result(db_con, db_res);
-			if( ret==0)
+			if(ret==0)
 			{
+				mt_dbf.free_result(db_con, db_res);
 				return 0;
 			} else {
 				goto error;
@@ -572,15 +571,27 @@ static int mt_load_db(m_tree_t *pt)
 		}
 	}
 
+	if(RES_ROW_N(db_res)>0)
+	{
+		if(RES_ROWS(db_res)[0].values[0].type != DB1_STRING
+				|| RES_ROWS(db_res)[0].values[1].type != DB1_STRING)
+		{
+			LM_ERR("wrond column types in db table (%d / %d)\n",
+					RES_ROWS(db_res)[0].values[0].type,
+					RES_ROWS(db_res)[0].values[1].type);
+			goto error;
+		}
+	}
+
 	do {
 		for(i=0; i<RES_ROW_N(db_res); i++)
 		{
 			/* check for NULL values ?!?! */
 			tprefix.s = (char*)(RES_ROWS(db_res)[i].values[0].val.string_val);
-			tprefix.len = strlen(tprefix.s);
+			tprefix.len = strlen(ZSW(tprefix.s));
 
 			tvalue.s = (char*)(RES_ROWS(db_res)[i].values[1].val.string_val);
-			tvalue.len = strlen(tvalue.s);
+			tvalue.len = strlen(ZSW(tvalue.s));
 
 			if(tprefix.s==NULL || tvalue.s==NULL
 					|| tprefix.len<=0 || tvalue.len<=0)