commit dc2a17b95cace1f220292cb6df97ee423d6be229 from: Xiao-Yong Jin via: David du Colombier <0intro@gmail.com> date: Tue Mar 27 13:03:12 2018 UTC libdraw: fix some memory leaks in font handling commit - a3ec102dc7fee3d4ecb32ade5ec9d7de4b9b4304 commit + dc2a17b95cace1f220292cb6df97ee423d6be229 blob - d3f2e69e56d628ce068cc1952dc6f446090d0956 blob + ed533b142de82fe88677e63a8e583e0cd5d5df39 --- src/libdraw/buildfont.c +++ src/libdraw/buildfont.c @@ -36,6 +36,7 @@ buildfont(Display *d, char *buf, char *name) if(fnt->name==0 || fnt->cache==0 || fnt->subf==0){ Err2: free(fnt->name); + free(fnt->namespec); free(fnt->cache); free(fnt->subf); free(fnt->sub); blob - 6830b9dcd4090cc7ada8470482c08888a4da64f8 blob + 16b2ef3e89c25f4a533634d5eb94ae04947ad7d3 --- src/libdraw/freesubfont.c +++ src/libdraw/freesubfont.c @@ -12,6 +12,7 @@ freesubfont(Subfont *f) return; uninstallsubfont(f); free(f->info); /* note: f->info must have been malloc'ed! */ + free(f->name); freeimage(f->bits); free(f); } blob - b97ea22d51b230c8b3e82431d75a582b4b56d28b blob + 2b729d7395cde1293013f2d4cd3bd5c771bb2607 --- src/libdraw/openfont.c +++ src/libdraw/openfont.c @@ -31,7 +31,7 @@ openfont1(Display *d, char *name) { Font *fnt; int fd, i, n, scale; - char *buf, *nambuf, *fname, *freename; + char *buf, *nambuf, *nambuf0, *fname, *freename; nambuf = 0; freename = nil; @@ -42,19 +42,21 @@ openfont1(Display *d, char *name) nambuf = smprint("#9/font/%s", fname+14); if(nambuf == nil) return 0; - nambuf = unsharp(nambuf); + *nambuf0 = unsharp(nambuf); + if(nambuf0 != nambuf) + free(nambuf); + nambuf = nambuf0; if(nambuf == nil) return 0; if((fd = open(nambuf, OREAD)) < 0){ free(nambuf); return 0; } - fname = nambuf; if(scale > 1) { - name = smprint("%d*%s", scale, fname); + name = smprint("%d*%s", scale, nambuf); freename = name; } else { - name = fname; + name = nambuf; } } if(fd >= 0) @@ -63,13 +65,17 @@ openfont1(Display *d, char *name) fd = _fontpipe(fname+10); n = 128*1024; } - if(fd < 0) + if(fd < 0){ + free(nambuf); + free(freename); return 0; + } buf = malloc(n+1); if(buf == 0){ close(fd); free(nambuf); + free(freename); return 0; } i = readn(fd, buf, n); @@ -77,6 +83,7 @@ openfont1(Display *d, char *name) if(i <= 0){ free(buf); free(nambuf); + free(freename); return 0; } buf[i] = 0; @@ -224,6 +231,7 @@ openfont(Display *d, char *name) if(!f) return nil; f->lodpi = f; + free(f->namespec); f->namespec = namespec; /* add to display list for when dpi changes */ blob - 2a7f489b420611ba2ad9106e23d59d7e51cdfe66 blob + 91a6861a90d6bfeb32bc720e3e85e0e69cbc6b94 --- src/libdraw/subfontcache.c +++ src/libdraw/subfontcache.c @@ -34,6 +34,7 @@ void uninstallsubfont(Subfont *subfont) { if(subfont == lastsubfont){ + free(lastname); lastname = 0; lastsubfont = 0; } blob - 9280244afe8d406077ff0882313daf0ef94a058e blob + 9d68570d3e4e36cb4e001ba05d94051fffefe5ba --- src/libdraw/subfontname.c +++ src/libdraw/subfontname.c @@ -47,6 +47,7 @@ subfontname(char *cfname, char *fname, int maxdepth) } return tmp2; } + free(tmp2); } /* try default */