mirror of
https://github.com/qpdf/qpdf.git
synced 2024-06-17 01:12:21 +00:00
a2c4a2b12a
Now the tests intermix old and new syntax, ensuring both are exercised.
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 --owner-password=pass --bits=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);
|