From d1899304a8ef4a3f7c92079e96ae9bed106fa9ba Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Fri, 14 Oct 2011 12:10:13 +0200 Subject: [PATCH] isl_point_get_coordinate: check validity of "pos" argument Signed-off-by: Sven Verdoolaege --- doc/user.pod | 2 +- include/isl/point.h | 2 +- isl_point.c | 11 +++++++++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/doc/user.pod b/doc/user.pod index accd9b1f..a22d43cc 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -3118,7 +3118,7 @@ The zero point (the origin) can be created using The coordinates of a point can be inspected, set and changed using - void isl_point_get_coordinate(__isl_keep isl_point *pnt, + int isl_point_get_coordinate(__isl_keep isl_point *pnt, enum isl_dim_type type, int pos, isl_int *v); __isl_give isl_point *isl_point_set_coordinate( __isl_take isl_point *pnt, diff --git a/include/isl/point.h b/include/isl/point.h index 7d95db13..5d845e96 100644 --- a/include/isl/point.h +++ b/include/isl/point.h @@ -18,7 +18,7 @@ __isl_give isl_point *isl_point_zero(__isl_take isl_space *dim); __isl_give isl_point *isl_point_copy(__isl_keep isl_point *pnt); void isl_point_free(__isl_take isl_point *pnt); -void isl_point_get_coordinate(__isl_keep isl_point *pnt, +int isl_point_get_coordinate(__isl_keep isl_point *pnt, enum isl_dim_type type, int pos, isl_int *v); __isl_give isl_point *isl_point_set_coordinate(__isl_take isl_point *pnt, enum isl_dim_type type, int pos, isl_int v); diff --git a/isl_point.c b/isl_point.c index 53419bee..00514a9f 100644 --- a/isl_point.c +++ b/isl_point.c @@ -125,14 +125,21 @@ int isl_point_is_void(__isl_keep isl_point *pnt) return pnt->vec->size == 0; } -void isl_point_get_coordinate(__isl_keep isl_point *pnt, +int isl_point_get_coordinate(__isl_keep isl_point *pnt, enum isl_dim_type type, int pos, isl_int *v) { if (!pnt || isl_point_is_void(pnt)) - return; + return -1; + + if (pos < 0 || pos >= isl_space_dim(pnt->dim, type)) + isl_die(isl_point_get_ctx(pnt), isl_error_invalid, + "position out of bounds", return -1); + if (type == isl_dim_set) pos += isl_space_dim(pnt->dim, isl_dim_param); isl_int_set(*v, pnt->vec->el[1 + pos]); + + return 0; } __isl_give isl_point *isl_point_set_coordinate(__isl_take isl_point *pnt, -- 2.11.4.GIT