use File::KDBX::Constants qw(:version :time);
use File::KDBX::Error;
use File::KDBX::Safe;
-use File::KDBX::Util qw(:class :text assert_64bit gunzip erase_scoped);
+use File::KDBX::Util qw(:class :int :text gunzip erase_scoped);
use Scalar::Util qw(looks_like_number);
-use Time::Piece;
+use Time::Piece 1.33;
use XML::LibXML::Reader;
use boolean;
use namespace::clean;
my $self = shift;
my $kdbx = $self->kdbx;
- my $entries = $kdbx->all_entries(history => 1);
my $pool = $kdbx->binaries;
- for my $entry (@$entries) {
+ my $entries = $kdbx->entries(history => 1);
+ while (my $entry = $entries->next) {
while (my ($key, $binary) = each %{$entry->binaries}) {
my $ref = $binary->{ref} // next;
next if defined $binary->{value};
my $decoded = eval { _decode_primitive($content, $type) };
if (my $err = $@) {
ref $err and $err->details(node => $reader->nodePath, line => $reader->lineNumber);
- throw $err
+ throw $err;
}
return $decoded;
throw 'Failed to parse binary datetime', text => $_, error => $err;
}
throw $@ if $@;
- assert_64bit;
$binary .= \0 x (8 - length($binary)) if length($binary) < 8;
- my ($seconds_since_ad1) = unpack('Q<', $binary);
+ my ($seconds_since_ad1) = unpack_Ql($binary);
my $epoch = $seconds_since_ad1 - TIME_SECONDS_AD1_TO_UNIX_EPOCH;
- return Time::Piece->new($epoch);
+ return gmtime($epoch);
}
-
my $dt = eval { Time::Piece->strptime($_, '%Y-%m-%dT%H:%M:%SZ') };
if (my $err = $@) {
throw 'Failed to parse datetime', text => $_, error => $err;