bsdtar core dumps
Sean McNeil
sean at mcneil.com
Tue Aug 24 13:53:58 PDT 2004
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 at 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))
> >
>
More information about the freebsd-current
mailing list