]> Dogcows Code - chaz/p5-File-KDBX/commitdiff
Version 0.903
authorCharles McGarvey <ccm@cpan.org>
Wed, 11 May 2022 23:17:56 +0000 (17:17 -0600)
committerCharles McGarvey <ccm@cpan.org>
Wed, 11 May 2022 23:17:56 +0000 (17:17 -0600)
51 files changed:
Changes
META.json
META.yml
Makefile.PL
README
lib/File/KDBX.pm
lib/File/KDBX/Cipher.pm
lib/File/KDBX/Cipher/CBC.pm
lib/File/KDBX/Cipher/Stream.pm
lib/File/KDBX/Constants.pm
lib/File/KDBX/Dumper.pm
lib/File/KDBX/Dumper/KDB.pm
lib/File/KDBX/Dumper/Raw.pm
lib/File/KDBX/Dumper/V3.pm
lib/File/KDBX/Dumper/V4.pm
lib/File/KDBX/Dumper/XML.pm
lib/File/KDBX/Entry.pm
lib/File/KDBX/Error.pm
lib/File/KDBX/Group.pm
lib/File/KDBX/IO.pm
lib/File/KDBX/IO/Crypt.pm
lib/File/KDBX/IO/HashBlock.pm
lib/File/KDBX/IO/HmacBlock.pm
lib/File/KDBX/Iterator.pm
lib/File/KDBX/KDF.pm
lib/File/KDBX/KDF/AES.pm
lib/File/KDBX/KDF/Argon2.pm
lib/File/KDBX/Key.pm
lib/File/KDBX/Key/ChallengeResponse.pm
lib/File/KDBX/Key/Composite.pm
lib/File/KDBX/Key/File.pm
lib/File/KDBX/Key/Password.pm
lib/File/KDBX/Key/YubiKey.pm
lib/File/KDBX/Loader.pm
lib/File/KDBX/Loader/KDB.pm
lib/File/KDBX/Loader/Raw.pm
lib/File/KDBX/Loader/V3.pm
lib/File/KDBX/Loader/V4.pm
lib/File/KDBX/Loader/XML.pm
lib/File/KDBX/Object.pm
lib/File/KDBX/Safe.pm
lib/File/KDBX/Transaction.pm
lib/File/KDBX/Util.pm
t/00-report-prereqs.dd
t/crypt.t
t/database.t
t/kdb.t
t/kdbx4.t
t/keys.t
t/memory-protection.t
t/util.t

diff --git a/Changes b/Changes
index d9e489e3009f87c7eea8e17cad26c7da707f217a..8de6278baf0a739cc8bc9d0bc5537b76c9f25074 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,10 @@
 Revision history for File-KDBX.
 
+0.903     2022-05-11 17:17:13-0600
+
+  * Fixed parsing KDBX4 datetimes on 32-bit perls.
+  * Fixed broken tests on perls < 5.14.
+
 0.902     2022-05-03 19:18:06-0600
 
   * Added support for 32-bit perls.
index e72d2592b65500b913744b8533bb0cd7540d7cf6..ff130aa3e2c0c6d42d1195e6117ee46680340fd5 100644 (file)
--- a/META.json
+++ b/META.json
             "IPC::Cmd" : "0.84",
             "Iterator::Simple" : "0",
             "List::Util" : "1.33",
-            "Math::BigInt" : "0",
+            "Math::BigInt" : "1.993",
             "Module::Load" : "0",
             "Module::Loaded" : "0",
             "POSIX" : "0",
             "Storable" : "0",
             "Symbol" : "0",
             "Text::ParseWords" : "0",
-            "Time::Piece" : "0",
+            "Time::Piece" : "1.33",
             "XML::LibXML" : "0",
             "XML::LibXML::Reader" : "0",
             "boolean" : "0",
             "Getopt::Std" : "0",
             "IO::Handle" : "0",
             "IPC::Open3" : "0",
+            "Math::BigInt" : "1.993",
             "Test::Deep" : "0",
             "Test::Fatal" : "0",
