bug-tar
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug-tar] getline() differences FreeBSD / GNU libc


From: noordsij
Subject: [Bug-tar] getline() differences FreeBSD / GNU libc
Date: Thu, 21 Jan 2010 15:37:21 +0200
User-agent: RoundCube Webmail/0.2.1

Dear GNU tar maintainer(s) / fBSD gtar port maintainer(s),

While trying to use gtar (version 1.22) for backup purposes on FreeBSD 8.0,
because of the listed-incremental option and to maintain compatibility with
non-BSD systems, gtar kept segfaulting for my set of options, specifically
when using --listed-incremental.

Compiling with debug symbols pointed to

  incremen.c, line 1532
  if (0 < getline (&buf, &bufsize, listed_incremental_stream))

The problem appears to be a difference in getline() behaviour in the fBSD
and GNU libc.

fBSD: The
     caller may provide a pointer to a malloc buffer for the line in
*linep,
     and the capacity of that buffer in *linecapp; if *linecapp is 0, then
     *linep is treated as NULL.

GNU:  If  *lineptr  is  NULL,  then  getline() will allocate a buffer for
storing the line, which
       should be freed by the user program.  (The value in *n is ignored.)


So fBSD libc looks at the value of linecapp, whereas GNU libc looks at the
value of lineptr, to determine whether to allocate a new buffer or use a
provided one. In the tar source, linecapp (bufsize) is not initialized,
lineptr (buf) is.

The fix is to simply initialize bufsize to 0 as well, to make (line
1232-1233):

  char *buf = 0;
  size_t bufsize = 0;


This completely fixed the segfaults for me.

Thank you,
Dennis









reply via email to

[Prev in Thread] Current Thread [Next in Thread]