]> Dogcows Code - chaz/p5-File-KDBX/commitdiff
Prereq Time::Piece 1.33 to fix KDBX4 datetimes
authorCharles McGarvey <ccm@cpan.org>
Wed, 11 May 2022 21:51:03 +0000 (15:51 -0600)
committerCharles McGarvey <ccm@cpan.org>
Wed, 11 May 2022 23:16:13 +0000 (17:16 -0600)
Time::Piece 1.33 supports passing objects to gmtime which is necessary
on 32-bit platforms where arguments might be bigints.

Changes
lib/File/KDBX.pm
lib/File/KDBX/Dumper/XML.pm
lib/File/KDBX/Entry.pm
lib/File/KDBX/Group.pm
lib/File/KDBX/Loader/KDB.pm
lib/File/KDBX/Loader/XML.pm
lib/File/KDBX/Util.pm
t/kdbx4.t

diff --git a/Changes b/Changes
index 540ae6d291501504f156f8c1e2bb40d712102fc3..76956a5433843546d7d27e63247f4e23f3258bd0 100644 (file)
--- a/Changes
+++ b/Changes
@@ -2,6 +2,8 @@ Revision history for File-KDBX.
 
 {{$NEXT}}
 
 
 {{$NEXT}}
 
+  * Fix parsing KDBX4 datetimes on 32-bit perls.
+
 0.902     2022-05-03 19:18:06-0600
 
   * Added support for 32-bit perls.
 0.902     2022-05-03 19:18:06-0600
 
   * Added support for 32-bit perls.
index 5d188fb9793b628417bbbc586ceabf9a5c875235..8730266ab66e792bc3f6aefea6bc509567d0a7bc 100644 (file)
@@ -16,7 +16,7 @@ use Hash::Util::FieldHash qw(fieldhashes);
 use List::Util qw(any first);
 use Ref::Util qw(is_ref is_arrayref is_plain_hashref);
 use Scalar::Util qw(blessed);
 use List::Util qw(any first);
 use Ref::Util qw(is_ref is_arrayref is_plain_hashref);
 use Scalar::Util qw(blessed);
-use Time::Piece;
+use Time::Piece 1.33;
 use boolean;
 use namespace::clean;
 
 use boolean;
 use namespace::clean;
 
index 345439e60c46057b4a07d9a7e5a774e4e8442dd9..c7ff83007b683a6cf8baf32729bd49352b1ba2e0 100644 (file)
@@ -12,7 +12,7 @@ use File::KDBX::Error;
 use File::KDBX::Util qw(:class :int erase_scoped gzip snakify);
 use IO::Handle;
 use Scalar::Util qw(blessed isdual looks_like_number);
 use File::KDBX::Util qw(:class :int erase_scoped gzip snakify);
 use IO::Handle;
 use Scalar::Util qw(blessed isdual looks_like_number);
-use Time::Piece;
+use Time::Piece 1.33;
 use XML::LibXML;
 use boolean;
 use namespace::clean;
 use XML::LibXML;
 use boolean;
 use namespace::clean;
index be44ae79ac96b419de1529a0d6779d27f8712356..2876b293257ec9e8c4f9e97edc057a4fc437d72e 100644 (file)
@@ -15,7 +15,7 @@ use List::Util qw(first sum0);
 use Ref::Util qw(is_coderef is_hashref is_plain_hashref);
 use Scalar::Util qw(blessed looks_like_number);
 use Storable qw(dclone);
 use Ref::Util qw(is_coderef is_hashref is_plain_hashref);
 use Scalar::Util qw(blessed looks_like_number);
 use Storable qw(dclone);
-use Time::Piece;
+use Time::Piece 1.33;
 use boolean;
 use namespace::clean;
 
 use boolean;
 use namespace::clean;
 
index 9ef603b891c58bc286c0b7e96126f2ae1b15b22e..c5dbafed1ee1ffeaed2ade421b8e4d25b3f422fd 100644 (file)
@@ -13,7 +13,7 @@ use Hash::Util::FieldHash;
 use List::Util qw(any sum0);
 use Ref::Util qw(is_coderef is_ref);
 use Scalar::Util qw(blessed);
 use List::Util qw(any sum0);
 use Ref::Util qw(is_coderef is_ref);
 use Scalar::Util qw(blessed);
-use Time::Piece;
+use Time::Piece 1.33;
 use boolean;
 use namespace::clean;
 
 use boolean;
 use namespace::clean;
 
index cc9104c3eb94c85dae9c3321cec0e4c6ad474bda..685e0a9fcef83242e25d1c8ef39e548a70bfe637 100644 (file)
@@ -11,7 +11,7 @@ use File::KDBX::Util qw(:class :empty :io :uuid load_optional);
 use File::KDBX;
 use Ref::Util qw(is_arrayref is_hashref);
 use Scalar::Util qw(looks_like_number);
 use File::KDBX;
 use Ref::Util qw(is_arrayref is_hashref);
 use Scalar::Util qw(looks_like_number);
