Hello community,

here is the log from the commit of package perl-Cpanel-JSON-XS for 
openSUSE:Factory checked in at 2018-06-28 15:15:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Cpanel-JSON-XS (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Cpanel-JSON-XS.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Cpanel-JSON-XS"

Thu Jun 28 15:15:02 2018 rev:12 rq:619555 version:4.04

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Cpanel-JSON-XS/perl-Cpanel-JSON-XS.changes  
2018-03-07 10:34:40.058500150 +0100
+++ 
/work/SRC/openSUSE:Factory/.perl-Cpanel-JSON-XS.new/perl-Cpanel-JSON-XS.changes 
    2018-06-28 15:15:06.847406556 +0200
@@ -1,0 +2,23 @@
+Sat Jun 23 05:10:32 UTC 2018 - [email protected]
+
+- updated to 4.04
+   see /usr/share/doc/packages/perl-Cpanel-JSON-XS/Changes
+
+  4.04 2018-06-22 (rurban)
+          - Fix bignum NaN/inf handling (#78 reported by Slaven Rezic)
+          - Move author tests to xt/ as suggested in #106, added a make xtest 
target.
+            Fixes a test fail with ASAN.
+
+-------------------------------------------------------------------
+Fri Jun 22 05:10:41 UTC 2018 - [email protected]
+
+- updated to 4.03
+   see /usr/share/doc/packages/perl-Cpanel-JSON-XS/Changes
+
+  4.03 2018-06-21 (rurban)
+          - Add sereal cpanel_json_xs type (#110 James Rouzier)
+          - Fix bencode/bdecode methods in cpanel_json_xs (#111 Fulvio Scapin)
+          - Overload ne operator for JSON::PP::Boolean (#107 tevfik1903)
+          - Add a missing semicolon to a documentation example (#104 E. 
Choroba)
+
+-------------------------------------------------------------------

Old:
----
  Cpanel-JSON-XS-4.02.tar.gz

New:
----
  Cpanel-JSON-XS-4.04.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Cpanel-JSON-XS.spec ++++++
--- /var/tmp/diff_new_pack.TvimKO/_old  2018-06-28 15:15:07.339405656 +0200
+++ /var/tmp/diff_new_pack.TvimKO/_new  2018-06-28 15:15:07.339405656 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           perl-Cpanel-JSON-XS
-Version:        4.02
+Version:        4.04
 Release:        0
 %define cpan_name Cpanel-JSON-XS
 Summary:        Cpanel Fork of Json::Xs, Fast and Correct Serializing

++++++ Cpanel-JSON-XS-4.02.tar.gz -> Cpanel-JSON-XS-4.04.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/.travis.yml 
new/Cpanel-JSON-XS-4.04/.travis.yml
--- old/Cpanel-JSON-XS-4.02/.travis.yml 2017-07-29 17:18:21.000000000 +0200
+++ new/Cpanel-JSON-XS-4.04/.travis.yml 2018-06-21 16:33:40.000000000 +0200
@@ -16,8 +16,8 @@
   #- "5.26-dbg"
   #- "5.26-thr-dbg"
   #- "5.26-mb"
-  - "dev"
-#  - "blead"
+  #- "dev"
+  #- "blead"
 
 # slows down already cached versions by 3 (33s => 1m45s)
 # (i.e. cache download: 9s, setup: 45s-130s)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/Changes 
new/Cpanel-JSON-XS-4.04/Changes
--- old/Cpanel-JSON-XS-4.02/Changes     2018-02-27 17:01:49.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/Changes     2018-06-22 19:34:07.000000000 +0200
@@ -2,6 +2,17 @@
 
 TODO: http://stevehanov.ca/blog/index.php?id=104 compression
 
+4.04 2018-06-22 (rurban)
+        - Fix bignum NaN/inf handling (#78 reported by Slaven Rezic)
+        - Move author tests to xt/ as suggested in #106, added a make xtest 
target.
+          Fixes a test fail with ASAN.
+
+4.03 2018-06-21 (rurban)
+        - Add sereal cpanel_json_xs type (#110 James Rouzier)
+        - Fix bencode/bdecode methods in cpanel_json_xs (#111 Fulvio Scapin)
+        - Overload ne operator for JSON::PP::Boolean (#107 tevfik1903)
+        - Add a missing semicolon to a documentation example (#104 E. Choroba)
+
 4.02 2018-02-27 (rurban)
         - Add encoder indent_length method (#103 rouzier), previously
           hard-coded to 3.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/MANIFEST 
new/Cpanel-JSON-XS-4.04/MANIFEST
--- old/Cpanel-JSON-XS-4.02/MANIFEST    2018-02-27 17:07:34.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/MANIFEST    2018-06-22 19:36:41.000000000 +0200
@@ -69,7 +69,6 @@
 t/99_binary.t
 t/_unicode_handling.pm
 t/appveyor-test.bat
-t/gh70-asan.t
 t/test_parsing/i_number_neg_int_huge_exp.json
 t/test_parsing/i_number_pos_double_huge_exp.json
 t/test_parsing/i_object_key_lone_2nd_surrogate.json
@@ -406,17 +405,18 @@
 t/test_transform/string_3_escaped_invalid_codepoints.json
 t/test_transform/string_3_invalid_codepoints.json
 t/test_transform/string_with_escaped_NULL.json
-t/z_kwalitee.t
-t/z_leaktrace.t
-t/z_manifest.t
-t/z_meta.t
-t/z_perl_minimum_version.t
-t/z_pod-coverage.t
-t/z_pod-spell-mistakes.t
-t/z_pod-spelling.t
-t/z_pod.t
 t/zero-mojibake.t
 typemap
+xt/gh70-asan.t
+xt/kwalitee.t
+xt/leaktrace.t
+xt/manifest.t
+xt/meta.t
+xt/perl_minimum_version.t
+xt/pod-coverage.t
+xt/pod-spell-mistakes.t
+xt/pod-spelling.t
+xt/pod.t
 META.yml                                 Module YAML meta-data (added by 
MakeMaker)
 META.json                                Module JSON meta-data (added by 
MakeMaker)
 SIGNATURE                                Public-key signature (added by 
MakeMaker)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/META.json 
new/Cpanel-JSON-XS-4.04/META.json
--- old/Cpanel-JSON-XS-4.02/META.json   2018-02-27 17:07:34.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/META.json   2018-06-22 19:36:41.000000000 +0200
@@ -48,7 +48,7 @@
          "url" : "https://github.com/rurban/Cpanel-JSON-XS";
       }
    },
-   "version" : "4.02",
+   "version" : "4.04",
    "x_contributors" : [
       "Ashley Willis <[email protected]>",
       "Daniel Dragan <[email protected]>",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/META.yml 
new/Cpanel-JSON-XS-4.04/META.yml
--- old/Cpanel-JSON-XS-4.02/META.yml    2018-02-27 17:07:34.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/META.yml    2018-06-22 19:36:41.000000000 +0200
@@ -23,7 +23,7 @@
   bugtracker: https://github.com/rurban/Cpanel-JSON-XS/issues
   license: http://dev.perl.org/licenses/
   repository: https://github.com/rurban/Cpanel-JSON-XS
-version: '4.02'
+version: '4.04'
 x_contributors:
   - 'Ashley Willis <[email protected]>'
   - 'Daniel Dragan <[email protected]>'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/Makefile.PL 
new/Cpanel-JSON-XS-4.04/Makefile.PL
--- old/Cpanel-JSON-XS-4.02/Makefile.PL 2018-01-31 16:44:15.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/Makefile.PL 2018-06-21 16:33:40.000000000 +0200
@@ -152,6 +152,9 @@
        git push
        git push --tags
 
+xtest :: test
+       \$(MAKE) test TEST_FILES=xt/*.t
+
 const-c.inc const-xs.inc : Makefile.PL
 
 # versioned gcc needs overrides
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/SIGNATURE 
new/Cpanel-JSON-XS-4.04/SIGNATURE
--- old/Cpanel-JSON-XS-4.02/SIGNATURE   2018-02-27 17:07:35.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/SIGNATURE   2018-06-22 19:36:41.000000000 +0200
@@ -15,25 +15,25 @@
 Hash: SHA1
 
 SHA1 b1dc76bb84e636c3d4a32dc6676ae3259fa25aeb .appveyor.yml
-SHA1 dc43f44fb1538b019f6b00c3b761bcdef76e7d2b .travis.yml
+SHA1 216a7f89ddc0c8baa19bc1072d5c2eb485f9c833 .travis.yml
 SHA1 9a56f3b919dfc8fced3803e165a2e38de62646e5 COPYING
-SHA1 ba52a0634a22280970a0d5875dfbd346a717c93c Changes
-SHA1 1bf9b62b55dd217a9ba672051426ad412553c911 MANIFEST
-SHA1 46e271ac18186ef8b8ac1beb90f51e328a276c8b META.json
-SHA1 ce2f9568acd95877b691c1c78b88550b3ae1b529 META.yml
-SHA1 90c4e538c6860094479f80e16d8443cd7fb268f6 Makefile.PL
+SHA1 33f36aeb4f23b9955fdd1cfceb05a472aa9bb8b6 Changes
+SHA1 2155ef71c1f88c6cd2805c5577b7793e45f80767 MANIFEST
+SHA1 d0137c5a756db9f8d230bb26ae310b5af35900ee META.json
+SHA1 ea9908e2535d67b2281dff02d7b2c3661dd68c33 META.yml
+SHA1 9dafd87f1da5bdb765a113da4dc7d8020a6fc385 Makefile.PL
 SHA1 47bd851360546d3ba5f3af787396efb6ef5b698c README
-SHA1 15a9866b537532eb500edfe215ecf890a9578c89 XS.pm
-SHA1 0c6759832a74f44ae8d6e97d6f3efe8ff7fa9097 XS.xs
+SHA1 1d53a5249f2402c5ac1a6dbbeea2582cea958824 XS.pm
+SHA1 b19eb17322ddb70c7712bc21f0edac831c92fe71 XS.xs
 SHA1 04d2fb4de419fdd82b8e9837a939bb55ee4b478a XS/Boolean.pm
-SHA1 153425c6737264b4e964cb5d6e60c09f4964f804 XS/Type.pm
-SHA1 9e4b04d1af085e6959aaed51734475d350136392 bin/cpanel_json_xs
+SHA1 2e4fa239d50b9f4e692143b49b4a355de91d1348 XS/Type.pm
+SHA1 7a3ec155fe1cd51bc4bf17bb3b0b5d4520439de1 bin/cpanel_json_xs
 SHA1 ea72bbe602baaabdd0004ef1d7e7cc3334b42bb4 eg/bench
 SHA1 6e5d2153e1931be4e416c8feef7f7dfcab0f91b4 ppport.h
 SHA1 f7101031fd3fde35fe2421a07ab6cee8a822c00c t/00_load.t
 SHA1 c8f0471da3ab4cab5e197a5362e24c0e2958f589 t/01_utf8.t
 SHA1 9cf542e0bf68c90749420c7d07d7be80e1860592 t/02_error.t
-SHA1 b8c45ed875549c5cbdcc17ea5cd65894bb8d730b t/03_types.t
+SHA1 72ec0a2671be565b60e6b1b80ac13a0c1913a003 t/03_types.t
 SHA1 d876bdffc381f4f67ec90f9c331e3ec2138946e2 t/04_dwiw_encode.t
 SHA1 94b1130a9b760102e0a24ad518f1e7439ef9122c t/05_dwiw_decode.t
 SHA1 188bcca275446893767fec9d945ac2b5afb83186 t/06_pc_pretty.t
@@ -48,14 +48,14 @@
 SHA1 446e9e23fbb26aca73c0c1cb168c6c31a68c9fb8 t/108_decode.t
 SHA1 d4d774595e581777fb13219a211c819c1d2f8575 t/109_encode.t
 SHA1 849b88cb5f17ca6c2324c78e1c4cb1d7857caccb t/10_pc_keysort.t
-SHA1 c7eafd2e355b664d969f9ca2d5a9874e70cc0396 t/110_bignum.t
+SHA1 ce50db81e59cca22ad32947f0dacaca7dca5212d t/110_bignum.t
 SHA1 b007b686bb590e5eed3976edc78310437ae169d4 t/112_upgrade.t
 SHA1 01a0a0644343059c7185cb0b3b00b869d5211e1d t/113_overloaded_eq.t
 SHA1 8dece990d5b07df0ae1b6364caefced774cb587d t/114_decode_prefix.t
 SHA1 eb050780996f1e428c87bf6375415ca4c863cbb2 t/115_tie_ixhash.t
 SHA1 3477b0490b8666e451ac15df97f9f35d72c946b1 t/116_incr_parse_fixed.t
 SHA1 25ca035b576130cf560953df4e9daf68bdd96c3c t/117_numbers.t
-SHA1 a6aa582ee4245d0db8e4e93f2701e15d675ea2f2 t/118_type.t
+SHA1 0370aa1cb4188804d66bdf2e33fb9554210db786 t/118_type.t
 SHA1 d1003d09b5da3609977362bcda64b2c593039a6b t/11_pc_expo.t
 SHA1 c0037e62cefc891df4bb84a110051963a60e9f8c t/12_blessed.t
 SHA1 4d553fd6b5e4486f087babff2946e0cb4b2c38fb t/13_limit.t
@@ -87,7 +87,6 @@
 SHA1 e5e4ea9e68154f9adb4e5e19a86c96efb1704d02 t/99_binary.t
 SHA1 e6078e2fc5c375d45498494bb91487834601a189 t/_unicode_handling.pm
 SHA1 ef62decbf1634f795ef03babe0b36ab9855f263b t/appveyor-test.bat
-SHA1 483157c2a683750b52011f4b6cc00fc3b4381d9a t/gh70-asan.t
 SHA1 413be8df242f37f68aa3841888174e545cba5b2f 
t/test_parsing/i_number_neg_int_huge_exp.json
 SHA1 fa1cc74fc07e84b1a18883a4f5e85472c41df793 
t/test_parsing/i_number_pos_double_huge_exp.json
 SHA1 143980cf8623793b0bf74cd81c0dc50b0f1d3dd3 
t/test_parsing/i_object_key_lone_2nd_surrogate.json
@@ -424,20 +423,21 @@
 SHA1 ade4378e095c85a40bbb02707ac5e789f1444e38 
t/test_transform/string_3_escaped_invalid_codepoints.json
 SHA1 c88b7e7a5f16ec3666db92cfee475938a9c0fde2 
t/test_transform/string_3_invalid_codepoints.json
 SHA1 4f9698c20ad9fd2c7c975e5426fc84d3aab0360f 
t/test_transform/string_with_escaped_NULL.json
-SHA1 5cd847ba5ed5d1a90807dbf8891bf1690918cb5e t/z_kwalitee.t
-SHA1 6dfd7f5112f80b65e84916c780a0b1a71aad32dc t/z_leaktrace.t
-SHA1 c14f6843c1c2b15bb6f94a807105f76eba1abfc2 t/z_manifest.t
-SHA1 e3259ac6c4bd7f3349cf6f2ff829827483bc749d t/z_meta.t
-SHA1 204e8376b847824292d6630be5b0ecfb54ad9a2b t/z_perl_minimum_version.t
-SHA1 145d0e1f46ee50944c4a8e5ea67c73b39571eab9 t/z_pod-coverage.t
-SHA1 2eb526b1649c6306df677d7ae63433856b672476 t/z_pod-spell-mistakes.t
-SHA1 7d23c6d90a9de3254b1b8eb05eaa902ccefd876d t/z_pod-spelling.t
-SHA1 8db603172315dd0853ecc383dba4945c5b673e8f t/z_pod.t
 SHA1 3b92cafada1b683bbf03593d22eb40671e744bc7 t/zero-mojibake.t
 SHA1 e93c9b53438be114c25aa426742e24f4343057a7 typemap
+SHA1 483157c2a683750b52011f4b6cc00fc3b4381d9a xt/gh70-asan.t
+SHA1 5cd847ba5ed5d1a90807dbf8891bf1690918cb5e xt/kwalitee.t
+SHA1 6dfd7f5112f80b65e84916c780a0b1a71aad32dc xt/leaktrace.t
+SHA1 c14f6843c1c2b15bb6f94a807105f76eba1abfc2 xt/manifest.t
+SHA1 e3259ac6c4bd7f3349cf6f2ff829827483bc749d xt/meta.t
+SHA1 204e8376b847824292d6630be5b0ecfb54ad9a2b xt/perl_minimum_version.t
+SHA1 145d0e1f46ee50944c4a8e5ea67c73b39571eab9 xt/pod-coverage.t
+SHA1 2eb526b1649c6306df677d7ae63433856b672476 xt/pod-spell-mistakes.t
+SHA1 e6c3af30d25076f8eb7b700ef1645625883dda50 xt/pod-spelling.t
+SHA1 8db603172315dd0853ecc383dba4945c5b673e8f xt/pod.t
 -----BEGIN PGP SIGNATURE-----
 
-iF0EARECAB0WIQRZHhhUcL58V8z0UW2abZJij/3JQgUCWpWCRwAKCRCabZJij/3J
-Qs0GAJ4tQWYKrPaBRd4/ES9m+QR/ttzxpACeLQvwpxrQrHStNASalVChSQGyjJg=
-=x/y2
+iF0EARECAB0WIQRZHhhUcL58V8z0UW2abZJij/3JQgUCWy0zqQAKCRCabZJij/3J
+QppPAJ9FbDAYbUxQ5BujNq6U+UGUgsYgIACePLJyw6GOSLjSKUMbZedtbKPU5is=
+=QG3H
 -----END PGP SIGNATURE-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/XS/Type.pm 
new/Cpanel-JSON-XS-4.04/XS/Type.pm
--- old/Cpanel-JSON-XS-4.02/XS/Type.pm  2018-01-30 10:51:50.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/XS/Type.pm  2018-06-21 13:18:27.000000000 +0200
@@ -9,7 +9,7 @@
 =head1 SYNOPSIS
 
  use Cpanel::JSON::XS;
- use Cpanel::JSON::XS::Type
+ use Cpanel::JSON::XS::Type;
 
  encode_json([10, "10", 10.25], [JSON_TYPE_INT, JSON_TYPE_INT, 
JSON_TYPE_STRING]);
  # '[10,10,"10.25"]'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/XS.pm 
new/Cpanel-JSON-XS-4.04/XS.pm
--- old/Cpanel-JSON-XS-4.02/XS.pm       2018-02-27 17:02:01.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/XS.pm       2018-06-22 19:31:51.000000000 +0200
@@ -1,5 +1,5 @@
 package Cpanel::JSON::XS;
-our $VERSION = '4.02';
+our $VERSION = '4.04';
 our $XS_VERSION = $VERSION;
 # $VERSION = eval $VERSION;
 
@@ -2224,6 +2224,10 @@
         return $obj ? 1 == $op : 0 == $op;
       }
     },
+    'ne'     => sub {
+      my ($obj, $op) = ref ($_[0]) ? ($_[0], $_[1]) : ($_[1], $_[0]);
+      return !($obj eq $op);
+    },
     fallback => 1);
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/XS.xs 
new/Cpanel-JSON-XS-4.04/XS.xs
--- old/Cpanel-JSON-XS-4.02/XS.xs       2018-02-27 17:03:07.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/XS.xs       2018-06-21 16:33:55.000000000 +0200
@@ -1416,6 +1416,35 @@
       SvREFCNT_dec(rv);
     }
   }
+  /* if ALLOW_BIGNUM and Math::Big* and NaN => according to stringify_infnan */
+  if (UNLIKELY(
+        (enc->json.flags & F_ALLOW_BIGNUM)
+        && str
+        && SvROK(sv)
+        && (memEQc(str, "NaN") || memEQc(str, "nan") ||
+            memEQc(str, "inf") || memEQc(str, "-inf"))))
+  {
+    HV *stash = SvSTASH(SvRV(sv));
+    if (stash
+        && ((stash == gv_stashpvn ("Math::BigInt", sizeof("Math::BigInt")-1, 
0)) ||
+            (stash == gv_stashpvn ("Math::BigFloat", 
sizeof("Math::BigFloat")-1, 0))))
+    {
+      if (enc->json.infnan_mode == 0) {
+        encode_const_str (aTHX_ enc, "null", 4, 0);
+        if (pv) SvREFCNT_dec(pv);
+        return;
+      } else if (enc->json.infnan_mode == 3) {
+        if (memEQc(str, "NaN") || memEQc(str, "nan"))
+          encode_const_str (aTHX_ enc, "nan", 3, 0);
+        else if (memEQc(str, "inf"))
+          encode_const_str (aTHX_ enc, "inf", 3, 0);
+        else
+          encode_const_str (aTHX_ enc, "-inf", 4, 0);
+        if (pv) SvREFCNT_dec(pv);
+        return;
+      }
+    }
+  }
   if (!str)
     encode_const_str (aTHX_ enc, "null", 4, 0);
   else {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/bin/cpanel_json_xs 
new/Cpanel-JSON-XS-4.04/bin/cpanel_json_xs
--- old/Cpanel-JSON-XS-4.02/bin/cpanel_json_xs  2016-03-02 22:29:15.000000000 
+0100
+++ new/Cpanel-JSON-XS-4.04/bin/cpanel_json_xs  2018-06-21 13:18:27.000000000 
+0200
@@ -44,7 +44,7 @@
 
 =item storable-file - a Storable file (Storable has two incompatible formats)
 
-=item bencode - use Convert::Bencode, if available (used by torrent files, 
among others)
+=item bencode - uses one of Net::BitTorrent::Protocol::BEP03::Bencode, Bencode 
or the broken Convert::Bencode, if available (used by torrent files, among 
others)
 
 =item clzf - Compress::LZF format (requires that module to be installed)
 
@@ -62,6 +62,8 @@
 
 =item string - do not attempt to decode the file data
 
+=item sereal - Sereal (via Sereal::Decoder)
+
 =item none - nothing is read, creates an C<undef> scalar - mainly useful with 
C<-e>
 
 =back
@@ -93,7 +95,7 @@
 
 =item storable-file - a Storable file in network format (Storable has two 
incompatible formats)
 
-=item bencode - use Convert::Bencode, if available (used by torrent files, 
among others)
+=item bencode - uses one of Net::BitTorrent::Protocol::BEP03::Bencode, Bencode 
or the broken Convert::Bencode, if available (used by torrent files, among 
others)
 
 =item clzf - Compress::LZF format
 
@@ -111,6 +113,8 @@
 
 =item string - writes the data out as if it were a string
 
+=item sereal - Sereal (via Sereal::Encoder)
+
 =item none - nothing gets written, mainly useful together with C<-e>
 
 Note that Data::Dumper doesn't handle self-referential data structures
@@ -225,13 +229,22 @@
    },
    "storable"      => sub { Storable::thaw $_ },
    "storable-file" => sub { open my $fh, "<", \$_; Storable::fd_retrieve $fh },
-   "bencode"       => sub { require Convert::Bencode; 
Convert::Bencode::bdecode ($_) },
+   "bencode"       => sub {
+      if (eval {require Net::BitTorrent::Protocol::BEP03::Bencode }) {
+        return Net::BitTorrent::Protocol::BEP03::Bencode::bdecode ($_);
+      }
+      if (eval {require Bencode}) {
+        return Bencode::bdecode ($_);
+      }
+      require Convert::Bencode; return Convert::Bencode::bdecode ($_);
+   },
    "clzf"          => sub { require Compress::LZF; Compress::LZF::sthaw ($_) },
    "yaml"          => sub { require YAML; YAML::Load ($_) },
    "yaml-tiny"     => sub { require CPAN::Meta::YAML; CPAN::Meta::YAML::Load 
($_) },
    "yaml-xs"       => sub { require YAML::XS; YAML::XS::Load ($_) },
    "yaml-syck"     => sub { require YAML::Syck; YAML::Syck::Load ($_) },
    "cbor"          => sub { require CBOR::XS; CBOR::XS::decode_cbor ($_) },
+   "sereal"        => sub { require Sereal::Decoder; 
Sereal::Decoder::decode_sereal ($_) },
    "eval"          => sub { my $v = eval "no strict; no warnings; no 
utf8;\n#line 1 \"input\"\n$_"; die "$@" if $@; $v },
 );
 
@@ -254,7 +267,15 @@
    "storable"      => sub { Storable::nfreeze $_ },
    "storable-file" => sub { open my $fh, ">", \my $buf; Storable::nstore_fd 
$_, $fh; $buf },
 
-   "bencode"       => sub { require Convert::Bencode; 
Convert::Bencode::bencode ($_) },
+   "bencode"       => sub {
+      if (eval {require Net::BitTorrent::Protocol::BEP03::Bencode }) {
+        return Net::BitTorrent::Protocol::BEP03::Bencode::bencode ($_);
+      }
+      if (eval {require Bencode}) {
+        return Bencode::bencode ($_);
+      }
+      require Convert::Bencode; return Convert::Bencode::bencode ($_);
+   },
    "clzf"          => sub { require Compress::LZF; Compress::LZF::sfreeze_cr 
($_) },
    "yaml"          => sub { require YAML; YAML::Dump ($_) },
    "yaml-tiny"     => sub { require CPAN::Meta::YAML; CPAN::Meta::YAML::Dump 
($_) },
@@ -275,6 +296,7 @@
       local $Data::Dump::TRY_BASE64 = 0;
       Data::Dump::dump ($_) . "\n"
    },
+   "sereal"        => sub { require Sereal::Encoder; 
Sereal::Encoder::encode_sereal ($_) },
 );
 
 $F{$opt_from}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/t/03_types.t 
new/Cpanel-JSON-XS-4.04/t/03_types.t
--- old/Cpanel-JSON-XS-4.02/t/03_types.t        2018-01-29 18:15:40.000000000 
+0100
+++ new/Cpanel-JSON-XS-4.04/t/03_types.t        2018-06-21 13:18:27.000000000 
+0200
@@ -1,4 +1,4 @@
-BEGIN { $| = 1; print "1..86\n"; }
+BEGIN { $| = 1; print "1..87\n"; }
 use utf8;
 use Cpanel::JSON::XS;
 
@@ -19,6 +19,7 @@
 ok (Cpanel::JSON::XS::is_bool $false);
 ok ($false eq "0", "false: eq $false");
 ok ($true eq "true", "true: eq $true");
+ok (!($true ne "true"), "ne operator test for !(true: ne $true)");
 ok ("$false" eq "0",     "false: stringified $false eq 0");
 #ok ("$false" eq "false", "false: stringified $false eq false");
 #ok ("$true" eq "1",    "true: stringified $true eq 1");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/t/110_bignum.t 
new/Cpanel-JSON-XS-4.04/t/110_bignum.t
--- old/Cpanel-JSON-XS-4.02/t/110_bignum.t      2017-03-29 11:51:37.000000000 
+0200
+++ new/Cpanel-JSON-XS-4.04/t/110_bignum.t      2018-06-21 16:33:40.000000000 
+0200
@@ -5,7 +5,9 @@
   eval q| require Math::BigInt |;
   $has_bignum = $@ ? 0 : 1;
 }
-use Test::More $has_bignum ? (tests => 10) : (skip_all => "Can't load 
Math::BigInt");
+use Test::More $has_bignum
+  ? (tests => 17)
+  : (skip_all => "Can't load Math::BigInt");
 use Cpanel::JSON::XS;
 use Devel::Peek;
 
@@ -52,3 +54,27 @@
 
 is( "$num", '2.0000000000000000001', 'decode bigfloat inside structure' )
   or Dump $num;
+
+my $bignan = Math::BigInt->new("NaN");
+my $nan = $json->encode($bignan);
+is( "$nan", 'null', 'nan default' );
+$nan = $json->stringify_infnan(0)->encode($bignan);
+is( "$nan", 'null', 'nan null' );
+$nan = $json->stringify_infnan(3)->encode($bignan);
+is( "$nan", 'nan', 'nan stringify' );
+
+my $biginf = Math::BigInt->new("Inf");
+#note $biginf;
+my $inf = $json->stringify_infnan(0)->encode($biginf);
+is( "$inf", 'null', 'inf null' );
+my $exp = "$biginf" =~ /nan/i ? "nan" : "inf";
+$inf = $json->stringify_infnan(3)->encode($biginf);
+is( "$inf", $exp, 'inf stringify' );
+
+$biginf = Math::BigInt->new("-Inf");
+$inf = $json->stringify_infnan(0)->encode($biginf);
+#note $biginf;
+is( "$inf", 'null', '-inf default' );
+$exp = "$biginf" =~ /nan/i ? "nan" : "-inf";
+$inf = $json->stringify_infnan(3)->encode($biginf);
+is( "$inf", $exp, '-inf stringify' );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/t/118_type.t 
new/Cpanel-JSON-XS-4.04/t/118_type.t
--- old/Cpanel-JSON-XS-4.02/t/118_type.t        2018-01-30 10:51:50.000000000 
+0100
+++ new/Cpanel-JSON-XS-4.04/t/118_type.t        2018-06-21 13:18:27.000000000 
+0200
@@ -3,6 +3,11 @@
 
 use Cpanel::JSON::XS;
 use Cpanel::JSON::XS::Type;
+BEGIN {
+  if ($] < 5.014) {
+    use Test::More skip_all => 'This test requires 5.14 - stacked labels';
+  }
+}
 
 use Test::More tests => 244;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/t/gh70-asan.t 
new/Cpanel-JSON-XS-4.04/t/gh70-asan.t
--- old/Cpanel-JSON-XS-4.02/t/gh70-asan.t       2016-10-07 19:18:15.000000000 
+0200
+++ new/Cpanel-JSON-XS-4.04/t/gh70-asan.t       1970-01-01 01:00:00.000000000 
+0100
@@ -1,12 +0,0 @@
-#! perl
-# check a too short new() argument to memcmp, only with asan or valgrind.
-# GH #70
-
-use Test::Simple tests => 1;
-
-package J;
-use base "Cpanel::JSON::XS";
-J->new;
-
-package main;
-ok(1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/t/z_kwalitee.t 
new/Cpanel-JSON-XS-4.04/t/z_kwalitee.t
--- old/Cpanel-JSON-XS-4.02/t/z_kwalitee.t      2016-01-10 17:47:50.000000000 
+0100
+++ new/Cpanel-JSON-XS-4.04/t/z_kwalitee.t      1970-01-01 01:00:00.000000000 
+0100
@@ -1,26 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use Test::More;
-use Config;
-
-plan skip_all => 'requires Test::More 0.88' if Test::More->VERSION < 0.88;
-
-plan skip_all => 'This test is only run for the module author'
-  unless -d '.git' || $ENV{AUTHOR_TESTING} || $ENV{RELEASE_TESTING};
-
-# Missing XS dependencies are usually not caught by EUMM
-# And they are usually only XS-loaded by the importer, not require.
-for (qw( Class::XSAccessor Text::CSV_XS List::MoreUtils )) {
-  eval "use $_;";
-  plan skip_all => "$_ required for Test::Kwalitee"
-    if $@;
-}
-eval "require Test::Kwalitee;";
-plan skip_all => "Test::Kwalitee required"
-  if $@;
-
-plan skip_all => 'Test::Kwalitee fails with clang -faddress-sanitizer'
-  if $Config{ccflags} =~ /-faddress-sanitizer/;
-
-Test::Kwalitee->import( tests => [ qw( -use_strict ) ] );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/t/z_leaktrace.t 
new/Cpanel-JSON-XS-4.04/t/z_leaktrace.t
--- old/Cpanel-JSON-XS-4.02/t/z_leaktrace.t     2015-01-31 20:57:23.000000000 
+0100
+++ new/Cpanel-JSON-XS-4.04/t/z_leaktrace.t     1970-01-01 01:00:00.000000000 
+0100
@@ -1,24 +0,0 @@
-#!perl -w
-# note that does not catch the leaking XS context cxt->sv_json #19
-# even valgrind does not catch it
-
-use strict;
-use constant HAS_LEAKTRACE => eval{ require Test::LeakTrace };
-use Test::More HAS_LEAKTRACE ? (tests => 1) : (skip_all => 'require 
Test::LeakTrace');
-use Test::LeakTrace;
-
-use Cpanel::JSON::XS;
-
-leaks_cmp_ok{
-  my $js = Cpanel::JSON::XS->new->convert_blessed->allow_tags->allow_nonref;
-  $js->decode('"\ud801\udc02' . "\x{10204}\"");
-  $js->decode('"\"\n\\\\\r\t\f\b"');
-  $js->ascii->utf8->encode(chr 0x8000);
-
-  sub Temp::TO_JSON { 7 }
-  $js->encode ( bless { k => 1 }, Temp:: );
-
-  sub Temp1::FREEZE { (3,1,2) }
-  $js->encode ( bless { k => 1 }, Temp1:: );
-
-} '<', 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/t/z_manifest.t 
new/Cpanel-JSON-XS-4.04/t/z_manifest.t
--- old/Cpanel-JSON-XS-4.02/t/z_manifest.t      2018-01-30 12:51:22.000000000 
+0100
+++ new/Cpanel-JSON-XS-4.04/t/z_manifest.t      1970-01-01 01:00:00.000000000 
+0100
@@ -1,16 +0,0 @@
-# -*- perl -*-
-use Test::More;
-if (!-d ".git" and $^O != /^(linux|.*bsd|darwin|solaris|sunos|cygwin)$/) {
-  plan skip_all => "requires a git checkout and a unix for git and diff";
-}
-plan tests => 1;
-
-system("git ls-tree -r --name-only HEAD |"
-      ." grep -v '.gitignore' >MANIFEST.git");
-if (-e "MANIFEST.git" && -s "MANIFEST.git") {
-  #diag "MANIFEST.git created with git ls-tree";
-  is(`diff -bu MANIFEST.git MANIFEST`, "", "MANIFEST.git compared to MANIFEST")
-    and unlink "MANIFEST.git";
-} else {
-  ok(1, "skip no git or grep");
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/t/z_meta.t 
new/Cpanel-JSON-XS-4.04/t/z_meta.t
--- old/Cpanel-JSON-XS-4.02/t/z_meta.t  2015-11-29 10:53:54.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/t/z_meta.t  1970-01-01 01:00:00.000000000 +0100
@@ -1,32 +0,0 @@
-# -*- perl -*-
-
-# Test that our META.yml file matches the current specification.
-
-use strict;
-BEGIN {
-  $|  = 1;
-  $^W = 1;
-}
-
-my $MODULE = 'Test::CPAN::Meta 0.12';
-
-# Don't run tests for installs
-use Test::More;
-use Config;
-plan skip_all => 'This test is only run for the module author'
-    unless -d '.git' || $ENV{AUTHOR_TESTING};
-plan skip_all => 'Test::CPAN::Meta fails with clang -faddress-sanitizer'
-  if $Config{ccflags} =~ /-faddress-sanitizer/;
-# META is only generated by make dist
-if (! -f 'META.yml' and -f 'MYMETA.yml') {
-  system "$Config{cp} MYMETA.yml META.yml";
-}
-
-# Load the testing module
-eval "use $MODULE;";
-if ( $@ ) {
-  plan( skip_all => "$MODULE not available for testing" );
-  die "Failed to load required release-testing module $MODULE 0.12"
-    if -d '.git' || $ENV{AUTHOR_TESTING};
-}
-meta_yaml_ok();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/t/z_perl_minimum_version.t 
new/Cpanel-JSON-XS-4.04/t/z_perl_minimum_version.t
--- old/Cpanel-JSON-XS-4.02/t/z_perl_minimum_version.t  2017-07-27 
22:15:44.000000000 +0200
+++ new/Cpanel-JSON-XS-4.04/t/z_perl_minimum_version.t  1970-01-01 
01:00:00.000000000 +0100
@@ -1,33 +0,0 @@
-# -*- perl -*-
-
-# Test that our declared minimum Perl version matches our syntax
-use strict;
-BEGIN {
-  $|  = 1;
-  $^W = 1;
-}
-
-my @MODULES = (
-  'Perl::MinimumVersion 1.20',
-  'Test::MinimumVersion 0.101082',
-);
-
-# Don't run tests during end-user installs
-use Test::More;
-unless (-d '.git' || $ENV{AUTHOR_TESTING}) {
-  plan( skip_all => "Author tests not required for installation" );
-}
-
-# Load the testing modules
-foreach my $MODULE ( @MODULES ) {
-  eval "use $MODULE";
-  if ( $@ ) {
-    plan( skip_all => "$MODULE not available for testing" );
-    die "Failed to load required release-testing module $MODULE"
-      if -d '.git' || $ENV{AUTHOR_TESTING};
-  }
-}
-
-all_minimum_version_ok("5.008"); # but 5.6.2 is allowed dynamically
-
-1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/t/z_pod-coverage.t 
new/Cpanel-JSON-XS-4.04/t/z_pod-coverage.t
--- old/Cpanel-JSON-XS-4.02/t/z_pod-coverage.t  2018-01-30 10:51:49.000000000 
+0100
+++ new/Cpanel-JSON-XS-4.04/t/z_pod-coverage.t  1970-01-01 01:00:00.000000000 
+0100
@@ -1,18 +0,0 @@
-# -*- perl -*-
-use strict;
-use warnings;
-use Test::More;
-
-plan skip_all => 'done_testing requires Test::More 0.88' if 
Test::More->VERSION < 0.88;
-plan skip_all => 'This test is only run for the module author'
-    unless -d '.git' || $ENV{AUTHOR_TESTING};
-
-eval "use Test::Pod::Coverage 1.04";
-plan skip_all => "Test::Pod::Coverage 1.04 required for testing POD coverage"
-    if $@;
-
-for (all_modules()) {
-  pod_coverage_ok($_, { trustme => [qr/^JSON_TYPE_.*_(?:NULL|CLASS)$/] }) 
unless /XXX/;
-}
-
-done_testing();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/t/z_pod-spell-mistakes.t 
new/Cpanel-JSON-XS-4.04/t/z_pod-spell-mistakes.t
--- old/Cpanel-JSON-XS-4.02/t/z_pod-spell-mistakes.t    2015-12-03 
12:56:31.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/t/z_pod-spell-mistakes.t    1970-01-01 
01:00:00.000000000 +0100
@@ -1,23 +0,0 @@
-# -*- perl -*-
-use strict;
-use Test::More;
-
-plan skip_all => 'This test is only run for the module author'
-  unless -d '.git' || $ENV{AUTHOR_TESTING};
-
-eval "use Pod::Spell::CommonMistakes;";
-plan skip_all => "Pod::Spell::CommonMistakes required"
-  if $@;
-plan tests => 3;
-
-for my $f (qw(XS.pm XS/Boolean.pm bin/cpanel_json_xs)) {
-  my $r = Pod::Spell::CommonMistakes::check_pod($f);
-  if ( keys %$r == 0 ) {
-    ok(1, "$f");
-  } else {
-    ok(0, "$f");
-    foreach my $k ( keys %$r ) {
-      diag "  Found: '$k' - Possible spelling: '$r->{$k}'?";
-    }
-  }
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/t/z_pod-spelling.t 
new/Cpanel-JSON-XS-4.04/t/z_pod-spelling.t
--- old/Cpanel-JSON-XS-4.02/t/z_pod-spelling.t  2018-01-30 10:51:49.000000000 
+0100
+++ new/Cpanel-JSON-XS-4.04/t/z_pod-spelling.t  1970-01-01 01:00:00.000000000 
+0100
@@ -1,130 +0,0 @@
-# -*- perl -*-
-use strict;
-use Test::More;
-
-plan skip_all => 'This test is only run for the module author'
-  unless -d '.git' || $ENV{AUTHOR_TESTING};
-
-eval "use Test::Spelling;";
-plan skip_all => "Test::Spelling required"
-  if $@;
-
-add_stopwords(<DATA>);
-all_pod_files_spelling_ok();
-
-__DATA__
-BMP
-BOM
-BOM's
-BSON
-CBOR
-CVE
-Cpanel
-Crockford
-Crockford's
-DESERIALIZATION
-Deserializing
-ECMAscript
-GPL
-GoodData
-IETF
-Iceweasel
-JSON
-JSON's
-KOI
-Lehmann
-Lehmann
-MLEHMANN
-Mojo
-MongoDB
-MovableType
-NOK
-NaN's
-OO
-QNAN
-Reini
-SNAN
-STDIN
-STDOUT
-SixApart
-Storable
-TCP
-UTF
-XSS
-amd
-arg
-arrayrefs
-ascii
-autodetection
-backported
-backrefs
-bencode
-bugtracker
-cPanel
-cbor
-classname
-clzf
-codepoints
-codeset
-codesets
-commandline
-conformant
-cpan
-datastructure
-deserialization
-deserialize
-deserialized
-deserializer
-deserializing
-fromformat
-github
-hashrefs
-interop
-interoperability
-ithread
-ithreads
-javascript
-javascript's
-json
-latin
-le
-nan
-nd
-ness
-noncharacters
-nonref
-numifying
-onwards
-optimizations
-parsable
-parsers
-postprocessing
-ppport
-qnan
-queryable
-recurses
-recursing
-repo
-resizes
-roundtripping
-runtime
-sanify
-serializer
-serializers
-snan
-src
-storable
-stringifies
-stringifying
-superset
-syck
-testsuite
-th
-toformat
-typeless
-un
-unblessed
-unicode
-utf
-xs
-yaml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/t/z_pod.t 
new/Cpanel-JSON-XS-4.04/t/z_pod.t
--- old/Cpanel-JSON-XS-4.02/t/z_pod.t   2015-12-03 19:26:20.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/t/z_pod.t   1970-01-01 01:00:00.000000000 +0100
@@ -1,10 +0,0 @@
-# -*- perl -*-
-use strict;
-use Test::More;
-
-plan skip_all => 'This test is only run for the module author'
-  unless -d '.git' || $ENV{AUTHOR_TESTING};
-
-eval "use Test::Pod 1.00";
-plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
-all_pod_files_ok();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/xt/gh70-asan.t 
new/Cpanel-JSON-XS-4.04/xt/gh70-asan.t
--- old/Cpanel-JSON-XS-4.02/xt/gh70-asan.t      1970-01-01 01:00:00.000000000 
+0100
+++ new/Cpanel-JSON-XS-4.04/xt/gh70-asan.t      2018-06-21 16:33:40.000000000 
+0200
@@ -0,0 +1,12 @@
+#! perl
+# check a too short new() argument to memcmp, only with asan or valgrind.
+# GH #70
+
+use Test::Simple tests => 1;
+
+package J;
+use base "Cpanel::JSON::XS";
+J->new;
+
+package main;
+ok(1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/xt/kwalitee.t 
new/Cpanel-JSON-XS-4.04/xt/kwalitee.t
--- old/Cpanel-JSON-XS-4.02/xt/kwalitee.t       1970-01-01 01:00:00.000000000 
+0100
+++ new/Cpanel-JSON-XS-4.04/xt/kwalitee.t       2018-06-21 16:33:40.000000000 
+0200
@@ -0,0 +1,26 @@
+# -*- perl -*-
+use strict;
+use warnings;
+use Test::More;
+use Config;
+
+plan skip_all => 'requires Test::More 0.88' if Test::More->VERSION < 0.88;
+
+plan skip_all => 'This test is only run for the module author'
+  unless -d '.git' || $ENV{AUTHOR_TESTING} || $ENV{RELEASE_TESTING};
+
+# Missing XS dependencies are usually not caught by EUMM
+# And they are usually only XS-loaded by the importer, not require.
+for (qw( Class::XSAccessor Text::CSV_XS List::MoreUtils )) {
+  eval "use $_;";
+  plan skip_all => "$_ required for Test::Kwalitee"
+    if $@;
+}
+eval "require Test::Kwalitee;";
+plan skip_all => "Test::Kwalitee required"
+  if $@;
+
+plan skip_all => 'Test::Kwalitee fails with clang -faddress-sanitizer'
+  if $Config{ccflags} =~ /-faddress-sanitizer/;
+
+Test::Kwalitee->import( tests => [ qw( -use_strict ) ] );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/xt/leaktrace.t 
new/Cpanel-JSON-XS-4.04/xt/leaktrace.t
--- old/Cpanel-JSON-XS-4.02/xt/leaktrace.t      1970-01-01 01:00:00.000000000 
+0100
+++ new/Cpanel-JSON-XS-4.04/xt/leaktrace.t      2018-06-21 16:33:40.000000000 
+0200
@@ -0,0 +1,24 @@
+#!perl -w
+# note that does not catch the leaking XS context cxt->sv_json #19
+# even valgrind does not catch it
+
+use strict;
+use constant HAS_LEAKTRACE => eval{ require Test::LeakTrace };
+use Test::More HAS_LEAKTRACE ? (tests => 1) : (skip_all => 'require 
Test::LeakTrace');
+use Test::LeakTrace;
+
+use Cpanel::JSON::XS;
+
+leaks_cmp_ok{
+  my $js = Cpanel::JSON::XS->new->convert_blessed->allow_tags->allow_nonref;
+  $js->decode('"\ud801\udc02' . "\x{10204}\"");
+  $js->decode('"\"\n\\\\\r\t\f\b"');
+  $js->ascii->utf8->encode(chr 0x8000);
+
+  sub Temp::TO_JSON { 7 }
+  $js->encode ( bless { k => 1 }, Temp:: );
+
+  sub Temp1::FREEZE { (3,1,2) }
+  $js->encode ( bless { k => 1 }, Temp1:: );
+
+} '<', 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/xt/manifest.t 
new/Cpanel-JSON-XS-4.04/xt/manifest.t
--- old/Cpanel-JSON-XS-4.02/xt/manifest.t       1970-01-01 01:00:00.000000000 
+0100
+++ new/Cpanel-JSON-XS-4.04/xt/manifest.t       2018-06-21 16:33:40.000000000 
+0200
@@ -0,0 +1,16 @@
+# -*- perl -*-
+use Test::More;
+if (!-d ".git" and $^O != /^(linux|.*bsd|darwin|solaris|sunos|cygwin)$/) {
+  plan skip_all => "requires a git checkout and a unix for git and diff";
+}
+plan tests => 1;
+
+system("git ls-tree -r --name-only HEAD |"
+      ." grep -v '.gitignore' >MANIFEST.git");
+if (-e "MANIFEST.git" && -s "MANIFEST.git") {
+  #diag "MANIFEST.git created with git ls-tree";
+  is(`diff -bu MANIFEST.git MANIFEST`, "", "MANIFEST.git compared to MANIFEST")
+    and unlink "MANIFEST.git";
+} else {
+  ok(1, "skip no git or grep");
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/xt/meta.t 
new/Cpanel-JSON-XS-4.04/xt/meta.t
--- old/Cpanel-JSON-XS-4.02/xt/meta.t   1970-01-01 01:00:00.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/xt/meta.t   2018-06-21 16:33:40.000000000 +0200
@@ -0,0 +1,32 @@
+# -*- perl -*-
+
+# Test that our META.yml file matches the current specification.
+
+use strict;
+BEGIN {
+  $|  = 1;
+  $^W = 1;
+}
+
+my $MODULE = 'Test::CPAN::Meta 0.12';
+
+# Don't run tests for installs
+use Test::More;
+use Config;
+plan skip_all => 'This test is only run for the module author'
+    unless -d '.git' || $ENV{AUTHOR_TESTING};
+plan skip_all => 'Test::CPAN::Meta fails with clang -faddress-sanitizer'
+  if $Config{ccflags} =~ /-faddress-sanitizer/;
+# META is only generated by make dist
+if (! -f 'META.yml' and -f 'MYMETA.yml') {
+  system "$Config{cp} MYMETA.yml META.yml";
+}
+
+# Load the testing module
+eval "use $MODULE;";
+if ( $@ ) {
+  plan( skip_all => "$MODULE not available for testing" );
+  die "Failed to load required release-testing module $MODULE 0.12"
+    if -d '.git' || $ENV{AUTHOR_TESTING};
+}
+meta_yaml_ok();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/xt/perl_minimum_version.t 
new/Cpanel-JSON-XS-4.04/xt/perl_minimum_version.t
--- old/Cpanel-JSON-XS-4.02/xt/perl_minimum_version.t   1970-01-01 
01:00:00.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/xt/perl_minimum_version.t   2018-06-21 
16:33:40.000000000 +0200
@@ -0,0 +1,33 @@
+# -*- perl -*-
+
+# Test that our declared minimum Perl version matches our syntax
+use strict;
+BEGIN {
+  $|  = 1;
+  $^W = 1;
+}
+
+my @MODULES = (
+  'Perl::MinimumVersion 1.20',
+  'Test::MinimumVersion 0.101082',
+);
+
+# Don't run tests during end-user installs
+use Test::More;
+unless (-d '.git' || $ENV{AUTHOR_TESTING}) {
+  plan( skip_all => "Author tests not required for installation" );
+}
+
+# Load the testing modules
+foreach my $MODULE ( @MODULES ) {
+  eval "use $MODULE";
+  if ( $@ ) {
+    plan( skip_all => "$MODULE not available for testing" );
+    die "Failed to load required release-testing module $MODULE"
+      if -d '.git' || $ENV{AUTHOR_TESTING};
+  }
+}
+
+all_minimum_version_ok("5.008"); # but 5.6.2 is allowed dynamically
+
+1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/xt/pod-coverage.t 
new/Cpanel-JSON-XS-4.04/xt/pod-coverage.t
--- old/Cpanel-JSON-XS-4.02/xt/pod-coverage.t   1970-01-01 01:00:00.000000000 
+0100
+++ new/Cpanel-JSON-XS-4.04/xt/pod-coverage.t   2018-06-21 16:33:40.000000000 
+0200
@@ -0,0 +1,18 @@
+# -*- perl -*-
+use strict;
+use warnings;
+use Test::More;
+
+plan skip_all => 'done_testing requires Test::More 0.88' if 
Test::More->VERSION < 0.88;
+plan skip_all => 'This test is only run for the module author'
+    unless -d '.git' || $ENV{AUTHOR_TESTING};
+
+eval "use Test::Pod::Coverage 1.04";
+plan skip_all => "Test::Pod::Coverage 1.04 required for testing POD coverage"
+    if $@;
+
+for (all_modules()) {
+  pod_coverage_ok($_, { trustme => [qr/^JSON_TYPE_.*_(?:NULL|CLASS)$/] }) 
unless /XXX/;
+}
+
+done_testing();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/xt/pod-spell-mistakes.t 
new/Cpanel-JSON-XS-4.04/xt/pod-spell-mistakes.t
--- old/Cpanel-JSON-XS-4.02/xt/pod-spell-mistakes.t     1970-01-01 
01:00:00.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/xt/pod-spell-mistakes.t     2018-06-21 
16:33:40.000000000 +0200
@@ -0,0 +1,23 @@
+# -*- perl -*-
+use strict;
+use Test::More;
+
+plan skip_all => 'This test is only run for the module author'
+  unless -d '.git' || $ENV{AUTHOR_TESTING};
+
+eval "use Pod::Spell::CommonMistakes;";
+plan skip_all => "Pod::Spell::CommonMistakes required"
+  if $@;
+plan tests => 3;
+
+for my $f (qw(XS.pm XS/Boolean.pm bin/cpanel_json_xs)) {
+  my $r = Pod::Spell::CommonMistakes::check_pod($f);
+  if ( keys %$r == 0 ) {
+    ok(1, "$f");
+  } else {
+    ok(0, "$f");
+    foreach my $k ( keys %$r ) {
+      diag "  Found: '$k' - Possible spelling: '$r->{$k}'?";
+    }
+  }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/xt/pod-spelling.t 
new/Cpanel-JSON-XS-4.04/xt/pod-spelling.t
--- old/Cpanel-JSON-XS-4.02/xt/pod-spelling.t   1970-01-01 01:00:00.000000000 
+0100
+++ new/Cpanel-JSON-XS-4.04/xt/pod-spelling.t   2018-06-21 16:33:40.000000000 
+0200
@@ -0,0 +1,131 @@
+# -*- perl -*-
+use strict;
+use Test::More;
+
+plan skip_all => 'This test is only run for the module author'
+  unless -d '.git' || $ENV{AUTHOR_TESTING};
+
+eval "use Test::Spelling;";
+plan skip_all => "Test::Spelling required"
+  if $@;
+
+add_stopwords(<DATA>);
+all_pod_files_spelling_ok();
+
+__DATA__
+BMP
+BOM
+BOM's
+BSON
+CBOR
+CVE
+Cpanel
+Crockford
+Crockford's
+DESERIALIZATION
+Deserializing
+ECMAscript
+GPL
+GoodData
+IETF
+Iceweasel
+JSON
+JSON's
+KOI
+Lehmann
+Lehmann
+MLEHMANN
+Mojo
+MongoDB
+MovableType
+NOK
+NaN's
+OO
+QNAN
+Reini
+SNAN
+STDIN
+STDOUT
+SixApart
+Storable
+TCP
+UTF
+XSS
+amd
+arg
+arrayrefs
+ascii
+autodetection
+backported
+backrefs
+bencode
+bugtracker
+cPanel
+cbor
+classname
+clzf
+codepoints
+codeset
+codesets
+commandline
+conformant
+cpan
+datastructure
+deserialization
+deserialize
+deserialized
+deserializer
+deserializing
+fromformat
+github
+hashrefs
+interop
+interoperability
+ithread
+ithreads
+javascript
+javascript's
+json
+latin
+le
+nan
+nd
+ness
+noncharacters
+nonref
+numifying
+onwards
+optimizations
+parsable
+parsers
+postprocessing
+ppport
+qnan
+queryable
+recurses
+recursing
+repo
+resizes
+roundtripping
+runtime
+sanify
+sereal
+serializer
+serializers
+snan
+src
+storable
+stringifies
+stringifying
+superset
+syck
+testsuite
+th
+toformat
+typeless
+un
+unblessed
+unicode
+utf
+xs
+yaml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Cpanel-JSON-XS-4.02/xt/pod.t 
new/Cpanel-JSON-XS-4.04/xt/pod.t
--- old/Cpanel-JSON-XS-4.02/xt/pod.t    1970-01-01 01:00:00.000000000 +0100
+++ new/Cpanel-JSON-XS-4.04/xt/pod.t    2018-06-21 16:33:40.000000000 +0200
@@ -0,0 +1,10 @@
+# -*- perl -*-
+use strict;
+use Test::More;
+
+plan skip_all => 'This test is only run for the module author'
+  unless -d '.git' || $ENV{AUTHOR_TESTING};
+
+eval "use Test::Pod 1.00";
+plan skip_all => "Test::Pod 1.00 required for testing POD" if $@;
+all_pod_files_ok();


Reply via email to