aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel/src/image.c
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2021-02-15 11:39:18 +0100
committerThomas White <taw@physics.org>2021-02-15 11:39:18 +0100
commit09e71ff37379f6827a50a0e2d4ec26971af2b00c (patch)
treecb1a38658554f99a0aa117cc050fe7cca6decb37 /libcrystfel/src/image.c
parent82e6750fd53bf0bea4bd665edb60cc244ce923ce (diff)
Check that bad regions are actually within panel bounds
Diffstat (limited to 'libcrystfel/src/image.c')
-rw-r--r--libcrystfel/src/image.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/libcrystfel/src/image.c b/libcrystfel/src/image.c
index aa388580..2a936011 100644
--- a/libcrystfel/src/image.c
+++ b/libcrystfel/src/image.c
@@ -717,6 +717,19 @@ static void mark_flagged_pixels(struct panel_template *p,
}
+static int region_within_panel(struct dt_badregion *region,
+ struct detgeom_panel *panel)
+{
+ assert(region->is_fsss);
+
+ if ( region->min_fs < 0 ) return 0;
+ if ( region->min_ss < 0 ) return 0;
+ if ( region->max_fs >= panel->w ) return 0;
+ if ( region->max_ss >= panel->h ) return 0;
+ return 1;
+}
+
+
static void draw_bad_region_fsss(struct dt_badregion *region,
int **bad,
struct detgeom *detgeom)
@@ -726,6 +739,12 @@ static void draw_bad_region_fsss(struct dt_badregion *region,
panel = &detgeom->panels[region->panel_number];
+ if ( !region_within_panel(region, panel) ) {
+ ERROR("Bad pixel region %s is (partially) outside panel - ignoring it\n",
+ region->name);
+ return;
+ }
+
for ( ss=region->min_ss; ss<=region->max_ss; ss++ ) {
for ( fs=region->min_fs; fs<=region->max_fs; fs++ ) {
bad[region->panel_number][fs+ss*panel->w] = 1;