diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-10-08 19:58:55 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-10-08 19:58:55 +0200 |
commit | bc18faccde776934bb314549feb8e5ba91fda053 (patch) | |
tree | a7dff7b6f2d9a4d4052bd9163ef2eef55180b256 /sys/src/cmd/mothra/libpanel/textwin.c | |
parent | 1c1bef69aae8a6d6758a18abc14f45c674487ece (diff) |
libpanel: fix memory corruption bug in plinitentry(), add pl_erealloc()
Diffstat (limited to 'sys/src/cmd/mothra/libpanel/textwin.c')
-rw-r--r-- | sys/src/cmd/mothra/libpanel/textwin.c | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/sys/src/cmd/mothra/libpanel/textwin.c b/sys/src/cmd/mothra/libpanel/textwin.c index 94479f0c8..94ec29812 100644 --- a/sys/src/cmd/mothra/libpanel/textwin.c +++ b/sys/src/cmd/mothra/libpanel/textwin.c @@ -66,11 +66,7 @@ void tw_storeloc(Textwin *t, int l, Point p){ int nloc; if(l>=t->eloc-t->loc){ nloc=l+SLACK; - t->loc=realloc(t->loc, nloc*sizeof(Point)); - if(t->loc==0){ - fprint(2, "No mem in tw_storeloc\n"); - exits("no mem"); - } + t->loc=pl_erealloc(t->loc, nloc*sizeof(Point)); t->eloc=t->loc+nloc; } t->loc[l]=p; @@ -390,16 +386,13 @@ void tw_relocate(Textwin *t, int first, int last, Point dst){ */ void twreplace(Textwin *t, int r0, int r1, Rune *ins, int nins){ int olen, nlen, tlen, dtop; - Rune *ntext; olen=t->etext-t->text; nlen=olen+nins-(r1-r0); tlen=t->eslack-t->text; if(nlen>tlen){ tlen=nlen+SLACK; - if((ntext=realloc(t->text, tlen*sizeof(Rune)))==0) - return; - t->text=ntext; - t->eslack=ntext+tlen; + t->text=pl_erealloc(t->text, tlen*sizeof(Rune)); + t->eslack=t->text+tlen; } if(olen!=nlen) memmove(t->text+r0+nins, t->text+r1, (olen-r1)*sizeof(Rune)); |