summaryrefslogtreecommitdiff
path: root/gui
diff options
context:
space:
mode:
authorWerner Almesberger <werner@almesberger.net>2016-08-20 20:42:34 -0300
committerWerner Almesberger <werner@almesberger.net>2016-08-20 20:42:34 -0300
commitca924a3926e2f726fc41b442a1b7b8235262d8a3 (patch)
treed7101298916944336d1e96546b1ee7514f68c80e /gui
parentb857d7dc32a12d8a1703110177d44289b8773fa7 (diff)
downloadeeshow-ca924a3926e2f726fc41b442a1b7b8235262d8a3.tar.gz
eeshow-ca924a3926e2f726fc41b442a1b7b8235262d8a3.tar.bz2
eeshow-ca924a3926e2f726fc41b442a1b7b8235262d8a3.zip
eeshow/gui/ (aoi_click): also protect from access after free
Unlike aoi_hover, aoi_click was not observed to actually run into this problem. But better safe than sorry.
Diffstat (limited to 'gui')
-rw-r--r--gui/aoi.c8
-rw-r--r--gui/aoi.h2
-rw-r--r--gui/history.c2
-rw-r--r--gui/sheet.c4
4 files changed, 9 insertions, 7 deletions
diff --git a/gui/aoi.c b/gui/aoi.c
index 0d71948..45e3012 100644
--- a/gui/aoi.c
+++ b/gui/aoi.c
@@ -101,14 +101,16 @@ static bool need_dehover(const struct aoi *aois, int x, int y)
}
-bool aoi_click(const struct aoi *aois, int x, int y)
+/* Pointer to the anchor needed for the same reason as in aoi_hover. */
+
+bool aoi_click(struct aoi *const *aois, int x, int y)
{
const struct aoi *aoi;
- if (need_dehover(aois, x, y))
+ if (need_dehover(*aois, x, y))
aoi_dehover();
- for (aoi = aois; aoi; aoi = aoi->next)
+ for (aoi = *aois; aoi; aoi = aoi->next)
if (aoi->click && in_aoi(aoi, x, y)) {
aoi->click(aoi->user);
return 1;
diff --git a/gui/aoi.h b/gui/aoi.h
index da2955b..6ac9889 100644
--- a/gui/aoi.h
+++ b/gui/aoi.h
@@ -34,7 +34,7 @@ struct aoi *aoi_add(struct aoi **aois, const struct aoi *cfg);
void aoi_update(struct aoi *aoi, const struct aoi *cfg);
bool aoi_hover(struct aoi *const *aois, int x, int y);
-bool aoi_click(const struct aoi *aois, int x, int y);
+bool aoi_click(struct aoi *const *aois, int x, int y);
void aoi_set_related(struct aoi *aoi, const struct aoi *related);
diff --git a/gui/history.c b/gui/history.c
index 2425765..d7d8d19 100644
--- a/gui/history.c
+++ b/gui/history.c
@@ -206,7 +206,7 @@ static bool history_click(void *user, int x, int y)
{
struct gui_ctx *ctx = user;
- if (aoi_click(ctx->aois, x, y))
+ if (aoi_click(&ctx->aois, x, y))
return 1;
hide_history(ctx);
return 1;
diff --git a/gui/sheet.c b/gui/sheet.c
index d1ec01c..3be3868 100644
--- a/gui/sheet.c
+++ b/gui/sheet.c
@@ -394,9 +394,9 @@ static bool sheet_click(void *user, int x, int y)
curr_sheet = find_corresponding_sheet(ctx->old_hist->sheets,
ctx->new_hist->sheets, ctx->curr_sheet);
- if (aoi_click(ctx->aois, x, y))
+ if (aoi_click(&ctx->aois, x, y))
return 1;
- if (aoi_click(curr_sheet->aois,
+ if (aoi_click(&curr_sheet->aois,
ex + curr_sheet->xmin, ey + curr_sheet->ymin))
return 1;