Forráskód Böngészése

sqlops: safety check for result row field

- it might not be set in case of a failure in the middle of result
  conversion from db to internal memory
- freeing the partial result could result in a crash
- reported by Juha Heinanen
Daniel-Constantin Mierla 11 éve
szülő
commit
f27df26ca0
1 módosított fájl, 8 hozzáadás és 5 törlés
  1. 8 5
      modules/sqlops/sql_api.c

+ 8 - 5
modules/sqlops/sql_api.c

@@ -228,13 +228,16 @@ void sql_reset_result(sql_result_t *res)
 	{
 		for(i=0; i<res->nrows; i++)
 		{
-			for(j=0; j<res->ncols; j++)
+			if(res->vals[i])
 			{
-				if(res->vals[i][j].flags&PV_VAL_STR
-						&& res->vals[i][j].value.s.len>0)
-					pkg_free(res->vals[i][j].value.s.s);
+				for(j=0; j<res->ncols; j++)
+				{
+					if(res->vals[i][j].flags&PV_VAL_STR
+							&& res->vals[i][j].value.s.len>0)
+						pkg_free(res->vals[i][j].value.s.s);
+				}
+				pkg_free(res->vals[i]);
 			}
-			pkg_free(res->vals[i]);
 		}
 		pkg_free(res->vals);
 		res->vals = NULL;