[PATCH] Because of the is-binary heuristic in
decrypt_file_if_needed, slurp still needs to decompress sometimes
Alex Vandiver
alexmv at bestpractical.com
Tue Apr 27 05:29:37 UTC 2010
Unless we decompress files when slurping in decrypt_file_if_needed,
our binary check get a false positive, and we try to decrypt content
which is merely compressed, not encrypted.
---
lib/Brackup/Decrypt.pm | 2 +-
lib/Brackup/Util.pm | 11 +++++++++--
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/lib/Brackup/Decrypt.pm b/lib/Brackup/Decrypt.pm
index 3f45bcf..8bfa614 100644
--- a/lib/Brackup/Decrypt.pm
+++ b/lib/Brackup/Decrypt.pm
@@ -38,7 +38,7 @@ sub write_to_file {
sub decrypt_file_if_needed {
my ($filename) = @_;
- my $meta = slurp($filename);
+ my $meta = slurp($filename, decompress => 1);
if ($meta =~ /[\x00-\x08]/) { # silly is-binary heuristic
my $new_file = decrypt_file($filename,no_batch => 1);
if (defined $new_file) {
diff --git a/lib/Brackup/Util.pm b/lib/Brackup/Util.pm
index 98a86e0..9e864dd 100644
--- a/lib/Brackup/Util.pm
+++ b/lib/Brackup/Util.pm
@@ -51,8 +51,15 @@ sub tempdir {
sub slurp {
my $file = shift;
- sysopen(my $fh, $file, O_RDONLY) or die "Failed to open $file: $!";
- return do { local $/; <$fh>; }
+ my %opts = @_;
+ my $fh;
+ if ($opts{decompress} and eval { require IO::Uncompress::AnyUncompress }) {
+ $fh = IO::Uncompress::AnyUncompress->new($file)
+ or die "Failed to open file $file: $IO::Uncompress::AnyUncompress::AnyUncompressError";
+ } else {
+ sysopen($fh, $file, O_RDONLY) or die "Failed to open $file: $!";
+ }
+ return do { local $/; <$fh>; };
}
sub valid_params {
--
1.7.0.5
More information about the brackup
mailing list