Browse Source

* apt-inst/contrib/extracttar.cc:

- let apt-utils work with encoded tar headers if uid/gid are large.
    Thanks to Nobuhiro Hayashi for the patch! (Closes: #330162)
tags/debian/0.8.11
David Kalnischkies 10 years ago
parent
commit
f688d1d3c9
6 changed files with 41 additions and 5 deletions
  1. +8
    -4
      apt-inst/contrib/extracttar.cc
  2. +17
    -0
      apt-pkg/contrib/strutl.cc
  3. +1
    -0
      apt-pkg/contrib/strutl.h
  4. +4
    -1
      debian/changelog
  5. BIN
      test/integration/deb-bug-330162-encoded-tar-header.deb
  6. +11
    -0
      test/integration/test-bug-330162-encoded-tar-header

+ 8
- 4
apt-inst/contrib/extracttar.cc View File

@@ -195,10 +195,14 @@ bool ExtractTar::Go(pkgDirStream &Stream)
// Decode all of the fields
pkgDirStream::Item Itm;
if (StrToNum(Tar->Mode,Itm.Mode,sizeof(Tar->Mode),8) == false ||
StrToNum(Tar->UserID,Itm.UID,sizeof(Tar->UserID),8) == false ||
StrToNum(Tar->GroupID,Itm.GID,sizeof(Tar->GroupID),8) == false ||
StrToNum(Tar->Size,Itm.Size,sizeof(Tar->Size),8) == false ||
StrToNum(Tar->MTime,Itm.MTime,sizeof(Tar->MTime),8) == false ||
(Base256ToNum(Tar->UserID,Itm.UID,8) == false &&
StrToNum(Tar->UserID,Itm.UID,sizeof(Tar->UserID),8) == false) ||
(Base256ToNum(Tar->GroupID,Itm.GID,8) == false &&
StrToNum(Tar->GroupID,Itm.GID,sizeof(Tar->GroupID),8) == false) ||
(Base256ToNum(Tar->Size,Itm.Size,12) == false &&
StrToNum(Tar->Size,Itm.Size,sizeof(Tar->Size),8) == false) ||
(Base256ToNum(Tar->MTime,Itm.MTime,12) == false &&
StrToNum(Tar->MTime,Itm.MTime,sizeof(Tar->MTime),8) == false) ||
StrToNum(Tar->Major,Itm.Major,sizeof(Tar->Major),8) == false ||
StrToNum(Tar->Minor,Itm.Minor,sizeof(Tar->Minor),8) == false)
return _error->Error(_("Corrupted archive"));


+ 17
- 0
apt-pkg/contrib/strutl.cc View File

@@ -968,6 +968,23 @@ bool StrToNum(const char *Str,unsigned long &Res,unsigned Len,unsigned Base)
return true;
}
/*}}}*/
// Base256ToNum - Convert a fixed length binary to a number /*{{{*/
// ---------------------------------------------------------------------
/* This is used in decoding the 256bit encoded fixed length fields in
tar files */
bool Base256ToNum(const char *Str,unsigned long &Res,unsigned int Len)
{
if ((Str[0] & 0x80) == 0)
return false;
else
{
Res = Str[0] & 0x7F;
for(unsigned int i = 1; i < Len; ++i)
Res = (Res<<8) + Str[i];
return true;
}
}
/*}}}*/
// HexDigit - Convert a hex character into an integer /*{{{*/
// ---------------------------------------------------------------------
/* Helper for Hex2Num */


+ 1
- 0
apt-pkg/contrib/strutl.h View File

@@ -52,6 +52,7 @@ string LookupTag(const string &Message,const char *Tag,const char *Default = 0);
int StringToBool(const string &Text,int Default = -1);
bool ReadMessages(int Fd, vector<string> &List);
bool StrToNum(const char *Str,unsigned long &Res,unsigned Len,unsigned Base = 0);
bool Base256ToNum(const char *Str,unsigned long &Res,unsigned int Len);
bool Hex2Num(const string &Str,unsigned char *Num,unsigned int Length);
bool TokSplitString(char Tok,char *Input,char **List,
unsigned long ListMax);


+ 4
- 1
debian/changelog View File

@@ -29,8 +29,11 @@ apt (0.8.11+wheezy) unstable; urgency=low
Reinholdtsen for report and patch! (Closes: #607803)
* doc/apt.conf.5.xml:
- fix multipl{y,e} spelling error reported by Jakub Wilk (Closes: #607636)
* apt-inst/contrib/extracttar.cc:
- let apt-utils work with encoded tar headers if uid/gid are large.
Thanks to Nobuhiro Hayashi for the patch! (Closes: #330162)

-- David Kalnischkies <kalnischkies@gmail.com> Wed, 12 Jan 2011 23:59:38 +0100
-- David Kalnischkies <kalnischkies@gmail.com> Thu, 13 Jan 2011 00:25:32 +0100

apt (0.8.10) unstable; urgency=low



BIN
test/integration/deb-bug-330162-encoded-tar-header.deb View File


+ 11
- 0
test/integration/test-bug-330162-encoded-tar-header View File

@@ -0,0 +1,11 @@
#!/bin/sh
set -e

local TESTDIR=$(readlink -f $(dirname $0))
. $TESTDIR/framework
setupenvironment
configarchitecture "i386"

msgtest 'Test apt-ftparchive with encoded tar header package'
cp $TESTDIR/deb-bug-330162-encoded-tar-header.deb aptarchive/
test -z "$(aptftparchive packages aptarchive/ 2>&1 | grep 'E:')" && msgpass || msgfail

Loading…
Cancel
Save