Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 Aug 2004 13:53:53 -0700
From:      Sean McNeil <sean@mcneil.com>
To:        Giorgos Keramidas <keramida@ceid.upatras.gr>
Cc:        current@freebsd.org
Subject:   Re: bsdtar core dumps
Message-ID:  <1093380833.73407.1.camel@server.mcneil.com>
In-Reply-To: <20040824204917.GA3348@gothmog.gr>
References:  <1092777586.92327.9.camel@server.mcneil.com> <1093369220.10362.6.camel@server.mcneil.com> <20040824200225.V517@beagle.kn.op.dlr.de> <1093371600.10464.23.camel@server.mcneil.com> <20040824205417.L517@beagle.kn.op.dlr.de> <1093377802.43728.11.camel@server.mcneil.com> <20040824204917.GA3348@gothmog.gr>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 2004-08-24 at 13:49, Giorgos Keramidas wrote:
> Hi Sean,
> 
> Does the patch below also solve the problems with tar you were
> experiencing?

Yes, the libarchive patch solves my core dump with bsdtar and the
vfprintf.c is for correctness.

> On 2004-08-24 13:03, Sean McNeil <sean@mcneil.com> wrote:
> > *** lib/libarchive/archive_string_sprintf.c.orig        Fri Aug 13
> > 20:45:45 2004--- lib/libarchive/archive_string_sprintf.c     Tue Aug 24
> > 12:58:24 2004
> > *************** __archive_string_vsprintf(struct archive
> > *** 47,65 ****
> >       va_list ap)
> >   {
> >         size_t l;
> > 
> >         if (fmt == NULL) {
> >                 as->s[0] = 0;
> >                 return;
> >         }
> > 
> >         l = vsnprintf(as->s, as->buffer_length, fmt, ap);
> >         /* If output is bigger than the buffer, resize and try again. */
> >         if (l+1 >= as->buffer_length) {
> >                 __archive_string_ensure(as, l + 1);
> > !               l = vsnprintf(as->s, as->buffer_length, fmt, ap);
> >         }
> >         as->length = l;
> >   }
> > 
> >   /*
> > --- 47,68 ----
> >       va_list ap)
> >   {
> >         size_t l;
> > +       va_list ap1;
> > 
> >         if (fmt == NULL) {
> >                 as->s[0] = 0;
> >                 return;
> >         }
> > 
> > +       va_copy(ap1,ap);
> >         l = vsnprintf(as->s, as->buffer_length, fmt, ap);
> >         /* If output is bigger than the buffer, resize and try again. */
> >         if (l+1 >= as->buffer_length) {
> >                 __archive_string_ensure(as, l + 1);
> > !               l = vsnprintf(as->s, as->buffer_length, fmt, ap1);
> >         }
> >         as->length = l;
> > +       va_end(ap1);
> >   }
> > 
> >   /*
> > 
> > *** lib/libc/stdio/vfprintf.c.orig      Mon Aug 23 20:35:43 2004
> > --- lib/libc/stdio/vfprintf.c   Tue Aug 24 13:01:45 2004
> > *************** error:
> > *** 1237,1242 ****
> > --- 1237,1243 ----
> >         if (dtoaresult != NULL)
> >                 freedtoa(dtoaresult);
> >   #endif
> > +       va_end(orgap);
> >         if (convbuf != NULL)
> >                 free(convbuf);
> >         if (__sferror(fp))
> > 
> 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1093380833.73407.1.camel>