sixel_wipe: fix off-by-one in bounds computations #1628

pull/1637/head
nick black 3 years ago
parent 05f5a479c1
commit 3a29fb7991
No known key found for this signature in database
GPG Key ID: 5F43400C21CBFACC

@ -801,7 +801,7 @@ wipe_color(sixelmap* smap, int color, int sband, int eband,
// we're going to repurpose starty as "starting row of this band", so keep it // we're going to repurpose starty as "starting row of this band", so keep it
// around as originy for auxvecidx computations // around as originy for auxvecidx computations
int originy = starty; int originy = starty;
for(int b = sband ; b <= eband && b * 6 < endy ; ++b){ for(int b = sband ; b <= eband && b * 6 <= endy ; ++b){
const int boff = coff + b * dimx; // offset in data where band starts const int boff = coff + b * dimx; // offset in data where band starts
unsigned char mask = 63; unsigned char mask = 63;
for(int i = 0 ; i < 6 ; ++i){ for(int i = 0 ; i < 6 ; ++i){
@ -855,12 +855,12 @@ int sixel_wipe(sprixel* s, int ycell, int xcell){
const int startx = xcell * s->cellpxx; const int startx = xcell * s->cellpxx;
const int starty = ycell * s->cellpxy; const int starty = ycell * s->cellpxy;
int endx = ((xcell + 1) * s->cellpxx) - 1; int endx = ((xcell + 1) * s->cellpxx) - 1;
if(endx > s->pixx){ if(endx >= s->pixx){
endx = s->pixx; endx = s->pixx - 1;
} }
int endy = ((ycell + 1) * s->cellpxy) - 1; int endy = ((ycell + 1) * s->cellpxy) - 1;
if(endy > s->pixy){ if(endy >= s->pixy){
endy = s->pixy; endy = s->pixy - 1;
} }
const int startband = starty / 6; const int startband = starty / 6;
const int endband = endy / 6; const int endband = endy / 6;

@ -25,7 +25,7 @@ void sprixel_debug(FILE* out, const sprixel* s){
if(s->n->tam[idx].auxvector){ if(s->n->tam[idx].auxvector){
fprintf(out, "%03d] ", idx); fprintf(out, "%03d] ", idx);
for(int p = 0 ; p < s->cellpxx * s->cellpxy ; ++p){ for(int p = 0 ; p < s->cellpxx * s->cellpxy ; ++p){
fprintf(out, "%02x ", s->n->tam[idx].auxvector[idx]); fprintf(out, "%02x ", s->n->tam[idx].auxvector[p]);
} }
fprintf(out, "\n"); fprintf(out, "\n");
}else{ }else{

Loading…
Cancel
Save