Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package perl-Sereal-Decoder for
openSUSE:Factory checked in at 2023-04-20 16:26:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Sereal-Decoder (Old)
and /work/SRC/openSUSE:Factory/.perl-Sereal-Decoder.new.2023 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Sereal-Decoder"
Thu Apr 20 16:26:03 2023 rev:14 rq:1080877 version:5.004
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Sereal-Decoder/perl-Sereal-Decoder.changes
2023-02-16 16:56:26.722842955 +0100
+++
/work/SRC/openSUSE:Factory/.perl-Sereal-Decoder.new.2023/perl-Sereal-Decoder.changes
2023-04-20 16:26:06.378952925 +0200
@@ -1,0 +2,11 @@
+Thu Apr 20 03:09:34 UTC 2023 - Tina Müller <[email protected]>
+
+- updated to 5.004
+ see /usr/share/doc/packages/perl-Sereal-Decoder/Changes
+
+ 5.004
+ * Fix thaw ordering for frozen objects. Nested THAW operations
+ now happen in the documented LIFO order. Thanks to Marco
+ Fontani for the report.
+
+-------------------------------------------------------------------
Old:
----
Sereal-Decoder-5.003.tar.gz
New:
----
Sereal-Decoder-5.004.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Sereal-Decoder.spec ++++++
--- /var/tmp/diff_new_pack.86BwWV/_old 2023-04-20 16:26:06.834955077 +0200
+++ /var/tmp/diff_new_pack.86BwWV/_new 2023-04-20 16:26:06.838955096 +0200
@@ -18,7 +18,7 @@
%define cpan_name Sereal-Decoder
Name: perl-Sereal-Decoder
-Version: 5.003
+Version: 5.004
Release: 0
License: Artistic-1.0 OR GPL-1.0-or-later
Summary: Binary serialization module for Perl (decoder part)
++++++ Sereal-Decoder-5.003.tar.gz -> Sereal-Decoder-5.004.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Sereal-Decoder-5.003/Changes
new/Sereal-Decoder-5.004/Changes
--- old/Sereal-Decoder-5.003/Changes 2023-02-08 03:33:19.000000000 +0100
+++ new/Sereal-Decoder-5.004/Changes 2023-04-19 11:00:33.000000000 +0200
@@ -5,6 +5,11 @@
* of the decoder before upgrading to version 5 of the *
* encoder! *
****************************************************************
+5.004
+ * Fix thaw ordering for frozen objects. Nested THAW operations
+ now happen in the documented LIFO order. Thanks to Marco
+ Fontani for the report.
+
5.003
* Production release of 5.002_001 and 5.002_002
* OpenBSD build fixes. Gracious thanks to Andrew Hewus Fresh
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Sereal-Decoder-5.003/MANIFEST
new/Sereal-Decoder-5.004/MANIFEST
--- old/Sereal-Decoder-5.003/MANIFEST 2023-02-08 03:35:19.000000000 +0100
+++ new/Sereal-Decoder-5.004/MANIFEST 2023-04-19 15:13:42.000000000 +0200
@@ -54,6 +54,7 @@
t/071_alias_reserealize.t
t/080_set_readonly.t
t/090_thaw.t
+t/091_thaw_order.t
t/110_nobless.t
t/150_dec_exception.t
t/155_zipbomb.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Sereal-Decoder-5.003/META.json
new/Sereal-Decoder-5.004/META.json
--- old/Sereal-Decoder-5.003/META.json 2023-02-08 03:35:19.000000000 +0100
+++ new/Sereal-Decoder-5.004/META.json 2023-04-19 15:13:42.000000000 +0200
@@ -4,7 +4,7 @@
"Steffen Mueller <[email protected]>, Yves Orton <[email protected]>"
],
"dynamic_config" : 1,
- "generated_by" : "ExtUtils::MakeMaker version 7.62, CPAN::Meta::Converter
version 2.150010",
+ "generated_by" : "ExtUtils::MakeMaker version 7.70, CPAN::Meta::Converter
version 2.150010",
"license" : [
"perl_5"
],
@@ -71,6 +71,6 @@
"url" : "git://github.com/Sereal/Sereal.git"
}
},
- "version" : "5.003",
- "x_serialization_backend" : "JSON::PP version 4.06"
+ "version" : "5.004",
+ "x_serialization_backend" : "JSON::PP version 4.16"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Sereal-Decoder-5.003/META.yml
new/Sereal-Decoder-5.004/META.yml
--- old/Sereal-Decoder-5.003/META.yml 2023-02-08 03:35:19.000000000 +0100
+++ new/Sereal-Decoder-5.004/META.yml 2023-04-19 15:13:42.000000000 +0200
@@ -19,7 +19,7 @@
Devel::CheckLib: '1.16'
ExtUtils::MakeMaker: '7.0'
dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 7.62, CPAN::Meta::Converter version
2.150010'
+generated_by: 'ExtUtils::MakeMaker version 7.70, CPAN::Meta::Converter version
2.150010'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -35,5 +35,5 @@
resources:
bugtracker: https://github.com/Sereal/Sereal/issues
repository: git://github.com/Sereal/Sereal.git
-version: '5.003'
+version: '5.004'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Sereal-Decoder-5.003/lib/Sereal/Decoder/Constants.pm
new/Sereal-Decoder-5.004/lib/Sereal/Decoder/Constants.pm
--- old/Sereal-Decoder-5.003/lib/Sereal/Decoder/Constants.pm 2023-02-08
03:31:59.000000000 +0100
+++ new/Sereal-Decoder-5.004/lib/Sereal/Decoder/Constants.pm 2023-04-19
11:00:33.000000000 +0200
@@ -4,7 +4,7 @@
require Exporter;
our @ISA= qw(Exporter);
-our $VERSION= '5.003';
+our $VERSION= '5.004';
our ( @EXPORT_OK, %DEFINE, %TAG_INFO_HASH, @TAG_INFO_ARRAY );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Sereal-Decoder-5.003/lib/Sereal/Decoder.pm
new/Sereal-Decoder-5.004/lib/Sereal/Decoder.pm
--- old/Sereal-Decoder-5.003/lib/Sereal/Decoder.pm 2023-02-08
03:31:59.000000000 +0100
+++ new/Sereal-Decoder-5.004/lib/Sereal/Decoder.pm 2023-04-19
11:00:33.000000000 +0200
@@ -5,7 +5,7 @@
use Carp qw/croak/;
use XSLoader;
-our $VERSION= '5.003';
+our $VERSION= '5.004';
our $XS_VERSION= $VERSION; $VERSION= eval $VERSION;
use Exporter 'import';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Sereal-Decoder-5.003/srl_decoder.c
new/Sereal-Decoder-5.004/srl_decoder.c
--- old/Sereal-Decoder-5.003/srl_decoder.c 2023-02-01 05:15:51.000000000
+0100
+++ new/Sereal-Decoder-5.004/srl_decoder.c 2023-04-19 15:07:45.000000000
+0200
@@ -721,22 +721,6 @@
} STMT_END
-/* register a newly seen frozen object for THAWing later. */
-SRL_STATIC_INLINE void
-srl_track_frozen_object(pTHX_ srl_decoder_t *dec, HV *class_stash, SV *into)
-{
- AV *info_av;
- if (!dec->thaw_av)
- SAFE_NEW_AV(dec->thaw_av);
-
- AV_PUSH(dec->thaw_av, into);
-
- if (!dec->ref_thawhash)
- SAFE_PTABLE_NEW(dec->ref_thawhash);
-
- PTABLE_store(dec->ref_thawhash, (void *)SvRV(into), (void *)class_stash);
-}
-
/* Fetch or register a reference to an already seen frozen object.
* Called during deserialization (push=1) to handle duplicate references
@@ -1669,10 +1653,32 @@
SRL_STATIC_INLINE void
srl_read_frozen_object(pTHX_ srl_decoder_t *dec, HV *class_stash, SV *into)
{
- const unsigned char *fixup_pos= dec->buf.pos + 1; /* get the tag for the
WHATEVER */
+
+ AV *info_av;
+ if (!dec->thaw_av)
+ SAFE_NEW_AV(dec->thaw_av);
+
+ /* We do this BEFORE we call srl_read_single_value() so that
+ thaw_av contains the items in order of us seeing them in the serialized
+ dump. We will pop them off the list later on when we do the actual THAW.
+ Note that at the time we do this we haven't "filled out" the 'into' var
+ with the actual AV that is used for its frozen form. */
+
+ AV_PUSH(dec->thaw_av, into);
+
+ /* now fill out into with the AV that represents the object */
srl_read_single_value(aTHX_ dec, into, NULL);
- srl_track_frozen_object(aTHX_ dec, class_stash, into);
+ /* validate that we actually deparsed an AV */
+ assert(SvROK(into) && SvTYPE(SvRV(into)) == SVt_PVAV);
+
+ if (!dec->ref_thawhash)
+ SAFE_PTABLE_NEW(dec->ref_thawhash);
+
+ /* we need to do this *after* we have called srl_read_single_value() as
+ we use the address of the AV that into references as the key to find the
+ class stash. */
+ PTABLE_store(dec->ref_thawhash, (void *)SvRV(into), (void *)class_stash);
}
/* Invoke a THAW callback on the given class. Pass in the next item in the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Sereal-Decoder-5.003/t/091_thaw_order.t
new/Sereal-Decoder-5.004/t/091_thaw_order.t
--- old/Sereal-Decoder-5.003/t/091_thaw_order.t 1970-01-01 01:00:00.000000000
+0100
+++ new/Sereal-Decoder-5.004/t/091_thaw_order.t 2023-04-19 15:07:45.000000000
+0200
@@ -0,0 +1,132 @@
+#!/usr/bin/env perl
+use warnings;
+use strict;
+use File::Spec;
+use lib File::Spec->catdir(qw(t lib));
+BEGIN {
+ lib->import('lib')
+ if !-d 't';
+}
+use Test::More;
+use Sereal::TestSet qw(:all);
+use Sereal::Decoder qw(decode_sereal);
+use Data::Dumper qw(Dumper);
+
+if ( !have_encoder_and_decoder() ) {
+ plan skip_all => 'Did not find right version of encoder';
+}
+
+sub dd {
+ local $Data::Dumper::Indent = 0;
+ local $Data::Dumper::Terse = 1;
+ local $Data::Dumper::Sortkeys = 1;
+ return Data::Dumper::Dumper($_[0]);
+}
+
+my @steps;
+{
+ package FooInside;
+
+ sub new {
+ my ( $class, $attrs, @inside ) = @_;
+ $attrs ||= {};
+ return bless {
+ attrs => { %$attrs },
+ inside => {
+ map { $_ => $inside[$_] } 0..$#inside
+ },
+ }, $class;
+ }
+
+ sub FREEZE {
+ my ( $self, $serializer ) = @_;
+
+ push @steps, 'FooInside::FREEZE(' . ::dd($self) . ')';
+ return {
+ attrs => $self->{attrs},
+ inside => [
+ map { $self->{inside}{$_} } sort { $a <=> $b } keys
%{$self->{inside}},
+ ],
+ };
+ }
+
+ sub THAW {
+ my ( $class, $serializer, @data ) = @_;
+
+ push @steps, 'FooInside::THAW(' . ::dd($data[0]) . ')';
+ return $class->new( $data[0]->{attrs}, @{ $data[0]->{inside} || [] } );
+ }
+}
+
+{
+ package FooOutside;
+
+ sub new {
+ my ( $class, $attrs, @inside ) = @_;
+ $attrs ||= {};
+ return bless {
+ attrs => { %$attrs },
+ inside => {
+ map { $_ => $inside[$_] } 0..$#inside
+ },
+ }, $class;
+ }
+
+
+ sub FREEZE {
+ my ( $self, $serializer ) = @_;
+
+ push @steps, 'FooOutside::FREEZE(' . ::dd($self) . ')';
+ return {
+ attrs => $self->{attrs},
+ inside => [
+ map { $self->{inside}{$_} } sort { $a <=> $b } keys
%{$self->{inside}},
+ ],
+ };
+ }
+
+ sub THAW {
+ my ( $class, $serializer, @data ) = @_;
+
+ push @steps, 'FooOutside::THAW(' . ::dd($data[0]) . ')';
+ return $class->new( $data[0]->{attrs}, @{ $data[0]->{inside} || [] } );
+ }
+}
+
+my $struct =
+ FooOutside->new(
+ # Attrs
+ {
+ attr1 => 'foobar',
+ bar => FooInside->new({}, 'should_be_first'),
+ },
+ FooInside->new({}, 'second/not_frozen', 'third/not_frozen'),
+ FooOutside->new({}, FooInside->new({}, 'fourth/inner')),
+ );
+
+my $srl = Sereal::Encoder::encode_sereal($struct, { freeze_callbacks => 1,
canonical => 1 });
+my $dec = decode_sereal($srl);
+
+
+is_deeply(\@steps, [
+ "FooOutside::FREEZE(bless( {'attrs' => {'attr1' => 'foobar','bar' =>
bless( {'attrs' => {},'inside' => {'0' => 'should_be_first'}}, 'FooInside'
)},'inside' => {'0' => bless( {'attrs' => {},'inside' => {'0' =>
'second/not_frozen','1' => 'third/not_frozen'}}, 'FooInside' ),'1' => bless(
{'attrs' => {},'inside' => {'0' => bless( {'attrs' => {},'inside' => {'0' =>
'fourth/inner'}}, 'FooInside' )}}, 'FooOutside' )}}, 'FooOutside' ))",
+ "FooInside::FREEZE(bless( {'attrs' => {},'inside' => {'0' =>
'should_be_first'}}, 'FooInside' ))",
+ "FooInside::FREEZE(bless( {'attrs' => {},'inside' => {'0' =>
'second/not_frozen','1' => 'third/not_frozen'}}, 'FooInside' ))",
+ "FooOutside::FREEZE(bless( {'attrs' => {},'inside' => {'0' => bless(
{'attrs' => {},'inside' => {'0' => 'fourth/inner'}}, 'FooInside' )}},
'FooOutside' ))",
+ "FooInside::FREEZE(bless( {'attrs' => {},'inside' => {'0' =>
'fourth/inner'}}, 'FooInside' ))",
+ "FooInside::THAW({'attrs' => {},'inside' => ['fourth/inner']})",
+ "FooOutside::THAW({'attrs' => {},'inside' => [bless( {'attrs' =>
{},'inside' => {'0' => 'fourth/inner'}}, 'FooInside' )]})",
+ "FooInside::THAW({'attrs' => {},'inside' =>
['second/not_frozen','third/not_frozen']})",
+ "FooInside::THAW({'attrs' => {},'inside' => ['should_be_first']})",
+ "FooOutside::THAW({'attrs' => {'attr1' => 'foobar','bar' => bless(
{'attrs' => {},'inside' => {'0' => 'should_be_first'}}, 'FooInside' )},'inside'
=> [bless( {'attrs' => {},'inside' => {'0' => 'second/not_frozen','1' =>
'third/not_frozen'}}, 'FooInside' ),bless( {'attrs' => {},'inside' => {'0' =>
bless( {'attrs' => {},'inside' => {'0' => 'fourth/inner'}}, 'FooInside' )}},
'FooOutside' )]})"
+ ], "freeze/thaw sequence for nested objects was as expected") or do {
+ if ($ENV{DUMP_STEPS}) {
+ local $Data::Dumper::Useqq = 1;
+ print Dumper(\@steps),"\n";
+ }
+};
+
+is_deeply( $dec, $struct, "And the final structures match according to
is_deeply()");
+is( dd($dec), dd($struct), "And the final structures match according to
Dumper");
+
+done_testing;