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 XML::LibXML::Reader;
sub _read_xml_custom_icons {
my $self = shift;
- return $self->_read_xml_element(
+ return $self->_read_xml_element([],
Icon => sub {
my $self = shift;
- my $icon = $self->_read_xml_element(
+ $self->_read_xml_element(
UUID => 'uuid',
Data => 'binary',
Name => 'text', # KDBX4.1
LastModificationTime => 'datetime', # KDBX4.1
);
- $icon->{uuid} => $icon;
},
);
}
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};
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);
}