Changeset 852

Show
Ignore:
Timestamp:
02/24/03 20:58:09
Author:
miyagawa
Message:

0.16

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • PHP-Session/trunk/Changes

    r832 r852  
    11Revision history for Perl extension PHP::Session 
     2 
     30.16  Mon Feb 24 20:35:20 JST 2003 
     4        * Fixed bug that encodes strings like "20030224203445" as integer 
     5          (Thanks to PIA) 
     6        * Fixed parser bug that string like qq(A\";B) is not restored corretly 
    27 
    380.15  Tue Jan 28 23:22:38 JST 2003 
  • PHP-Session/trunk/MANIFEST

    r676 r852  
    1313t/06_hash.t 
    1414t/07_int_double.t 
     15t/08_auto_save.t 
     16t/09_int_str.t 
     17t/10_quote.t 
    1518t/lib/TestUtil.pm 
     19t/sess_quote 
  • PHP-Session/trunk/lib/PHP/Session.pm

    r832 r852  
    33use strict; 
    44use vars qw($VERSION); 
    5 $VERSION = 0.15
     5$VERSION = 0.16
    66 
    77use vars qw(%SerialImpl); 
  • PHP-Session/trunk/lib/PHP/Session/Serializer/PHP.pm

    r832 r852  
    55 
    66use vars qw($VERSION); 
    7 $VERSION = 0.15
     7$VERSION = 0.16
    88 
    99sub _croak { require Carp; Carp::croak(@_) } 
     
    1515 
    1616my $var_re = '(\w+)\|'; 
    17 my $str_re = 's:\d+:"(.*?)";'; 
     17#my $str_re = 's:\d+:"(.*?)";'; 
     18my $str_re = 's:(\d+):'; 
    1819my $int_re = 'i:(-?\d+);'; 
    1920my $dbl_re = 'd:(-?\d+(?:\.\d+)?);'; 
    2021my $arr_re = 'a:(\d+):'; 
    21 my $obj_re = 'O:\d+:"(.*?)":\d+:'; 
     22#my $obj_re = 'O:\d+:"(.*?)":\d+:'; 
     23my $obj_re = 'O:(\d+):'; 
    2224my $nul_re = '(N);'; 
    2325my $bool_re = 'b:([01]);'; 
    2426 
    2527use constant VARNAME   => 0; 
    26 use constant STRING    => 1; 
     28use constant STRLEN    => 1; 
    2729use constant INTEGER   => 2; 
    2830use constant DOUBLE    => 3; 
    2931use constant ARRAY     => 4; 
    30 use constant CLASSNAME => 5; 
     32use constant CLASSLEN => 5; 
    3133use constant NULL      => 6; 
    3234use constant BOOLEAN   => 7; 
     
    3739        my $UNDEF = $1; 
    3840        my @match = ($2, $3, $4, $5, $6, $7, $8, $9); 
    39         my @literal = grep defined, @match[STRING, INTEGER, DOUBLE, BOOLEAN]; 
     41 
     42        # literal: integer, double, boolean 
     43        my @literal = grep defined, @match[INTEGER, DOUBLE, BOOLEAN]; 
    4044        @literal and $self->{_data}->{$match[VARNAME]} = $literal[0], next; 
    4145 
     46        # string 
     47        if (my $len = $match[STRLEN]) { 
     48            $data =~ s/^"(.{$len})";// or die "weird data: $data"; 
     49            $self->{_data}->{$match[VARNAME]} = $1; 
     50            next; 
     51        } 
     52 
     53        # undef or NULL 
    4254        if ($UNDEF eq '!' or defined $match[NULL]) { 
    4355            $self->{_data}->{$match[VARNAME]} = undef; 
    4456            next; 
     57        } 
     58 
     59        # nested: array, object 
     60        my $class_name; 
     61        if (my $len = $match[CLASSLEN]) { 
     62            $data =~ s/^"(.{$len})":\d+:// or die "weird data: $data"; 
     63            $class_name = $1; 
    4564        } 
    4665 
     
    5069            $self->{_data}->{$match[VARNAME]} = \%data; 
    5170        } 
    52         elsif (defined $match[CLASSNAME]) { 
     71        elsif (defined $class_name) { 
    5372            $self->{_data}->{$match[VARNAME]} = bless { 
    54                 _class => $match[CLASSNAME]
     73                _class => $class_name
    5574                %data, 
    5675            }, 'PHP::Session::Object'; 
     
    6685    while ($data and $data =~ s/^($str_re|$int_re|$dbl_re|$arr_re|$obj_re|$nul_re|$bool_re)//) { 
    6786        my @match = ($1, $2, $3, $4, $5, $6, $7, $8); 
    68         my @literal = grep defined, @match[STRING, INTEGER, DOUBLE, BOOLEAN]; 
     87 
     88        # literal: integer, double. boolean 
     89        my @literal = grep defined, @match[INTEGER, DOUBLE, BOOLEAN]; 
    6990        @literal and push @data, $literal[0] and next; 
    7091 
     92        # string 
     93        if (my $len = $match[STRLEN]) { 
     94            $data =~ s/^"(.{$len})";// or die "weird data: $data"; 
     95            push @data, $1; 
     96            next; 
     97        } 
     98 
     99        # NULL 
    71100        if (defined $match[NULL]) { 
    72101            push @data, undef; 
    73102            next; 
     103        } 
     104 
     105        # nexted: array, object 
     106        my $class_name; 
     107        if (my $len = $match[CLASSLEN]) { 
     108            $data =~ s/^"(.{$len})":\d+:// or die "weird data: $data"; 
     109            $class_name = $1; 
    74110        } 
    75111 
     
    79115            push @data, \%data; 
    80116        } 
    81         elsif (defined $match[CLASSNAME]) { 
     117        elsif (defined $class_name) { 
    82118            push @data, bless { 
    83                 _class => $match[CLASSNAME]
     119                _class => $class_name
    84120                %data, 
    85121            }, 'PHP::Session::Object'; 
     
    108144    } 
    109145    elsif (! ref $value) { 
    110         if ($value =~ /^-?\d+$/) { 
     146#       if ($value =~ /^-?\d+$/) { 
     147        if (is_int($value)) { 
    111148            return $self->encode_int($value); 
    112149        } 
    113         elsif ($value =~ /^-?\d+(?:\.\d+)?$/) { 
     150#       elsif ($value =~ /^-?\d+(?:\.\d+)?$/) { 
     151        elsif (is_float($value)) { 
    114152            return $self->encode_double($value); 
    115153        } 
     
    166204} 
    167205 
     206sub is_int { 
     207    local $_ = shift; 
     208    /^-?[0-9]\d{0,8}$/; 
     209} 
     210 
     211sub is_float { 
     212    local $_ = shift; 
     213    /^-?[0-9]\d{0,8}\.\d+$/; 
     214} 
     215 
    1682161; 
    169217__END__ 
  • PHP-Session/trunk/t/lib/TestUtil.pm

    r545 r852  
    99sub write_file { 
    1010    my($file, $cont) = @_; 
    11     my $out = FileHandle->new("> $file")
     11    my $out = FileHandle->new("> $file") or die "$file: $!"
    1212    $out->print($cont); 
    1313} 
     
    1515sub read_file { 
    1616    my $file = shift; 
    17     my $in = FileHandle->new($file)
     17    my $in = FileHandle->new($file) or die "$file: $!"
    1818    local $/; 
    1919    my $cont = <$in>;