Hello community,
here is the log from the commit of package perl-JSON-Validator for
openSUSE:Factory checked in at 2020-08-17 12:06:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-JSON-Validator (Old)
and /work/SRC/openSUSE:Factory/.perl-JSON-Validator.new.3399 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-JSON-Validator"
Mon Aug 17 12:06:45 2020 rev:21 rq:827148 version:4.02
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-JSON-Validator/perl-JSON-Validator.changes
2020-07-05 01:19:59.613336233 +0200
+++
/work/SRC/openSUSE:Factory/.perl-JSON-Validator.new.3399/perl-JSON-Validator.changes
2020-08-17 12:07:33.234766940 +0200
@@ -1,0 +2,10 @@
+Wed Aug 12 03:09:26 UTC 2020 - Tina Müller <[email protected]>
+
+- updated to 4.02
+ see /usr/share/doc/packages/perl-JSON-Validator/Changes
+
+ 4.02 2020-08-11T13:06:40+0900
+ - Add recursive_data_protection() #220
+ Contributor: Jason Cooper
+
+-------------------------------------------------------------------
Old:
----
JSON-Validator-4.01.tar.gz
New:
----
JSON-Validator-4.02.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-JSON-Validator.spec ++++++
--- /var/tmp/diff_new_pack.iai88G/_old 2020-08-17 12:07:35.558768235 +0200
+++ /var/tmp/diff_new_pack.iai88G/_new 2020-08-17 12:07:35.562768238 +0200
@@ -17,7 +17,7 @@
Name: perl-JSON-Validator
-Version: 4.01
+Version: 4.02
Release: 0
%define cpan_name JSON-Validator
Summary: Validate data against a JSON schema
++++++ JSON-Validator-4.01.tar.gz -> JSON-Validator-4.02.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-4.01/Changes
new/JSON-Validator-4.02/Changes
--- old/JSON-Validator-4.01/Changes 2020-06-30 10:42:08.000000000 +0200
+++ new/JSON-Validator-4.02/Changes 2020-08-11 06:06:40.000000000 +0200
@@ -1,5 +1,9 @@
Revision history for perl distribution JSON-Validator
+4.02 2020-08-11T13:06:40+0900
+ - Add recursive_data_protection() #220
+ Contributor: Jason Cooper
+
4.01 2020-06-30T17:42:08+0900
- Fix combining "allOf" and "not" #218
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-4.01/MANIFEST
new/JSON-Validator-4.02/MANIFEST
--- old/JSON-Validator-4.01/MANIFEST 2020-06-30 10:42:10.000000000 +0200
+++ new/JSON-Validator-4.02/MANIFEST 2020-08-11 06:06:41.000000000 +0200
@@ -105,6 +105,7 @@
t/load-yaml.t
t/more-bundle.t
t/random-errors.t
+t/recursive_data_protection.t
t/relative-ref.t
t/remotes/folder/folderInteger.json
t/remotes/integer.json
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-4.01/META.json
new/JSON-Validator-4.02/META.json
--- old/JSON-Validator-4.01/META.json 2020-06-30 10:42:09.000000000 +0200
+++ new/JSON-Validator-4.02/META.json 2020-08-11 06:06:41.000000000 +0200
@@ -63,6 +63,6 @@
},
"x_IRC" : "irc://irc.freenode.net/#mojo"
},
- "version" : "4.01",
+ "version" : "4.02",
"x_serialization_backend" : "JSON::PP version 4.04"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-4.01/META.yml
new/JSON-Validator-4.02/META.yml
--- old/JSON-Validator-4.01/META.yml 2020-06-30 10:42:09.000000000 +0200
+++ new/JSON-Validator-4.02/META.yml 2020-08-11 06:06:41.000000000 +0200
@@ -32,5 +32,5 @@
homepage: https://mojolicious.org
license: http://www.opensource.org/licenses/artistic-license-2.0
repository: https://github.com/mojolicious/json-validator.git
-version: '4.01'
+version: '4.02'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-4.01/README.md
new/JSON-Validator-4.02/README.md
--- old/JSON-Validator-4.01/README.md 2020-04-08 07:36:21.000000000 +0200
+++ new/JSON-Validator-4.02/README.md 2020-08-11 04:35:21.000000000 +0200
@@ -1,5 +1,5 @@
-# JSON::Validator [](https://travis-ci.org/mojolicious/json-validator)
+# JSON::Validator
A module for validating data against a [JSON
Schema](https://json-schema.org/).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-4.01/lib/JSON/Validator.pm
new/JSON-Validator-4.02/lib/JSON/Validator.pm
--- old/JSON-Validator-4.01/lib/JSON/Validator.pm 2020-06-30
10:42:08.000000000 +0200
+++ new/JSON-Validator-4.02/lib/JSON/Validator.pm 2020-08-11
06:06:40.000000000 +0200
@@ -23,7 +23,7 @@
use constant SPECIFICATION_URL => 'http://json-schema.org/draft-04/schema#';
use constant YAML_SUPPORT => eval 'use YAML::XS 0.67;1';
-our $VERSION = '4.01';
+our $VERSION = '4.02';
our @EXPORT_OK = qw(joi validate_json);
our %SCHEMAS = (
@@ -42,6 +42,8 @@
has formats => sub { shift->_build_formats };
+has recursive_data_protection => 1;
+
sub version {
my $self = shift;
Mojo::Util::deprecated('version() will be removed in future version.');
@@ -340,7 +342,7 @@
my $tx = $self->ua->get($url);
my $err = $tx->error && $tx->error->{message};
- confess "GET $url == $err" if DEBUG and $err;
+ confess "GET $url == $err" if DEBUG and $err;
die "[JSON::Validator] GET $url == $err" if $err;
if ($cache_path
@@ -516,11 +518,11 @@
last if !$ref or ref $ref;
$fqn = $ref =~ m!^/! ? "#$ref" : $ref;
my ($location, $pointer) = split /#/, $fqn, 2;
- $url = $location = _location_to_abs($location, $url);
+ $url = $location = _location_to_abs($location, $url);
$pointer = undef if length $location and !length $pointer;
$pointer = url_unescape $pointer if defined $pointer;
- $fqn = join '#', grep defined, $location, $pointer;
- $other = $self->_resolve($location);
+ $fqn = join '#', grep defined, $location, $pointer;
+ $other = $self->_resolve($location);
if (defined $pointer and length $pointer and $pointer =~ m!^/!) {
$other = Mojo::JSON::Pointer->new($other)->get($pointer);
@@ -567,15 +569,18 @@
if ref $schema eq 'HASH' and $schema->{'$ref'};
return $schema ? () : E $path, [not => 'not'] if is_type $schema, 'BOOL';
- my $seen_addr = join ':', refaddr($schema),
- (ref $data ? refaddr $data : ++$self->{seen}{scalar});
+ my @errors;
+
+ if ($self->recursive_data_protection) {
+ my $seen_addr = join ':', refaddr($schema),
+ (ref $data ? refaddr $data : ++$self->{seen}{scalar});
- # Avoid recursion
- if ($self->{seen}{$seen_addr}) {
- return @{$self->{seen}{$seen_addr}};
+ # Avoid recursion
+ return @{$self->{seen}{$seen_addr}} if $self->{seen}{$seen_addr};
+
+ $self->{seen}{$seen_addr} = \@errors;
}
- $self->{seen}{$seen_addr} = \my @errors;
my $to_json
= (blessed $data and $data->can('TO_JSON')) ? \$data->TO_JSON : undef;
$data = $$to_json if $to_json;
@@ -899,7 +904,7 @@
my @errors = $self->_validate_type_number($_[1], $path, $schema, 'integer');
return @errors if @errors;
- return if $value =~ /^-?\d+$/;
+ return if $value =~ /^-?\d+$/;
return E $path, [integer => type => data_type $value];
}
@@ -1260,6 +1265,23 @@
See L<JSON::Validator::Formats> for a list of supported formats.
+=head2 recursive_data_protection
+
+ my $jv = $jv->recursive_data_protections( $boolean );
+ my $boolean = $jv->recursive_data_protection;
+
+Recursive data protection is active by default, however it can be deactivated
+by assigning a false value to the L</recursive_data_protection> attribute.
+
+Recursive data protection can have a noticeable impact on memory usage when
+validating large data structures. If you are encountering issues with memory
+and you can guarantee that you do not have any loops in your data structure
+then deactivating the recursive data protection may help.
+
+This attribute is EXPERIMENTAL and may change in a future release.
+
+B<Disclaimer: Use at your own risk, if you have any doubt then don't use it>
+
=head2 ua
my $ua = $jv->ua;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/JSON-Validator-4.01/t/recursive_data_protection.t
new/JSON-Validator-4.02/t/recursive_data_protection.t
--- old/JSON-Validator-4.01/t/recursive_data_protection.t 1970-01-01
01:00:00.000000000 +0100
+++ new/JSON-Validator-4.02/t/recursive_data_protection.t 2020-08-11
06:04:07.000000000 +0200
@@ -0,0 +1,46 @@
+use Mojo::Base -strict;
+use JSON::Validator;
+use Mojo::Util 'monkey_patch';
+use Scalar::Util qw(refaddr);
+use Test::More;
+
+my ($original_validate, %ref_counts) = (\&JSON::Validator::_validate);
+monkey_patch 'JSON::Validator', _validate => sub {
+ my ($self, $data, $path, $schema) = @_;
+ $ref_counts{refaddr($data)}++ if ref $data;
+ goto &$original_validate;
+};
+
+for ([1, 1], [0, 3]) {
+ my ($enabled, $exp_ref_counts) = @$_;
+ my $object = {level1 => {level2 => {level3 => 'Test'}}};
+ my $data = [$object, $object, $object];
+
+ %ref_counts = ();
+
+ JSON::Validator->new->recursive_data_protection($enabled)->schema(schema())
+ ->validate($data);
+
+ is $ref_counts{refaddr($object->{level1}{level2})}, $exp_ref_counts,
+ "recursive_data_protection($enabled)";
+}
+
+done_testing;
+
+sub schema {
+ return {
+ type => 'array',
+ items => {
+ type => 'object',
+ properties => {
+ level1 => {
+ type => 'object',
+ properties => {
+ level2 =>
+ {type => 'object', properties => {level3 => {type => 'string'}}}
+ }
+ }
+ }
+ }
+ };
+}