summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rwxr-xr-xtest/integration/test-github-111-invalid-armember58
-rw-r--r--test/interactive-helper/createdeb-cve-2020-27350.cc42
2 files changed, 44 insertions, 56 deletions
diff --git a/test/integration/test-github-111-invalid-armember b/test/integration/test-github-111-invalid-armember
index 1e095eef3..e4b897ec3 100755
--- a/test/integration/test-github-111-invalid-armember
+++ b/test/integration/test-github-111-invalid-armember
@@ -25,62 +25,8 @@ printf '!<arch>\0120123456789ABCDE.A123456789A.01234.01234.0123456.012345678.0.'
testsuccessequal "E: Invalid archive member header" ${APTTESTHELPERSBINDIR}/testdeb test.deb
-# unused source code for generating $tar below
-maketar() {
- cat > maketar.c << EOF
- #include <stdio.h>
- #include <string.h>
- struct tar {
- char Name[100];
- char Mode[8];
- char UserID[8];
- char GroupID[8];
- char Size[12];
- char MTime[12];
- char Checksum[8];
- char LinkFlag;
- char LinkName[100];
- char MagicNumber[8];
- char UserName[32];
- char GroupName[32];
- char Major[8];
- char Minor[8];
- };
-
- int main(void)
- {
- union {
- struct tar t;
- char buf[512];
- } t;
- for (int i = 0; i < sizeof(t.buf); i++)
- t.buf[i] = '7';
- memcpy(t.t.Name, "unterminatedName", 16);
- memcpy(t.t.UserName, "userName", 8);
- memcpy(t.t.GroupName, "thisIsAGroupNamethisIsAGroupName", 32);
- t.t.LinkFlag = 'X'; // I AM BROKEN
- memcpy(t.t.Size, "000000000000", sizeof(t.t.Size));
- memset(t.t.Checksum,' ',sizeof(t.t.Checksum));
-
- unsigned long sum = 0;
- for (int i = 0; i < sizeof(t.buf); i++)
- sum += t.buf[i];
-
- int written = sprintf(t.t.Checksum, "%lo", sum);
- for (int i = written; i < sizeof(t.t.Checksum); i++)
- t.t.Checksum[i] = ' ';
- fwrite(t.buf, sizeof(t.buf), 1, stdout);
- }
-EOF
-
- gcc maketar.c -o maketar -Wall
- ./maketar
-}
-
-
-#
-tar="unterminatedName77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777700000000000077777777777773544 X777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777userName777777777777777777777777thisIsAGroupNamethisIsAGroupName777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777"
-printf '%s' "$tar" | gzip > control.tar.gz
+${APTTESTHELPERSBINDIR}/createdeb-cve-2020-27350 github-111 control.tar
+gzip control.tar
cp control.tar.gz data.tar.gz
touch debian-binary
rm test.deb
diff --git a/test/interactive-helper/createdeb-cve-2020-27350.cc b/test/interactive-helper/createdeb-cve-2020-27350.cc
index 8b9619469..a290c0ac2 100644
--- a/test/interactive-helper/createdeb-cve-2020-27350.cc
+++ b/test/interactive-helper/createdeb-cve-2020-27350.cc
@@ -203,6 +203,12 @@ static void createdeb_bigtarfilelength(const int fd, int flag, unsigned long lon
memcpy(t.t.Name, "control\0 ", 16);
memcpy(t.t.UserName, "userName", 8);
memcpy(t.t.GroupName, "thisIsAGroupNamethisIsAGroupName", 32);
+ memcpy(t.t.UserID, "0", 2);
+ memcpy(t.t.GroupID, "0", 2);
+ memcpy(t.t.MTime, "0", 2);
+ memcpy(t.t.MagicNumber, "0", 2);
+ memcpy(t.t.Major, "0", 2);
+ memcpy(t.t.Minor, "0", 2);
t.t.LinkFlag = flag;
base256_encode(t.t.Size, size, sizeof(t.t.Size));
memset(t.t.Checksum, ' ', sizeof(t.t.Checksum));
@@ -218,6 +224,38 @@ static void createdeb_bigtarfilelength(const int fd, int flag, unsigned long lon
write_chk(fd, t.buf, sizeof(t.buf));
}
+static void createtar(const int fd)
+{
+ union
+ {
+ struct TarHeader t;
+ char buf[512];
+ } t;
+ for (int i = 0; i < sizeof(t.buf); i++)
+ t.buf[i] = '7';
+ memcpy(t.t.Name, "unterminatedName", 16);
+ memcpy(t.t.UserName, "userName", 8);
+ memcpy(t.t.GroupName, "thisIsAGroupNamethisIsAGroupName", 32);
+ memcpy(t.t.UserID, "0", 2);
+ memcpy(t.t.GroupID, "0", 2);
+ memcpy(t.t.MTime, "0", 2);
+ memcpy(t.t.MagicNumber, "0", 2);
+ memcpy(t.t.Major, "0", 2);
+ memcpy(t.t.Minor, "0", 2);
+ t.t.LinkFlag = 'X'; // I AM BROKEN
+ memcpy(t.t.Size, "000000000000", sizeof(t.t.Size));
+ memset(t.t.Checksum, ' ', sizeof(t.t.Checksum));
+
+ unsigned long sum = 0;
+ for (int i = 0; i < sizeof(t.buf); i++)
+ sum += t.buf[i];
+
+ int written = sprintf(t.t.Checksum, "%lo", sum);
+ for (int i = written; i < sizeof(t.t.Checksum); i++)
+ t.t.Checksum[i] = ' ';
+ write_chk(fd, t.buf, sizeof(t.buf));
+}
+
static void createdeb_test(const int fd)
{
// Magic number
@@ -311,6 +349,10 @@ int main(int argc, char *argv[])
{
createdeb_bigtarfilelength(fd, '0', 128llu * 1024 * 1024 * 1024 + 1);
}
+ else if (strcmp(mode, "github-111") == 0)
+ {
+ createtar(fd);
+ }
else if (strcmp(mode, "test") == 0)
{
createdeb_test(fd);