summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2015-02-24 03:30:21 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2015-02-24 03:30:21 +0100
commit4235556c16d4eb0be17a4baac1801bfd92541e0a (patch)
tree58ced9cb6e705bffb823906f579fffe491cf9ac9
parent5f8cacd2de0afc51a4c01a358ed087847f284dda (diff)
downloadplan9front-4235556c16d4eb0be17a4baac1801bfd92541e0a.tar.xz
libdraw: check fontchar count in openmemsubfont() and readsubfont()
-rw-r--r--sys/src/libdraw/readsubfont.c24
-rw-r--r--sys/src/libmemdraw/openmemsubfont.c10
2 files changed, 20 insertions, 14 deletions
diff --git a/sys/src/libdraw/readsubfont.c b/sys/src/libdraw/readsubfont.c
index 5314df82d..52c191559 100644
--- a/sys/src/libdraw/readsubfont.c
+++ b/sys/src/libdraw/readsubfont.c
@@ -18,23 +18,22 @@ readsubfonti(Display*d, char *name, int fd, Image *ai, int dolock)
if(i == nil)
return nil;
}
+ p = nil;
if(read(fd, hdr, 3*12) != 3*12){
- if(ai == nil)
- freeimage(i);
- werrstr("rdsubfonfile: header read error: %r");
- return nil;
+ werrstr("readsubfont: header read error: %r");
+ goto Err;
}
n = atoi(hdr);
+ if(n <= 0 || n > 0x7fff){
+ werrstr("readsubfont: bad fontchar count %d", n);
+ goto Err;
+ }
p = malloc(6*(n+1));
if(p == nil)
goto Err;
if(read(fd, p, 6*(n+1)) != 6*(n+1)){
- werrstr("rdsubfonfile: fontchar read error: %r");
- Err:
- if(ai == nil)
- freeimage(i);
- free(p);
- return nil;
+ werrstr("readsubfont: fontchar read error: %r");
+ goto Err;
}
fc = malloc(sizeof(Fontchar)*(n+1));
if(fc == nil)
@@ -51,6 +50,11 @@ readsubfonti(Display*d, char *name, int fd, Image *ai, int dolock)
}
free(p);
return f;
+Err:
+ if(ai == nil)
+ freeimage(i);
+ free(p);
+ return nil;
}
Subfont*
diff --git a/sys/src/libmemdraw/openmemsubfont.c b/sys/src/libmemdraw/openmemsubfont.c
index ff12bcffd..03bb3edc5 100644
--- a/sys/src/libmemdraw/openmemsubfont.c
+++ b/sys/src/libmemdraw/openmemsubfont.c
@@ -25,6 +25,10 @@ openmemsubfont(char *name)
goto Err;
}
n = atoi(hdr);
+ if(n <= 0 || n > 0x7fff){
+ werrstr("openmemsubfont: bad fontchar count %d", n);
+ goto Err;
+ }
p = malloc(6*(n+1));
if(p == nil)
goto Err;
@@ -46,9 +50,7 @@ openmemsubfont(char *name)
return sf;
Err:
close(fd);
- if (i != nil)
- freememimage(i);
- if (p != nil)
- free(p);
+ free(p);
+ freememimage(i);
return nil;
}