-use Time::Piece;
+use Time::Piece 1.33;
 use boolean;
 use namespace::clean;
 
 use boolean;
 use namespace::clean;
 
@@ -19,7 +19,7 @@ extends 'File::KDBX::Loader';
 
 our $VERSION = '999.999'; # VERSION
 
 
 our $VERSION = '999.999'; # VERSION
 
-my $DEFAULT_EXPIRATION = Time::Piece->new(32503677839); # 2999-12-31 23:59:59
+my $DEFAULT_EXPIRATION = Time::Piece->strptime('2999-12-31 23:59:59', '%Y-%m-%d %H:%M:%S');
 
 sub _read_headers { '' }
 
 
 sub _read_headers { '' }
 
index 1931153636d59b9626e6251934f3d38a3cc89f42..68d1abeb1125dd71063fa6ffb4f31b6bd7e7cbbb 100644 (file)
@@ -11,7 +11,7 @@ use File::KDBX::Error;
 use File::KDBX::Safe;
 use File::KDBX::Util qw(:class :int :text gunzip erase_scoped);
 use Scalar::Util qw(looks_like_number);
 use File::KDBX::Safe;
 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;
 use XML::LibXML::Reader;
 use boolean;
 use namespace::clean;
@@ -496,7 +496,7 @@ sub _read_xml_content {
     my $decoded = eval { _decode_primitive($content, $type) };
     if (my $err = $@) {
         ref $err and $err->details(node => $reader->nodePath, line => $reader->lineNumber);
     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;
     }
 
     return $decoded;
@@ -536,10 +536,9 @@ sub _decode_datetime {
         $binary .= \0 x (8 - length($binary)) if length($binary) < 8;
         my ($seconds_since_ad1) = unpack_Ql($binary);
         my $epoch = $seconds_since_ad1 - TIME_SECONDS_AD1_TO_UNIX_EPOCH;
         $binary .= \0 x (8 - length($binary)) if length($binary) < 8;
         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;
     my $dt = eval { Time::Piece->strptime($_, '%Y-%m-%dT%H:%M:%SZ') };
     if (my $err = $@) {
         throw 'Failed to parse datetime', text => $_, error => $err;
index e9bb316762b8e373fb7f8ef486826599e579d522..b8c901b048d6c73f1187a8d7d5454f409dbc479e 100644 (file)
@@ -13,7 +13,7 @@ use List::Util 1.33 qw(any all);
 use Module::Load;
 use Ref::Util qw(is_arrayref is_coderef is_hashref is_ref is_refref is_scalarref);
 use Scalar::Util qw(blessed looks_like_number readonly);
 use Module::Load;
 use Ref::Util qw(is_arrayref is_coderef is_hashref is_ref is_refref is_scalarref);
 use Scalar::Util qw(blessed looks_like_number readonly);
-use Time::Piece;
+use Time::Piece 1.33;
 use boolean;
 use namespace::clean -except => 'import';
 
 use boolean;
 use namespace::clean -except => 'import';
 
index 5afceeb7dd8b7d155d4bfd00ed2879afb744d783..d82dc4b431136e543c2e63549f740033c627a1a7 100644 (file)
--- a/t/kdbx4.t
+++ b/t/kdbx4.t
@@ -111,7 +111,7 @@ subtest 'KDBX4.1 upgrade' => sub {
     is $kdbx->minimum_version, KDBX_VERSION_4_1, 'Icon with name requires upgrade';
     $kdbx->remove_custom_icon($icon_uuid);
     is $kdbx->minimum_version, KDBX_VERSION_3_1, 'Reset upgrade requirement';
     is $kdbx->minimum_version, KDBX_VERSION_4_1, 'Icon with name requires upgrade';
     $kdbx->remove_custom_icon($icon_uuid);
     is $kdbx->minimum_version, KDBX_VERSION_3_1, 'Reset upgrade requirement';
-    $icon_uuid = $kdbx->add_custom_icon('data2', last_modification_time => gmtime);
+    $icon_uuid = $kdbx->add_custom_icon('data2', last_modification_time => scalar gmtime);
     is $kdbx->minimum_version, KDBX_VERSION_4_1, 'Icon with modtime requires upgrade';
     $kdbx->remove_custom_icon($icon_uuid);
     is $kdbx->minimum_version, KDBX_VERSION_3_1, 'Reset upgrade requirement';
     is $kdbx->minimum_version, KDBX_VERSION_4_1, 'Icon with modtime requires upgrade';
     $kdbx->remove_custom_icon($icon_uuid);
     is $kdbx->minimum_version, KDBX_VERSION_3_1, 'Reset upgrade requirement';
This page took 0.033802 seconds and 4 git commands to generate.