URI: 
       tvac: fix segfault on DMSYMLINK or DMDEVICE - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 68e24566b6ba442b2bdba2dfc111c5a0d333cc42
   DIR parent 258cfab2fe5a816f23723f696c53ad6e61f6b501
  HTML Author: David du Colombier <0intro@gmail.com>
       Date:   Mon, 16 Jan 2012 17:06:41 -0500
       
       vac: fix segfault on DMSYMLINK or DMDEVICE
       
       Fix segfault when the first archived file is DMSYMLINK or DMDEVICE.
       Reinitialize the buffer to zero before calling readlink.
       
       R=rsc
       CC=plan9port.codebot
       http://codereview.appspot.com/5500097
       
       Diffstat:
         M src/cmd/vac/vac.c                   |      10 ++++++----
       
       1 file changed, 6 insertions(+), 4 deletions(-)
       ---
   DIR diff --git a/src/cmd/vac/vac.c b/src/cmd/vac/vac.c
       t@@ -501,12 +501,17 @@ vac(VacFile *fp, VacFile *diffp, char *name, Dir *d)
        
                if(vacfilesetdir(f, &vd) < 0)
                        warn("vacfilesetdir %s: %r", name);
       -        
       +
       +        bsize = fs->bsize;
       +        if(buf == nil)
       +                buf = vtmallocz(bsize);
       +
        #ifdef PLAN9PORT
                if(d->mode&(DMSOCKET|DMNAMEDPIPE)){
                        /* don't write anything */
                }
                else if(d->mode&DMSYMLINK){
       +                memset(buf, 0, sizeof buf);
                        n = readlink(name, buf, sizeof buf);
                        if(n > 0 && vacfilewrite(f, buf, n, 0) < 0){
                                warn("venti write %s: %r", name);
       t@@ -539,9 +544,6 @@ vac(VacFile *fp, VacFile *diffp, char *name, Dir *d)
                        }
                }else{
                        off = 0;
       -                bsize = fs->bsize;
       -                if(buf == nil)
       -                        buf = vtmallocz(bsize);
                        if(fdiff){
                                /*
                                 * Copy fdiff's contents into f by moving the score.