-            "Test::More" : "0",
+            "Test::More" : "1.001004_001",
             "Test::Warnings" : "0",
             "lib" : "0",
             "utf8" : "0"
    "provides" : {
       "File::KDBX" : {
          "file" : "lib/File/KDBX.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Cipher" : {
          "file" : "lib/File/KDBX/Cipher.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Cipher::CBC" : {
          "file" : "lib/File/KDBX/Cipher/CBC.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Cipher::Stream" : {
          "file" : "lib/File/KDBX/Cipher/Stream.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Constants" : {
          "file" : "lib/File/KDBX/Constants.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Dumper" : {
          "file" : "lib/File/KDBX/Dumper.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Dumper::KDB" : {
          "file" : "lib/File/KDBX/Dumper/KDB.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Dumper::Raw" : {
          "file" : "lib/File/KDBX/Dumper/Raw.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Dumper::V3" : {
          "file" : "lib/File/KDBX/Dumper/V3.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Dumper::V4" : {
          "file" : "lib/File/KDBX/Dumper/V4.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Dumper::XML" : {
          "file" : "lib/File/KDBX/Dumper/XML.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Entry" : {
          "file" : "lib/File/KDBX/Entry.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Error" : {
          "file" : "lib/File/KDBX/Error.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Group" : {
          "file" : "lib/File/KDBX/Group.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::IO" : {
          "file" : "lib/File/KDBX/IO.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::IO::Crypt" : {
          "file" : "lib/File/KDBX/IO/Crypt.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::IO::HashBlock" : {
          "file" : "lib/File/KDBX/IO/HashBlock.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::IO::HmacBlock" : {
          "file" : "lib/File/KDBX/IO/HmacBlock.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Iterator" : {
          "file" : "lib/File/KDBX/Iterator.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::KDF" : {
          "file" : "lib/File/KDBX/KDF.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::KDF::AES" : {
          "file" : "lib/File/KDBX/KDF/AES.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::KDF::Argon2" : {
          "file" : "lib/File/KDBX/KDF/Argon2.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Key" : {
          "file" : "lib/File/KDBX/Key.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Key::ChallengeResponse" : {
          "file" : "lib/File/KDBX/Key/ChallengeResponse.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Key::Composite" : {
          "file" : "lib/File/KDBX/Key/Composite.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Key::File" : {
          "file" : "lib/File/KDBX/Key/File.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Key::Password" : {
          "file" : "lib/File/KDBX/Key/Password.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Key::YubiKey" : {
          "file" : "lib/File/KDBX/Key/YubiKey.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Loader" : {
          "file" : "lib/File/KDBX/Loader.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Loader::KDB" : {
          "file" : "lib/File/KDBX/Loader/KDB.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Loader::Raw" : {
          "file" : "lib/File/KDBX/Loader/Raw.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Loader::V3" : {
          "file" : "lib/File/KDBX/Loader/V3.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Loader::V4" : {
          "file" : "lib/File/KDBX/Loader/V4.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Loader::XML" : {
          "file" : "lib/File/KDBX/Loader/XML.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Object" : {
          "file" : "lib/File/KDBX/Object.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Safe" : {
          "file" : "lib/File/KDBX/Safe.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Transaction" : {
          "file" : "lib/File/KDBX/Transaction.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       },
       "File::KDBX::Util" : {
          "file" : "lib/File/KDBX/Util.pm",
-         "version" : "0.902"
+         "version" : "0.903"
       }
    },
    "release_status" : "stable",
          "web" : "https://github.com/chazmcgarvey/File-KDBX"
       }
    },
-   "version" : "0.902",
+   "version" : "0.903",
    "x_authority" : "cpan:CCM",
    "x_generated_by_perl" : "v5.34.1",
    "x_serialization_backend" : "Cpanel::JSON::XS version 4.27",
index 02a301d311029429925248cd893e24588d6cfcc4..c0bda7d5a1c0376d886b2cd022c3ed053a712b9d 100644 (file)
--- a/META.yml
+++ b/META.yml
@@ -9,9 +9,10 @@ build_requires:
   Getopt::Std: '0'
   IO::Handle: '0'
   IPC::Open3: '0'
+  Math::BigInt: '1.993'
   Test::Deep: '0'
   Test::Fatal: '0'
-  Test::More: '0'
+  Test::More: 1.001004_001
   Test::Warnings: '0'
   lib: '0'
   utf8: '0'
@@ -49,118 +50,118 @@ optional_features:
 provides:
   File::KDBX:
     file: lib/File/KDBX.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Cipher:
     file: lib/File/KDBX/Cipher.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Cipher::CBC:
     file: lib/File/KDBX/Cipher/CBC.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Cipher::Stream:
     file: lib/File/KDBX/Cipher/Stream.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Constants:
     file: lib/File/KDBX/Constants.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Dumper:
     file: lib/File/KDBX/Dumper.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Dumper::KDB:
     file: lib/File/KDBX/Dumper/KDB.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Dumper::Raw:
     file: lib/File/KDBX/Dumper/Raw.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Dumper::V3:
     file: lib/File/KDBX/Dumper/V3.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Dumper::V4:
     file: lib/File/KDBX/Dumper/V4.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Dumper::XML:
     file: lib/File/KDBX/Dumper/XML.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Entry:
     file: lib/File/KDBX/Entry.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Error:
     file: lib/File/KDBX/Error.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Group:
     file: lib/File/KDBX/Group.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::IO:
     file: lib/File/KDBX/IO.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::IO::Crypt:
     file: lib/File/KDBX/IO/Crypt.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::IO::HashBlock:
     file: lib/File/KDBX/IO/HashBlock.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::IO::HmacBlock:
     file: lib/File/KDBX/IO/HmacBlock.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Iterator:
     file: lib/File/KDBX/Iterator.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::KDF:
     file: lib/File/KDBX/KDF.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::KDF::AES:
     file: lib/File/KDBX/KDF/AES.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::KDF::Argon2:
     file: lib/File/KDBX/KDF/Argon2.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Key:
     file: lib/File/KDBX/Key.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Key::ChallengeResponse:
     file: lib/File/KDBX/Key/ChallengeResponse.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Key::Composite:
     file: lib/File/KDBX/Key/Composite.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Key::File:
     file: lib/File/KDBX/Key/File.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Key::Password:
     file: lib/File/KDBX/Key/Password.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Key::YubiKey:
     file: lib/File/KDBX/Key/YubiKey.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Loader:
     file: lib/File/KDBX/Loader.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Loader::KDB:
     file: lib/File/KDBX/Loader/KDB.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Loader::Raw:
     file: lib/File/KDBX/Loader/Raw.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Loader::V3:
     file: lib/File/KDBX/Loader/V3.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Loader::V4:
     file: lib/File/KDBX/Loader/V4.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Loader::XML:
     file: lib/File/KDBX/Loader/XML.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Object:
     file: lib/File/KDBX/Object.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Safe:
     file: lib/File/KDBX/Safe.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Transaction:
     file: lib/File/KDBX/Transaction.pm
-    version: '0.902'
+    version: '0.903'
   File::KDBX::Util:
     file: lib/File/KDBX/Util.pm
-    version: '0.902'
+    version: '0.903'
 recommends:
   Compress::Raw::Zlib: '0'
   File::KDBX::XS: '0'
@@ -187,7 +188,7 @@ requires:
   IPC::Cmd: '0.84'
   Iterator::Simple: '0'
   List::Util: '1.33'
-  Math::BigInt: '0'
+  Math::BigInt: '1.993'
   Module::Load: '0'
   Module::Loaded: '0'
   POSIX: '0'
@@ -197,7 +198,7 @@ requires:
   Storable: '0'
   Symbol: '0'
   Text::ParseWords: '0'
-  Time::Piece: '0'
+  Time::Piece: '1.33'
   XML::LibXML: '0'
   XML::LibXML::Reader: '0'
   boolean: '0'
@@ -210,7 +211,7 @@ resources:
   bugtracker: https://github.com/chazmcgarvey/File-KDBX/issues
   homepage: https://github.com/chazmcgarvey/File-KDBX
   repository: https://github.com/chazmcgarvey/File-KDBX.git
-version: '0.902'
+version: '0.903'
 x_authority: cpan:CCM
 x_generated_by_perl: v5.34.1
 x_serialization_backend: 'YAML::Tiny version 1.73'
index 9b138131eefd03d12c6c7c2a2d5da20d6c311c78..c80427ff763205ab6fe45843b39919ef54608c9f 100644 (file)
@@ -35,7 +35,7 @@ my %WriteMakefileArgs = (
     "IPC::Cmd" => "0.84",
     "Iterator::Simple" => 0,
     "List::Util" => "1.33",
-    "Math::BigInt" => 0,
+    "Math::BigInt" => "1.993",
     "Module::Load" => 0,
     "Module::Loaded" => 0,
     "POSIX" => 0,
@@ -45,7 +45,7 @@ my %WriteMakefileArgs = (
     "Storable" => 0,
     "Symbol" => 0,
     "Text::ParseWords" => 0,
-    "Time::Piece" => 0,
+    "Time::Piece" => "1.33",
     "XML::LibXML" => 0,
     "XML::LibXML::Reader" => 0,
     "boolean" => 0,
@@ -61,14 +61,15 @@ my %WriteMakefileArgs = (
     "Getopt::Std" => 0,
     "IO::Handle" => 0,
     "IPC::Open3" => 0,
+    "Math::BigInt" => "1.993",
     "Test::Deep" => 0,
     "Test::Fatal" => 0,
-    "Test::More" => 0,
+    "Test::More" => "1.001004_001",
     "Test::Warnings" => 0,
     "lib" => 0,
     "utf8" => 0
   },
-  "VERSION" => "0.902",
+  "VERSION" => "0.903",
   "test" => {
     "TESTS" => "t/*.t"
   }
@@ -99,7 +100,7 @@ my %FallbackPrereqs = (
   "IPC::Open3" => 0,
   "Iterator::Simple" => 0,
   "List::Util" => "1.33",
-  "Math::BigInt" => 0,
+  "Math::BigInt" => "1.993",
   "Module::Load" => 0,
   "Module::Loaded" => 0,
   "POSIX" => 0,
@@ -110,10 +111,10 @@ my %FallbackPrereqs = (
   "Symbol" => 0,
   "Test::Deep" => 0,
   "Test::Fatal" => 0,
-  "Test::More" => 0,
+  "Test::More" => "1.001004_001",
   "Test::Warnings" => 0,
   "Text::ParseWords" => 0,
-  "Time::Piece" => 0,
+  "Time::Piece" => "1.33",
   "XML::LibXML" => 0,
   "XML::LibXML::Reader" => 0,
   "boolean" => 0,
diff --git a/README b/README
index ec6508e533074da94cef2083aa26c75a1028c4e5..fac5d25a662ab65776f4002c01328597d7f80d43 100644 (file)
--- a/README
+++ b/README
@@ -4,7 +4,7 @@ NAME
 
 VERSION
 
-    version 0.902
+    version 0.903
 
 SYNOPSIS
 
@@ -24,14 +24,13 @@ SYNOPSIS
         );
     
         # Save the database to the filesystem
-        $kdbx->dump_file('passwords.kdbx', 'M@st3rP@ssw0rd!');
+        $kdbx->dump_file('passwords.kdbx', 'masterpw changeme');
     
         # Load the database from the filesystem into a new database instance
-        my $kdbx2 = File::KDBX->load_file('passwords.kdbx', 'M@st3rP@ssw0rd!');
+        my $kdbx2 = File::KDBX->load_file('passwords.kdbx', 'masterpw changeme');
     
         # Iterate over database entries, print entry titles
-        $kdbx2->entries->each(sub {
-            my ($entry) = @_;
+        $kdbx2->entries->each(sub($entry, @) {
             say 'Entry: ', $entry->title;
         });
 
@@ -999,8 +998,7 @@ RECIPES
         my $kdbx = File::KDBX->load_file('mypasswords.kdbx', 'master password CHANGEME');
         $kdbx->unlock;  # cause $entry->password below to be defined
     
-        $kdbx->entries->each(sub {
-            my ($entry) = @_;
+        $kdbx->entries->each(sub($entry, @) {
             say 'Found password for: ', $entry->title;
             say '  Username: ', $entry->username;
             say '  Password: ', $entry->password;
index b6283751f104b1a41d14f127f8246642244d7bd2..02073edbeec891ab7c1f95689ed82b5010601aec 100644 (file)
@@ -16,11 +16,11 @@ 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 Time::Piece;
+use Time::Piece 1.33;
 use boolean;
 use namespace::clean;
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 our $WARNINGS = 1;
 
 fieldhashes \my (%SAFE, %KEYS);
@@ -1121,7 +1121,7 @@ File::KDBX - Encrypted database to store secret text and files
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 SYNOPSIS
 
@@ -1141,14 +1141,13 @@ version 0.902
     );
 
     # Save the database to the filesystem
-    $kdbx->dump_file('passwords.kdbx', 'M@st3rP@ssw0rd!');
+    $kdbx->dump_file('passwords.kdbx', 'masterpw changeme');
 
     # Load the database from the filesystem into a new database instance
-    my $kdbx2 = File::KDBX->load_file('passwords.kdbx', 'M@st3rP@ssw0rd!');
+    my $kdbx2 = File::KDBX->load_file('passwords.kdbx', 'masterpw changeme');
 
     # Iterate over database entries, print entry titles
-    $kdbx2->entries->each(sub {
-        my ($entry) = @_;
+    $kdbx2->entries->each(sub($entry, @) {
         say 'Entry: ', $entry->title;
     });
 
@@ -2156,8 +2155,7 @@ You generally don't need to call this directly. The loader and dumper use it to
     my $kdbx = File::KDBX->load_file('mypasswords.kdbx', 'master password CHANGEME');
     $kdbx->unlock;  # cause $entry->password below to be defined
 
-    $kdbx->entries->each(sub {
-        my ($entry) = @_;
+    $kdbx->entries->each(sub($entry, @) {
         say 'Found password for: ', $entry->title;
         say '  Username: ', $entry->username;
         say '  Password: ', $entry->password;
index 37bdb58fb2ec62a7aeccff4e950e7291ab10c019..13e4757a4f283e4698a59a448e7955e895abe39d 100644 (file)
@@ -12,7 +12,7 @@ use Module::Load;
 use Scalar::Util qw(looks_like_number);
 use namespace::clean;
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 my %CIPHERS;
 
@@ -158,7 +158,7 @@ File::KDBX::Cipher - A block cipher mode or cipher stream
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 SYNOPSIS
 
index 8f798de195a76babc14d9d45def4e75378d2bfa2..81fa7af17aec89df776bef445bb90c57526ea4fe 100644 (file)
@@ -11,7 +11,7 @@ use namespace::clean;
 
 extends 'File::KDBX::Cipher';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 has key_size => 32;
 sub iv_size     { 16 }
@@ -63,7 +63,7 @@ File::KDBX::Cipher::CBC - A CBC block cipher mode encrypter/decrypter
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 SYNOPSIS
 
index b5112008749bb9b76e30f995b7a196f2c3d06791..f5072a967e543d415690dc78180eb1c840aa8071 100644 (file)
@@ -14,7 +14,7 @@ use namespace::clean;
 
 extends 'File::KDBX::Cipher';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 
 has 'counter',  is => 'ro', default => 0;
@@ -123,7 +123,7 @@ File::KDBX::Cipher::Stream - A cipher stream encrypter/decrypter
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 SYNOPSIS
 
index c7b31bdd18e9c190c402ceef5f0119be80f0948c..c412653977d930f42d42ab5e02a64193c50c037e 100644 (file)
@@ -15,7 +15,7 @@ use File::KDBX::Util qw(int64);
 use Scalar::Util qw(dualvar);
 use namespace::clean -except => 'import';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 BEGIN {
     my %CONSTANTS = (
@@ -348,7 +348,7 @@ File::KDBX::Constants - All the KDBX-related constants you could ever want
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 SYNOPSIS
 
@@ -553,7 +553,7 @@ Constants related to identifying the compression state of a file:
 
 =head2 :cipher
 
-Constants related ciphers:
+Constants related to ciphers:
 
 =over 4
 
index c73ddcf4a84c81f76bf7db4488e71ae36006c9e7..d300a02b0a930b41fcbe9956ee14b32adb5779ce 100644 (file)
@@ -15,7 +15,7 @@ use Ref::Util qw(is_ref is_scalarref);
 use Scalar::Util qw(looks_like_number openhandle);
 use namespace::clean;
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 
 sub new {
@@ -287,7 +287,7 @@ File::KDBX::Dumper - Write KDBX files
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 ATTRIBUTES
 
index ea0db6f218f19d440f8cebae0993b70f7189fabd..eceef18b601e484b5b047dda40c2dfd4f278b66e 100644 (file)
@@ -14,7 +14,7 @@ use namespace::clean;
 
 extends 'File::KDBX::Dumper';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 sub _write_magic_numbers { '' }
 sub _write_headers { '' }
@@ -136,7 +136,7 @@ File::KDBX::Dumper::KDB - Write KDB files
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 DESCRIPTION
 
index 70aa0c6ac5d17bbffd007c40b2cf4fed40dd791b..50f492339fe84f4f470b54419968bb29f7d36f37 100644 (file)
@@ -9,7 +9,7 @@ use namespace::clean;
 
 extends 'File::KDBX::Dumper';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 sub _dump {
     my $self = shift;
@@ -48,7 +48,7 @@ File::KDBX::Dumper::Raw - A no-op dumper that dumps content as-is
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 SYNOPSIS
 
index f06db6b8a34db9cae1e2f9e2fb997259fb1aeb91..d8246a09fc143d9040558e93ea9807dcb3d59a5f 100644 (file)
@@ -16,7 +16,7 @@ use namespace::clean;
 
 extends 'File::KDBX::Dumper';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 sub _write_headers {
     my $self = shift;
@@ -187,7 +187,7 @@ File::KDBX::Dumper::V3 - Dump KDBX3 files
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 BUGS
 
index 0dec6517071c38457d231c806672b109befee4ce..723b20dd8ae6ffdb833a50ce519419d1183c57d8 100644 (file)
@@ -19,7 +19,7 @@ use namespace::clean;
 
 extends 'File::KDBX::Dumper';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 has _binaries_written => {}, is => 'ro';
 
@@ -374,7 +374,7 @@ File::KDBX::Dumper::V4 - Dump KDBX4 files
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 BUGS
 
index ebf67958ab969ccc776dc277db14900cce29b648..cc31cd13c8b6bd67da686fc27fb1ca59d5f275e5 100644 (file)
@@ -12,14 +12,14 @@ 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 Time::Piece;
+use Time::Piece 1.33;
 use XML::LibXML;
 use boolean;
 use namespace::clean;
 
 extends 'File::KDBX::Dumper';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 
 has allow_protection => 1;
@@ -563,7 +563,7 @@ File::KDBX::Dumper::XML - Dump unencrypted XML KeePass files
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 ATTRIBUTES
 
index df8cf4d372f0039238cacac558efc37ab8a43cb0..4d667cb93ba5951149afbfe80aff2e3aec5349ab 100644 (file)
@@ -15,13 +15,13 @@ 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 Time::Piece;
+use Time::Piece 1.33;
 use boolean;
 use namespace::clean;
 
 extends 'File::KDBX::Object';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 my $PLACEHOLDER_MAX_DEPTH = 10;
 my %PLACEHOLDERS;
@@ -681,7 +681,7 @@ File::KDBX::Entry - A KDBX database entry
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 DESCRIPTION
 
index ae02c5fa74d4e3fe3c2babc807f068bd02399f15..7181c7776b91c5cb8046253949f099bca540ee5d 100644 (file)
@@ -9,7 +9,7 @@ use Exporter qw(import);
 use Scalar::Util qw(blessed looks_like_number);
 use namespace::clean -except => 'import';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 our @EXPORT = qw(alert error throw);
 
@@ -167,7 +167,7 @@ File::KDBX::Error - Represents something bad that happened
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 ATTRIBUTES
 
index cf24d71f8f4eb4adf1609357d69b75e0b4a706ff..9b8c8bf16aaec12055695374f50f32df8ace0b97 100644 (file)
@@ -13,13 +13,13 @@ use Hash::Util::FieldHash;
 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;
 
 extends 'File::KDBX::Object';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 
 # has uuid                        => sub { generate_uuid(printable => 1) };
@@ -398,7 +398,7 @@ File::KDBX::Group - A KDBX database group
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 DESCRIPTION
 
index 135820e71ca8daa331764ed040ca171117a6c4f4..ef1424544ff4b208f2d0911b759fab2deed7f659 100644 (file)
@@ -14,7 +14,7 @@ use namespace::clean;
 
 extends 'IO::Handle';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 sub _croak { require Carp; goto &Carp::croak }
 
@@ -390,7 +390,7 @@ File::KDBX::IO - Base IO class for KDBX-related streams
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 DESCRIPTION
 
index 7675776d36f2ce80890a42df5fd4ee4753a3e58d..e3ef40019d83fef1067af407e8d2b45c50a24cda 100644 (file)
@@ -11,7 +11,7 @@ use namespace::clean;
 
 extends 'File::KDBX::IO';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 our $BUFFER_SIZE = 16384;
 our $ERROR;
 
@@ -139,7 +139,7 @@ File::KDBX::IO::Crypt - Encrypter/decrypter IO handle
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 SYNOPSIS
 
index 2d83249c748035e05d48eef3f64a04bab7138b54..f3b5757fb43648eceb4e591ee7285e38ce360406 100644 (file)
@@ -13,7 +13,7 @@ use namespace::clean;
 
 extends 'File::KDBX::IO';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 our $ALGORITHM = 'SHA256';
 our $BLOCK_SIZE = 1048576;  # 1MiB
 our $ERROR;
@@ -208,7 +208,7 @@ File::KDBX::IO::HashBlock - Hash block stream IO handle
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 DESCRIPTION
 
index e14100e4407bfceae900939670cfafb08045e643..be4902d9af8b7aea027024ccaaafb7254ccac7ae 100644 (file)
@@ -13,7 +13,7 @@ use namespace::clean;
 
 extends 'File::KDBX::IO';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 our $BLOCK_SIZE = 1048576;  # 1MiB
 our $ERROR;
 
@@ -212,7 +212,7 @@ File::KDBX::IO::HmacBlock - HMAC block stream IO handle
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 DESCRIPTION
 
index b5d0b9113a4de76dd6240fd9581c031fb7c106f9..e6b5665b93f1d97e421d8ac394c0ff27d71acb49 100644 (file)
@@ -14,7 +14,7 @@ use namespace::clean;
 BEGIN { mark_as_loaded('Iterator::Simple::Iterator') }
 extends 'Iterator::Simple::Iterator';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 
 sub new {
@@ -221,7 +221,7 @@ File::KDBX::Iterator - KDBX database iterator
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 SYNOPSIS
 
@@ -239,7 +239,7 @@ version 0.902
 
 A buffered iterator compatible with and expanding upon L<Iterator::Simple>, this provides an easy way to
 navigate a L<File::KDBX> database. The documentation for B<Iterator::Simple> documents functions and methods
-supported but this iterator that are not documented here, so consider that additional reading.
+supported by this iterator that are not documented here, so consider that additional reading.
 
 =head2 Buffer
 
@@ -330,6 +330,7 @@ B<NOTE:> This method drains the iterator completely, leaving it empty. See L</CA
 =head2 where
 
     \&iterator = $iterator->grep(\&query);
+    \&iterator = $iterator->grep(sub($item) { ... });
 
 Get a new iterator draining from an existing iterator but providing only items that pass a test or are matched
 by a query. In its basic form this method is very much like perl's built-in grep function, except for
@@ -410,7 +411,7 @@ Alias for L</norder_by>.
 
 Get a new iterator draining from an existing iterator but providing only a limited number of items.
 
-C<limit> as an alias for L<< Iterator::Simple/"$iterator->head($count)" >>.
+C<limit> is an alias for L<< Iterator::Simple/"$iterator->head($count)" >>.
 
 =head2 to_array
 
@@ -442,6 +443,9 @@ B<File::KDBX> lists which are always finite -- unless you do something weird lik
 its own ancestor -- but I'm noting it here as a potential issue if you use this iterator class for other
 things (which you probably shouldn't do).
 
+KDBX databases are always fully-loaded into memory anyway, so there's not a significant memory cost to
+draining an iterator completely.
+
 =head1 BUGS
 
 Please report any bugs or feature requests on the bugtracker website
index 1cf335d3a94ce461a2c3d494767ef8946f3c3942..4520fb574f0ae07e5949a1bbf96d65e7252a7d51 100644 (file)
@@ -12,7 +12,7 @@ use Module::Load;
 use Scalar::Util qw(blessed);
 use namespace::clean;
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 my %KDFS;
 
@@ -120,7 +120,7 @@ File::KDBX::KDF - A key derivation function
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 DESCRIPTION
 
index d86ce4845a2b634c02cd68d6d18968f9acb83a9e..206bc132698c91b6167a28e874b45238f20077ec 100644 (file)
@@ -13,7 +13,7 @@ use namespace::clean;
 
 extends 'File::KDBX::KDF';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 # Rounds higher than this are eligible for forking:
 my $FORK_OPTIMIZATION_THRESHOLD = 100_000;
@@ -111,7 +111,7 @@ File::KDBX::KDF::AES - Using the AES cipher as a key derivation function
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 DESCRIPTION
 
index 9f88f746fda5faa53b66da3b82e7b3b52fcde30d..4e7889b671b947033304ae365df1a0fc56fd5926 100644 (file)
@@ -12,7 +12,7 @@ use namespace::clean;
 
 extends 'File::KDBX::KDF';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 
 sub salt        { $_[0]->{+KDF_PARAM_ARGON2_SALT} or throw 'Salt is not set' }
@@ -69,7 +69,7 @@ File::KDBX::KDF::Argon2 - The Argon2 family of key derivation functions
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 DESCRIPTION
 
index 1fa09f6b23cd336c54886fa706997fd4dea92c9e..c790570ca22345091a3b62e1af02cf3614e88461 100644 (file)
@@ -14,7 +14,7 @@ use Ref::Util qw(is_arrayref is_coderef is_hashref is_ref is_scalarref);
 use Scalar::Util qw(blessed openhandle);
 use namespace::clean;
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 fieldhashes \my %SAFE;
 
@@ -140,7 +140,7 @@ File::KDBX::Key - A credential that can protect a KDBX file
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 DESCRIPTION
 
index 74555f4daa69b486dbcc9a3dd78be8c4c58819db..0e53369d118cd21c31ad9c1599d090f56e8a3b49 100644 (file)
@@ -10,7 +10,7 @@ use namespace::clean;
 
 extends 'File::KDBX::Key';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 sub init {
     my $self = shift;
@@ -56,7 +56,7 @@ File::KDBX::Key::ChallengeResponse - A challenge-response key
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 SYNOPSIS
 
index fcaef54e1c1d27b33e403f9df9413b29e8e2b7cf..39253fa8f47d20aae1b6fd2cb9ad437a07f144e5 100644 (file)
@@ -13,7 +13,7 @@ use namespace::clean;
 
 extends 'File::KDBX::Key';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 sub init {
     my $self = shift;
@@ -92,7 +92,7 @@ File::KDBX::Key::Composite - A composite key made up of component keys
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 SYNOPSIS
 
index 10b57d47677249c1ad96ba5bdca493f055b50e92..32b27adeb3e584aa95c1fe75895c190a65336d2e 100644 (file)
@@ -17,7 +17,7 @@ use namespace::clean;
 
 extends 'File::KDBX::Key';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 
 has 'type',     is => 'ro';
@@ -262,7 +262,7 @@ File::KDBX::Key::File - A file key
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 SYNOPSIS
 
index ba2809ddca86ee44ffeca3e764adcd5411090945..9dac81314156759789d9aefd55f5e3dc42e5f7ec 100644 (file)
@@ -12,7 +12,7 @@ use namespace::clean;
 
 extends 'File::KDBX::Key';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 sub init {
     my $self = shift;
@@ -37,7 +37,7 @@ File::KDBX::Key::Password - A password key
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 SYNOPSIS
 
index d55cdaf5e9f5754b494d89d8de05f0add9bfb8ba..86337b4c92edfd0ffc5269175b5565de4d58b588 100644 (file)
@@ -14,7 +14,7 @@ use namespace::clean;
 
 extends 'File::KDBX::Key::ChallengeResponse';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 # It can take some time for the USB device to be ready again, so we can retry a few times.
 our $RETRY_COUNT    = 5;
@@ -296,7 +296,7 @@ File::KDBX::Key::YubiKey - A Yubico challenge-response key
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 SYNOPSIS
 
index 727f4c6fc94be3dc54c809dc6bc549aa868af6fb..504fee73102e32ab53e0feab27b6bd16f8eda01d 100644 (file)
@@ -14,7 +14,7 @@ use Ref::Util qw(is_ref is_scalarref);
 use Scalar::Util qw(looks_like_number openhandle);
 use namespace::clean;
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 
 sub new {
@@ -249,7 +249,7 @@ File::KDBX::Loader - Load KDBX files
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 DESCRIPTION
 
index 1edccb29982202e797d95118c28af43cbb2b26d6..82ec7f12d26bdd5311359699ec0f52b7d580ffc3 100644 (file)
@@ -11,15 +11,15 @@ 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 Time::Piece;
+use Time::Piece 1.33;
 use boolean;
 use namespace::clean;
 
 extends 'File::KDBX::Loader';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # 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 { '' }
 
@@ -397,7 +397,7 @@ File::KDBX::Loader::KDB - Read KDB files
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 DESCRIPTION
 
index 0352c626019cc8588d8f7f623a94797052e6116c..d88e29f488c27bf5c763afc13c92a92a525bb3a5 100644 (file)
@@ -9,7 +9,7 @@ use namespace::clean;
 
 extends 'File::KDBX::Loader';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 sub _read {
     my $self = shift;
@@ -47,7 +47,7 @@ File::KDBX::Loader::Raw - A no-op loader that doesn't do any parsing
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 SYNOPSIS
 
index 1d42365f0afcb33eabe2947cd103cb4216971042..0990bff88fe8fc595d94359ba69558e4216f3a3c 100644 (file)
@@ -27,7 +27,7 @@ use namespace::clean;
 
 extends 'File::KDBX::Loader';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 sub _read_header {
     my $self = shift;
@@ -174,7 +174,7 @@ File::KDBX::Loader::V3 - Load KDBX3 files
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 BUGS
 
index 8f73e42fad3b0329c539c45ac0408e2ad899f5c3..0e011f09755bec303f46fff230e0359f4bd319e1 100644 (file)
@@ -30,7 +30,7 @@ use namespace::clean;
 
 extends 'File::KDBX::Loader';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 sub _read_header {
     my $self = shift;
@@ -273,7 +273,7 @@ File::KDBX::Loader::V4 - Load KDBX4 files
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 BUGS
 
index 412de239f5ea8f62bdde84f48fb62a7df5d20bb2..a5fff506f45481c082a90ff8342b71356423453d 100644 (file)
@@ -11,14 +11,14 @@ 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 Time::Piece;
+use Time::Piece 1.33;
 use XML::LibXML::Reader;
 use boolean;
 use namespace::clean;
 
 extends 'File::KDBX::Loader';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 has '_reader',  is => 'ro';
 has '_safe',    is => 'ro', default => sub { File::KDBX::Safe->new(cipher => $_[0]->kdbx->random_stream) };
@@ -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);
-        throw $err
+        throw $err;
     }
 
     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;
-        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;
@@ -590,7 +589,7 @@ File::KDBX::Loader::XML - Load unencrypted XML KeePass files
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 BUGS
 
index 33d1e034cc2809b1c09a03c17581988afce03924..50ad02bf8f62426fb070a34fe56f9c0b63cf5da2 100644 (file)
@@ -14,7 +14,7 @@ use Ref::Util qw(is_arrayref is_plain_arrayref is_plain_hashref is_ref);
 use Scalar::Util qw(blessed weaken);
 use namespace::clean;
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 fieldhashes \my (%KDBX, %PARENT, %TXNS, %REFS, %SIGNALS);
 
@@ -526,7 +526,7 @@ File::KDBX::Object - A KDBX database object
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 DESCRIPTION
 
index 4052404a76ed8efd3e0e34b24f4c980b5a9ef3fa..a8ec2b3b00e619fe998984375da0cdc100ccdfc2 100644 (file)
@@ -14,7 +14,7 @@ use Ref::Util qw(is_arrayref is_coderef is_hashref is_scalarref);
 use Scalar::Util qw(refaddr);
 use namespace::clean;
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 
 sub new {
@@ -217,7 +217,7 @@ File::KDBX::Safe - Keep strings encrypted while in memory
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 SYNOPSIS
 
index d71863ca208a0c68272a3ce3baf501f340c46317..3d852fbb11eea977d77b6f2d39a2b01d6978b5a7 100644 (file)
@@ -8,7 +8,7 @@ use Devel::GlobalDestruction;
 use File::KDBX::Util qw(:class);
 use namespace::clean;
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 
 sub new {
@@ -59,7 +59,7 @@ File::KDBX::Transaction - Make multiple database edits atomically
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 ATTRIBUTES
 
index 57e0e18f46da82faeed32301b78872538aad711f..9557b7d2f29ca2120de56b39420ae035c03fbca7 100644 (file)
@@ -13,11 +13,11 @@ 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 Time::Piece;
+use Time::Piece 1.33;
 use boolean;
 use namespace::clean -except => 'import';
 
-our $VERSION = '0.902'; # VERSION
+our $VERSION = '0.903'; # VERSION
 
 our %EXPORT_TAGS = (
     assert      => [qw(DEBUG assert)],
@@ -422,6 +422,7 @@ sub pack_Ql {
     require Config;
     if ($Config::Config{ivsize} < 8) {
         if (blessed $num && $num->can('as_hex')) {
+            require Math::BigInt;
             return "\xff\xff\xff\xff\xff\xff\xff\xff" if Math::BigInt->new('18446744073709551615') <= $num;
             return "\x00\x00\x00\x00\x00\x00\x00\x80" if $num <= Math::BigInt->new('-9223372036854775808');
             my $neg;
@@ -869,7 +870,7 @@ File::KDBX::Util - Utility functions for working with KDBX files
 
 =head1 VERSION
 
-version 0.902
+version 0.903
 
 =head1 FUNCTIONS
 
index 3979100fd737dfa0629605c2559936f59c5aa433..9256fc00e5df95a9b839a05f2e2e5a6b6b1db767 100644 (file)
@@ -61,7 +61,7 @@ do { my $x = {
                                       'IPC::Cmd' => '0.84',
                                       'Iterator::Simple' => '0',
                                       'List::Util' => '1.33',
-                                      'Math::BigInt' => '0',
+                                      'Math::BigInt' => '1.993',
                                       'Module::Load' => '0',
                                       'Module::Loaded' => '0',
                                       'POSIX' => '0',
@@ -71,7 +71,7 @@ do { my $x = {
                                       'Storable' => '0',
                                       'Symbol' => '0',
                                       'Text::ParseWords' => '0',
-                                      'Time::Piece' => '0',
+                                      'Time::Piece' => '1.33',
                                       'XML::LibXML' => '0',
                                       'XML::LibXML::Reader' => '0',
                                       'boolean' => '0',
@@ -94,9 +94,10 @@ do { my $x = {
                                    'Getopt::Std' => '0',
                                    'IO::Handle' => '0',
                                    'IPC::Open3' => '0',
+                                   'Math::BigInt' => '1.993',
                                    'Test::Deep' => '0',
                                    'Test::Fatal' => '0',
-                                   'Test::More' => '0',
+                                   'Test::More' => '1.001004_001',
                                    'Test::Warnings' => '0',
                                    'lib' => '0',
                                    'utf8' => '0'
index c003a5fc517c35c9b8ca7ca267283c23c2adac0f..69a52efb33dfad5a75382be33bd3e2847f8f78f9 100644 (file)
--- a/t/crypt.t
+++ b/t/crypt.t
@@ -15,6 +15,7 @@ use Test::More;
 
 subtest 'Round-trip block stream' => sub {
     plan tests => 3;
+
     my $block_cipher = File::KDBX::Cipher->new(uuid => CIPHER_UUID_AES256, key => 0x01 x 32, iv => 0x01 x 16);
     test_roundtrip($block_cipher,
         'Smell the pretty flowers.',
@@ -24,6 +25,7 @@ subtest 'Round-trip block stream' => sub {
 
 subtest 'Round-trip cipher stream' => sub {
     plan tests => 3;
+
     my $cipher_stream = File::KDBX::Cipher->new(stream_id => 2, key => 0x01 x 16);
     test_roundtrip($cipher_stream,
         'Smell the pretty flowers.',
index 94e1ea86966d035a14401cf9143f3a0825cbd453..997d04c1a7d70d0bdd895fcb19e3940197369db0 100644 (file)
@@ -11,7 +11,7 @@ use TestCommon;
 use File::KDBX;
 use File::Temp qw(tempfile);
 use Test::Deep;
-use Test::More;
+use Test::More 1.001004_001;
 use Time::Piece;
 
 subtest 'Create a new database' => sub {
@@ -49,7 +49,7 @@ subtest 'Clone' => sub {
     my @objects = $copy->objects->each;
     subtest 'Cloned objects refer to the cloned database' => sub {
         plan tests => scalar @_;
-        for my $object (@objects) {
+        for my $object (@_) {
             my $object_kdbx = eval { $object->kdbx };
             is $object_kdbx, $copy, 'Object: ' . $object->label;
         }
diff --git a/t/kdb.t b/t/kdb.t
index 02927e86bbb9e4255ad28e41bbf5a556fca37408..ccaeda339a2e78eb301fc17c4a4a43081064d8ff 100644 (file)
--- a/t/kdb.t
+++ b/t/kdb.t
@@ -9,7 +9,7 @@ use TestCommon;
 use Encode qw(decode);
 use File::KDBX;
 use Test::Deep;
-use Test::More;
+use Test::More 1.001004_001;
 
 eval { require File::KeePass; require File::KeePass::KDBX }
     or plan skip_all => 'File::KeePass and File::KeePass::KDBX required to test KDB files';
index 5afceeb7dd8b7d155d4bfd00ed2879afb744d783..ff487003614358615a58ea0eaecdc436d623af6c 100644 (file)
--- a/t/kdbx4.t
+++ b/t/kdbx4.t
@@ -10,7 +10,7 @@ use TestCommon;
 use File::KDBX;
 use File::KDBX::Constants qw(:version :kdf);
 use Test::Deep;
-use Test::More;
+use Test::More 1.001004_001;
 use boolean qw(:all);
 
 subtest 'Verify Format400' => sub {
@@ -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';
-    $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';
index 601260c69de981f7299322ee5263ab44afe5bb29..0bcf4dc02af60286ee442d28fb4bae4d0ffe50e2 100644 (file)
--- a/t/keys.t
+++ b/t/keys.t
@@ -10,7 +10,7 @@ use Crypt::Misc 0.029 qw(decode_b64 encode_b64);
 use File::KDBX::Constants qw(:key_file);
 use File::KDBX::Key;
 use File::Temp qw(tempfile);
-use Test::More;
+use Test::More 1.001004_001;
 
 subtest 'Primitives' => sub {
     my $pkey = File::KDBX::Key->new('password');
index 328e28ce598ce1a6671bd4dbce9a8b86d40d84c1..5ca407965bf781c3f1c13fdb5c2ec9dce7f57fbc 100644 (file)
@@ -17,7 +17,7 @@ use List::Util qw(max);
 use POSIX ();
 use Scalar::Util qw(looks_like_number);
 use Scope::Guard;
-use Test::More;
+use Test::More 1.001004_001;
 
 BEGIN {
     if (!$ENV{AUTHOR_TESTING}) {
index a785b2f7ce1c7dde8f51b270f59474e153daa1d7..45fbbe25fde447d49d7f4467c1c9b61bc203f12f 100644 (file)
--- a/t/util.t
+++ b/t/util.t
@@ -7,7 +7,7 @@ use lib 't/lib';
 use TestCommon;
 
 use File::KDBX::Util qw(:all);
-use Math::BigInt;
+use Math::BigInt 1.993;
 use Scalar::Util qw(blessed);
 use Test::More;
 
This page took 0.097901 seconds and 4 git commands to generate.