Perl code for writing containers doesn't count length of write*Begin or 
write*End
---------------------------------------------------------------------------------

                 Key: THRIFT-782
                 URL: https://issues.apache.org/jira/browse/THRIFT-782
             Project: Thrift
          Issue Type: Bug
          Components: Compiler (Perl)
    Affects Versions: 0.2
         Environment: Debian Linux 5.0 (stable), Perl 5.10.0.
            Reporter: Conrad Hughes
            Priority: Minor


The Perl code generator creates code for containers which doesn't count the 
length of their begin and end data, with the result that calling write on 
anything involving a map returns a length that's 6 bytes shorter than the 
actual amount written.  The fix seems pretty obvious, adding {{$xfer +=}} to 
the relevant lines in {{t_perl_generator::generate_serialize_container()}}.  
Here's an example of *current* generated code for example - note the lack of 
{{$xfer +=}} before {{$output->writeMapBegin}} or {{...End}}:

  if (defined $self->{fname}) {
    $xfer += $output->writeFieldBegin('fname', TType::MAP, 3);
    {
      $output->writeMapBegin(TType::STRING, TType::STRING, scalar(keys 
%{$self->{fname}}));
      {
        while( my ($kiter7,$viter8) = each %{$self->{fname}})
        {
          $xfer += $output->writeString($kiter7);
          $xfer += $output->writeString($viter8);
        }
      }
      $output->writeMapEnd();
    }
    $xfer += $output->writeFieldEnd();
  }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to