mirror of
https://github.com/qpdf/qpdf.git
synced 2024-09-21 17:49:08 +00:00
4ee393d1fa
By combining --linearize with --compress-streams=n, we ensure that no new compressed data will appear in linearized output, which makes the output independent of zlib's output. There are other tests to ensure that linearization works correctly with compression. This commit involves changing some test outputs and test code as well just updating test suites.
90 lines
3.2 KiB
Perl
90 lines
3.2 KiB
Perl
#!/usr/bin/env perl
|
|
require 5.008;
|
|
use warnings;
|
|
use strict;
|
|
|
|
unshift(@INC, '.');
|
|
require qpdf_test_helpers;
|
|
|
|
chdir("qpdf") or die "chdir testdir failed: $!\n";
|
|
|
|
require TestDriver;
|
|
|
|
cleanup();
|
|
|
|
my $td = new TestDriver('encryption-parameters');
|
|
|
|
my $n_tests = 13;
|
|
|
|
# Encrypt files whose /ID strings are other than 32 bytes long (bug
|
|
# 2991412). Also linearize these files, which was reported in a
|
|
# separate bug by email.
|
|
foreach my $file (qw(short-id long-id))
|
|
{
|
|
$td->runtest("encrypt $file.pdf",
|
|
{$td->COMMAND =>
|
|
"qpdf --allow-weak-crypto".
|
|
" --encrypt '' pass 40 -- $file.pdf a.pdf"},
|
|
{$td->STRING => "",
|
|
$td->EXIT_STATUS => 0},
|
|
$td->NORMALIZE_NEWLINES);
|
|
|
|
$td->runtest("check $file.pdf",
|
|
{$td->COMMAND => "qpdf --check --show-encryption-key a.pdf"},
|
|
{$td->FILE => "$file-check.out",
|
|
$td->EXIT_STATUS => 0},
|
|
$td->NORMALIZE_NEWLINES);
|
|
|
|
$td->runtest("linearize $file.pdf",
|
|
{$td->COMMAND =>
|
|
"qpdf --deterministic-id --compress-streams=n" .
|
|
" --linearize $file.pdf a.pdf"},
|
|
{$td->STRING => "",
|
|
$td->EXIT_STATUS => 0},
|
|
$td->NORMALIZE_NEWLINES);
|
|
|
|
$td->runtest("check output",
|
|
{$td->FILE => "a.pdf"},
|
|
{$td->FILE => "$file-linearized.pdf"});
|
|
|
|
$td->runtest("check $file.pdf",
|
|
{$td->COMMAND => "qpdf --check a.pdf"},
|
|
{$td->FILE => "$file-linearized-check.out",
|
|
$td->EXIT_STATUS => 0},
|
|
$td->NORMALIZE_NEWLINES);
|
|
}
|
|
|
|
# A user provided a file that was missing /ID in its trailer even
|
|
# though it is encrypted and also has a space instead of a newline
|
|
# after its xref keyword. This file has those same properties.
|
|
$td->runtest("check broken file",
|
|
{$td->COMMAND => "qpdf --check invalid-id-xref.pdf"},
|
|
{$td->FILE => "invalid-id-xref.out", $td->EXIT_STATUS => 3},
|
|
$td->NORMALIZE_NEWLINES);
|
|
|
|
# A file was emailed privately with issue 96. short-O-U.pdf was
|
|
# created by copying encryption parameters from that file. It exhibits
|
|
# the same behavior as the original file.
|
|
$td->runtest("short /O or /U",
|
|
{$td->COMMAND =>
|
|
"qpdf --password=19723102477 --check short-O-U.pdf"},
|
|
{$td->FILE => "short-O-U.out",
|
|
$td->EXIT_STATUS => 0},
|
|
$td->NORMALIZE_NEWLINES);
|
|
|
|
# A file was sent to me privately as part of issue 212. This file was
|
|
# encrypted and had /R=3 and /V=1 and was using a 40-bit key. qpdf was
|
|
# failing to work properly on files with /R=3 and 40-bit keys. The
|
|
# test file is not this private file, but the encryption parameters
|
|
# were copied from it. Like the bug file, qpdf < 8.1 can't decrypt it.
|
|
$td->runtest("/R 3 with 40-bit key",
|
|
{$td->COMMAND =>
|
|
"qpdf --password=623 --check --show-encryption-key" .
|
|
" encrypted-40-bit-R3.pdf"},
|
|
{$td->FILE => "encrypted-40-bit-R3.out",
|
|
$td->EXIT_STATUS => 0},
|
|
$td->NORMALIZE_NEWLINES);
|
|
|
|
cleanup();
|
|
$td->report($n_tests);
|