From 5adb1693bd4e796320ed0fc215aaff82e614a6ad Mon Sep 17 00:00:00 2001 From: =?utf8?q?G=C3=BCnther=20Deschner?= Date: Fri, 23 Sep 2016 17:19:59 +0200 Subject: [PATCH] s4-torture: Add LZX compressed cabinet test Guenther Signed-off-by: Guenther Deschner Reviewed-by: Andreas Schneider Autobuild-User(master): Andreas Schneider Autobuild-Date(master): Fri Nov 25 00:17:02 CET 2016 on sn-devel-144 --- source4/torture/ndr/cabinet.c | 70 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/source4/torture/ndr/cabinet.c b/source4/torture/ndr/cabinet.c index e4829f7340e..25fe373c842 100644 --- a/source4/torture/ndr/cabinet.c +++ b/source4/torture/ndr/cabinet.c @@ -4240,12 +4240,82 @@ static bool cab_file_MSZIP_check(struct torture_context *tctx, return true; } +static const uint8_t cab_file_LZX_data[] = { + 0x4d, 0x53, 0x43, 0x46, 0x00, 0x00, 0x00, 0x00, + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x03, 0x12, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x49, + 0x09, 0x21, 0x20, 0x00, 0x62, 0x6c, 0x6f, 0x62, + 0x2d, 0x41, 0x2d, 0x33, 0x32, 0x37, 0x36, 0x38, + 0x00, 0xa2, 0x60, 0x8d, 0x04, 0x58, 0x00, 0x00, + 0x80, 0x5b, 0x80, 0x80, 0x8d, 0x08, 0x10, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, + 0x00, 0x07, 0x31, 0xd9, 0xfc, 0xdf, 0xf7, 0x20, + 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, + 0x00, 0xe5, 0x10, 0xdf, 0x67, 0xf7, 0x7d, 0x88, + 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, + 0x00, 0x1f, 0xc4, 0xdd, 0x7f, 0x7c, 0x9f, 0x3f, + 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, + 0xff +}; + +static bool cab_file_LZX_check(struct torture_context *tctx, + struct cab_file *r) +{ + DATA_BLOB blob; + + torture_assert_str_equal(tctx, r->cfheader.signature, "MSCF", "signature"); + torture_assert_int_equal(tctx, r->cfheader.reserved1, 0, "reserved1"); + torture_assert_int_equal(tctx, r->cfheader.cbCabinet, 0xA9, "cbCabinet"); + torture_assert_int_equal(tctx, r->cfheader.reserved2, 0, "reserved2"); + torture_assert_int_equal(tctx, r->cfheader.coffFiles, 44, "coffFiles"); + torture_assert_int_equal(tctx, r->cfheader.reserved3, 0, "reserved3"); + torture_assert_int_equal(tctx, r->cfheader.versionMinor, 3, "versionMinor"); + torture_assert_int_equal(tctx, r->cfheader.versionMajor, 1, "versionMajor"); + torture_assert_int_equal(tctx, r->cfheader.cFolders, 1, "cFolders"); + torture_assert_int_equal(tctx, r->cfheader.cFiles, 1, "cFiles"); + torture_assert_int_equal(tctx, r->cfheader.flags, 0, "flags"); + torture_assert_int_equal(tctx, r->cfheader.setID, 0, "setID"); + torture_assert_int_equal(tctx, r->cfheader.iCabinet, 0, "iCabinet"); + + torture_assert_int_equal(tctx, r->cffolders[0].coffCabStart, 0x49, "coffCabStart"); + torture_assert_int_equal(tctx, r->cffolders[0].cCFData, 1, "cCFData"); + torture_assert_int_equal(tctx, r->cffolders[0].typeCompress, 4611, "typeCompress"); + + torture_assert_int_equal(tctx, r->cffiles[0].cbFile, 0x8000, "cbFile"); + torture_assert_int_equal(tctx, r->cffiles[0].uoffFolderStart, 0, "uoffFolderStart"); + torture_assert_int_equal(tctx, r->cffiles[0].iFolder, 0, "iFolder"); + torture_assert_int_equal(tctx, r->cffiles[0].date.date, 0x4936, "date"); + torture_assert_int_equal(tctx, r->cffiles[0].time.time, 0x2109, "time"); + torture_assert_int_equal(tctx, r->cffiles[0].attribs, 0x0020, "attribs"); + torture_assert_str_equal(tctx, r->cffiles[0].szName, "blob-A-32768", "szName"); + + torture_assert_int_equal(tctx, r->cfdata[0].csum, 0x48D60A2, "csum"); + torture_assert_int_equal(tctx, r->cfdata[0].cbData, 0x58, "cbData"); + torture_assert_int_equal(tctx, r->cfdata[0].cbUncomp, 0x8000, "cbUncomp"); + + blob = data_blob(NULL, r->cfdata[0].cbUncomp); + memset(blob.data, 'A', blob.length); +#if 0 + /* once we have LZX compression support we can enable this test */ + torture_assert_data_blob_equal(tctx, r->cfdata[0].mszip_data.ab, blob, "ab"); +#endif + return true; +} + struct torture_suite *ndr_cabinet_suite(TALLOC_CTX *ctx) { struct torture_suite *suite = torture_suite_create(ctx, "cabinet"); torture_suite_add_ndr_pull_test(suite, cab_file, cab_file_plain_data, cab_file_plain_check); torture_suite_add_ndr_pull_test(suite, cab_file, cab_file_MSZIP_data, cab_file_MSZIP_check); + torture_suite_add_ndr_pull_test(suite, cab_file, cab_file_LZX_data, cab_file_LZX_check); torture_suite_add_ndr_pull_validate_test(suite, cab_file, cab_file_plain_data, cab_file_plain_check); -- 2.11.4.GIT