Article View: gnu.utils.bug
Article #264tar 1.10 bug
From: Michael C. Adler
Date: Wed, 29 Jul 1992 20:00
Date: Wed, 29 Jul 1992 20:00
88 lines
3131 bytes
3131 bytes
The following diff file for create.c in tar 1.10 fixes two bugs:
1. Off by 1 error in deciding whether another extended header is needed
when creating a sparse file caused the last sparse table entry not
to be emitted.
2. Long link pathnames were read into too short a buffer causing overwrite.
*** create.c.orig Mon Jul 1 14:20:22 1991
--- create.c Wed Jul 29 15:38:31 1992
***************
*** 26,31 ****
--- 26,32 ----
*/
#include <sys/types.h>
#include <sys/stat.h>
+ #include <errno.h>
#include <stdio.h>
#ifndef V7
***************
*** 513,519 ****
/* sum += i;
if (sum < upperbound)
goto extend;*/
! if (index_offset+i < upperbound) {
index_offset += i;
exhdr->ext_hdr.isextended++;
goto extend;
--- 514,520 ----
/* sum += i;
if (sum < upperbound)
goto extend;*/
! if (index_offset+i <= upperbound) {
index_offset += i;
exhdr->ext_hdr.isextended++;
goto extend;
***************
*** 592,613 ****
case S_IFLNK: /* Symbolic link */
{
int size;
hstat.st_size = 0; /* Force 0 size on symlink */
header = start_header(p, &hstat);
if (header == NULL) goto badfile;
! size = readlink(p, header->header.linkname, NAMSIZ);
if (size < 0) goto badperror;
! if (size == NAMSIZ) {
! char buf[MAXPATHLEN];
- readlink(p,buf,MAXPATHLEN);
/* next_mangle(header->header.linkname); */
add_symlink_mangle(buf,p,header->header.linkname);
msg("symbolic link %s too long: mangling to
%s",p, header->header.linkname);
/* size=strlen(header->header.linkname); */
! } else
! header->header.linkname[size] = '\0';
header->header.linkflag = LF_SYMLINK;
finish_header(header); /* Nothing more to do to it */
}
--- 593,615 ----
case S_IFLNK: /* Symbolic link */
{
int size;
+ char buf[MAXPATHLEN+1];
hstat.st_size = 0; /* Force 0 size on symlink */
header = start_header(p, &hstat);
if (header == NULL) goto badfile;
! size = readlink(p, buf, MAXPATHLEN);
if (size < 0) goto badperror;
! buf[size] = '\0';
! if (size >= NAMSIZ) {
/* next_mangle(header->header.linkname); */
add_symlink_mangle(buf,p,header->header.linkname);
msg("symbolic link %s too long: mangling to
%s",p, header->header.linkname);
/* size=strlen(header->header.linkname); */
! } else {
! strncpy(header->header.linkname,buf,NAMSIZ);
! }
header->header.linkflag = LF_SYMLINK;
finish_header(header); /* Nothing more to do to it */
}
Technical Details
Message-ID:
<9207292000.AA05547@easynet.crl.dec.com>Path:
arc1-ca.pugleaf.net!sparky!uunet!darwin.sura.net!mips!swrinde!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!vssad.enet.DEc.COM!madlerShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!sparky!uunet!darwin.sura.net!mips!swrinde!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!vssad.enet.DEc.COM!madler From: madler@vssad.enet.DEc.COM (Michael C. Adler) Newsgroups: gnu.utils.bug Subject: tar 1.10 bug Message-ID: <9207292000.AA05547@easynet.crl.dec.com> Date: 29 Jul 92 20:00:19 GMT Sender: gnulists@ai.mit.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 88 Approved: bug-gnu-utils@prep.ai.mit.edu