summaryrefslogtreecommitdiff
path: root/sys/src/cmd/jpg
diff options
context:
space:
mode:
authorppatience0 <ppatience0@gmail.com>2013-07-20 16:42:33 -0400
committerppatience0 <ppatience0@gmail.com>2013-07-20 16:42:33 -0400
commit92b14e72b006f7226f17cad25f92224a96b2e6da (patch)
tree89d1efe6e529824a293aee18a987f37f544f5958 /sys/src/cmd/jpg
parent105155880c05e0edb112b2b03597c6fab5830429 (diff)
readtif, writetif: prevent buffer overflows in some corner cases
Diffstat (limited to 'sys/src/cmd/jpg')
-rw-r--r--sys/src/cmd/jpg/readtif.c4
-rw-r--r--sys/src/cmd/jpg/writetif.c6
2 files changed, 6 insertions, 4 deletions
diff --git a/sys/src/cmd/jpg/readtif.c b/sys/src/cmd/jpg/readtif.c
index f4c9b9daa..c082a6d19 100644
--- a/sys/src/cmd/jpg/readtif.c
+++ b/sys/src/cmd/jpg/readtif.c
@@ -804,6 +804,8 @@ getfax2d(Fax *f, uchar *data, ulong size, ulong *i, ulong *x,
f->st = -1;
return nil;
}
+ if(j+1 >= f->nl)
+ faxalloclines(f);
len = p->len;
code = p->code;
if(code == 1 && len == 3) {
@@ -852,8 +854,6 @@ getfax2d(Fax *f, uchar *data, ulong size, ulong *i, ulong *x,
f->l2[j++] = *x;
f->st ^= 1;
}
- if(j >= f->nl)
- faxalloclines(f);
a0 = *x;
}
memmove(f->l1, f->l2, j*sizeof *f->l1);
diff --git a/sys/src/cmd/jpg/writetif.c b/sys/src/cmd/jpg/writetif.c
index 2c02b5d44..983684e1a 100644
--- a/sys/src/cmd/jpg/writetif.c
+++ b/sys/src/cmd/jpg/writetif.c
@@ -933,6 +933,7 @@ pkbrow(Pkb *p, uchar *data, int ndata, long *buf)
{
int b, repl;
long i, j, k, n;
+ ulong m;
i = n = 0;
buf[n++] = i;
@@ -974,8 +975,9 @@ pkbrow(Pkb *p, uchar *data, int ndata, long *buf)
i++;
if(b == 0)
continue;
- if(p->n+1+(k<0?1:b) > p->ndata) {
- p->ndata *= 2;
+ m = 1 + (k < 0? 1: b);
+ if(p->n+m > p->ndata) {
+ p->ndata = (p->n + m) * 2;
p->data = realloc(p->data,
p->ndata*sizeof *p->data);
if(p->data == nil)