Skip to content

Commit

Permalink
Vertical grids: avoid out-of-bounds read on east and south edges (#396)
Browse files Browse the repository at this point in the history
  • Loading branch information
rouault committed Feb 26, 2017
1 parent feb4a36 commit d64a550
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions src/pj_apply_vgridshift.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ int pj_apply_vgridshift( PJ *defn, const char *listname,
struct CTABLE *ct = gi->ct;
double grid_x, grid_y;
int grid_ix, grid_iy;
int grid_ix2, grid_iy2;
float *cvs;

/* skip tables that don't match our point at all. */
Expand Down Expand Up @@ -141,14 +142,21 @@ int pj_apply_vgridshift( PJ *defn, const char *listname,
grid_x -= grid_ix;
grid_y -= grid_iy;

grid_ix2 = grid_ix + 1;
if( grid_ix2 >= ct->lim.lam )
grid_ix2 = ct->lim.lam - 1;
grid_iy2 = grid_iy + 1;
if( grid_iy2 >= ct->lim.phi )
grid_iy2 = ct->lim.phi - 1;

cvs = (float *) ct->cvs;
value = cvs[grid_ix + grid_iy * ct->lim.lam]
value = cvs[grid_ix + grid_iy * ct->lim.lam]
* (1.0-grid_x) * (1.0-grid_y)
+ cvs[grid_ix + 1 + grid_iy * ct->lim.lam]
+ cvs[grid_ix2 + grid_iy * ct->lim.lam]
* (grid_x) * (1.0-grid_y)
+ cvs[grid_ix + (grid_iy+1) * ct->lim.lam]
+ cvs[grid_ix + grid_iy2 * ct->lim.lam]
* (1.0-grid_x) * (grid_y)
+ cvs[grid_ix + 1 + (grid_iy+1) * ct->lim.lam]
+ cvs[grid_ix2 + grid_iy2 * ct->lim.lam]
* (grid_x) * (grid_y);

/* nodata? */
Expand Down

0 comments on commit d64a550

Please sign in to comment.