From 7942a65c0ffe21a1cafff7652dfc3aca1a056220 Mon Sep 17 00:00:00 2001 From: Chris 'BinGOs' Williams Date: Sun, 22 May 2011 08:55:45 +0100 Subject: [PATCH] Updated JSON-PP to CPAN version 2.27200 [DELTA] 2.27200 Sun May 22 12:17:51 2011 - fixed incr_parse docodeing string more correctly (rt#68032 by LCONS) --- MANIFEST | 1 + Porting/Maintainers.pl | 2 +- cpan/JSON-PP/lib/JSON/PP.pm | 21 +++++++++++++-------- cpan/JSON-PP/t/116_incr_parse_fixed.t | 25 +++++++++++++++++++++++++ 4 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 cpan/JSON-PP/t/116_incr_parse_fixed.t diff --git a/MANIFEST b/MANIFEST index 95e3956..7f672e9 100644 --- a/MANIFEST +++ b/MANIFEST @@ -1385,6 +1385,7 @@ cpan/JSON-PP/t/112_upgrade.t cpan/JSON-PP/t/113_overloaded_eq.t cpan/JSON-PP/t/114_decode_prefix.t cpan/JSON-PP/t/115_tie_ixhash.t +cpan/JSON-PP/t/116_incr_parse_fixed.t cpan/JSON-PP/t/_unicode_handling.pm cpan/libnet/Changes libnet cpan/libnet/Config.eg libnet diff --git a/Porting/Maintainers.pl b/Porting/Maintainers.pl index 0b01c78..aa2dd20 100755 --- a/Porting/Maintainers.pl +++ b/Porting/Maintainers.pl @@ -1088,7 +1088,7 @@ use File::Glob qw(:case); 'JSON::PP' => { 'MAINTAINER' => 'makamaka', - 'DISTRIBUTION' => 'MAKAMAKA/JSON-PP-2.27105.tar.gz', + 'DISTRIBUTION' => 'MAKAMAKA/JSON-PP-2.27200.tar.gz', 'FILES' => q[cpan/JSON-PP], 'EXCLUDED' => [ 't/900_pod.t', # Pod testing diff --git a/cpan/JSON-PP/lib/JSON/PP.pm b/cpan/JSON-PP/lib/JSON/PP.pm index cef9f42..2e617fc 100644 --- a/cpan/JSON-PP/lib/JSON/PP.pm +++ b/cpan/JSON-PP/lib/JSON/PP.pm @@ -11,7 +11,7 @@ use Carp (); use B (); #use Devel::Peek; -$JSON::PP::VERSION = '2.27105'; +$JSON::PP::VERSION = '2.27200'; @JSON::PP::EXPORT = qw(encode_json decode_json from_json to_json); @@ -1459,7 +1459,7 @@ sub incr_parse { if ( defined wantarray ) { - $self->{incr_mode} = INCR_M_WS; + $self->{incr_mode} = INCR_M_WS unless defined $self->{incr_mode}; if ( wantarray ) { my @ret; @@ -1470,10 +1470,10 @@ sub incr_parse { push @ret, $self->_incr_parse( $coder, $self->{incr_text} ); unless ( !$self->{incr_nest} and $self->{incr_mode} == INCR_M_JSON ) { - $self->{incr_mode} = INCR_M_WS; + $self->{incr_mode} = INCR_M_WS if $self->{incr_mode} != INCR_M_STR; } - } until ( !$self->{incr_text} ); + } until ( length $self->{incr_text} >= $self->{incr_p} ); $self->{incr_parsing} = 0; @@ -1512,6 +1512,10 @@ sub _incr_parse { my $s = substr( $text, $p++, 1 ); if ( $s eq '"' ) { + if (substr( $text, $p - 2, 1 ) eq '\\' ) { + next; + } + if ( $self->{incr_mode} != INCR_M_STR ) { $self->{incr_mode} = INCR_M_STR; } @@ -1545,6 +1549,7 @@ sub _incr_parse { $self->{incr_p} = $p; + return if ( $self->{incr_mode} == INCR_M_STR and not $self->{incr_nest} ); return if ( $self->{incr_mode} == INCR_M_JSON and $self->{incr_nest} > 0 ); return '' unless ( length substr( $self->{incr_text}, 0, $p ) ); @@ -1625,9 +1630,9 @@ JSON::PP - JSON::XS compatible pure-Perl module. =head1 VERSION - 2.27105 + 2.27200 -L 2.27 compatible. +L 2.27 (~2.30) compatible. =head1 NOTE @@ -1826,7 +1831,7 @@ Basically, check to L or L. =head2 new - $json = new JSON::PP + $json = JSON::PP->new Rturns a new JSON::PP object that can be used to de/encode JSON strings. @@ -2804,7 +2809,7 @@ Makamaka Hannyaharamitu, Emakamaka[at]cpan.orgE =head1 COPYRIGHT AND LICENSE -Copyright 2007-2010 by Makamaka Hannyaharamitu +Copyright 2007-2011 by Makamaka Hannyaharamitu This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/cpan/JSON-PP/t/116_incr_parse_fixed.t b/cpan/JSON-PP/t/116_incr_parse_fixed.t new file mode 100644 index 0000000..73c2462 --- /dev/null +++ b/cpan/JSON-PP/t/116_incr_parse_fixed.t @@ -0,0 +1,25 @@ +#!/usr/bin/perl + +use strict; +use Test::More tests => 4; + +use JSON::PP; + +my $json = JSON::PP->new->allow_nonref(); + +my @vs = $json->incr_parse('"a\"bc'); + +ok( not scalar(@vs) ); + +@vs = $json->incr_parse('"'); + +is( $vs[0], "a\"bc" ); + + +$json = JSON::PP->new; + +@vs = $json->incr_parse('"a\"bc'); +ok( not scalar(@vs) ); +@vs = eval { $json->incr_parse('"') }; +ok($@ =~ qr/JSON text must be an object or array/); + -- 2.7.4