diff options
author | rsc <devnull@localhost> | 2005-05-12 16:55:14 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2005-05-12 16:55:14 +0000 |
commit | d4aef6a074bedb42ab9c400b5f998dd79bc57d00 (patch) | |
tree | 26bc94198a091c83646c80eaee45ab9667632cd5 /src/libdraw/font.c | |
parent | e354760aca2d985073b57cb2657493b399dcf603 (diff) | |
download | plan9port-d4aef6a074bedb42ab9c400b5f998dd79bc57d00.tar.gz plan9port-d4aef6a074bedb42ab9c400b5f998dd79bc57d00.tar.bz2 plan9port-d4aef6a074bedb42ab9c400b5f998dd79bc57d00.zip |
handle arbitrary length names in subfontname.
handle overflow in offset computation in font.c
Diffstat (limited to 'src/libdraw/font.c')
-rw-r--r-- | src/libdraw/font.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/libdraw/font.c b/src/libdraw/font.c index d7a93545..7aa649e8 100644 --- a/src/libdraw/font.c +++ b/src/libdraw/font.c @@ -177,7 +177,7 @@ int loadchar(Font *f, Rune r, Cacheinfo *c, int h, int noflush, char **subfontname) { int i, oi, wid, top, bottom; - Rune pic; + int pic; /* need >16 bits for adding offset below */ Fontchar *fi; Cachefont *cf; Cachesubf *subf, *of; @@ -270,10 +270,12 @@ loadchar(Font *f, Rune r, Cacheinfo *c, int h, int noflush, char **subfontname) Found2: subf->age = f->age; + /* possible overflow here, but works out okay */ pic += cf->offset; - if(pic-cf->min >= subf->f->n) + pic -= cf->min; + if(pic >= subf->f->n) goto TryPJW; - fi = &subf->f->info[pic - cf->min]; + fi = &subf->f->info[pic]; if(fi->width == 0) goto TryPJW; wid = (fi+1)->x - fi->x; |