Switch Perl bindings from C32/C64 to CI32/etc. Change IO methods invoked to use explicitly signed/unsigned versions rather than casting.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/cbe964df Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/cbe964df Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/cbe964df Branch: refs/heads/master Commit: cbe964dfa85720357b8e6f06347028671c641e06 Parents: c1af093 Author: Marvin Humphrey <[email protected]> Authored: Tue Apr 19 18:59:15 2016 -0700 Committer: Marvin Humphrey <[email protected]> Committed: Tue Apr 19 19:20:16 2016 -0700 ---------------------------------------------------------------------- perl/buildlib/Lucy/Build/Binding/Store.pm | 7 +++++-- perl/lib/LucyX/Search/Filter.pm | 4 ++-- perl/t/023-stepper.t | 4 ++-- perl/t/102-strings_io.t | 2 +- perl/t/binding/101-simple_io.t | 20 ++++++++++---------- perl/xs/Lucy/Document/Doc.c | 8 ++++---- perl/xs/Lucy/Index/DocReader.c | 14 +++++++------- 7 files changed, 31 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/cbe964df/perl/buildlib/Lucy/Build/Binding/Store.pm ---------------------------------------------------------------------- diff --git a/perl/buildlib/Lucy/Build/Binding/Store.pm b/perl/buildlib/Lucy/Build/Binding/Store.pm index a266ace..f5196c8 100644 --- a/perl/buildlib/Lucy/Build/Binding/Store.pm +++ b/perl/buildlib/Lucy/Build/Binding/Store.pm @@ -175,7 +175,7 @@ read_string(self) CODE: { char *ptr; - size_t len = LUCY_InStream_Read_C32(self); + size_t len = LUCY_InStream_Read_CU32(self); RETVAL = newSV(len + 1); SvCUR_set(RETVAL, len); SvPOK_on(RETVAL); @@ -364,7 +364,10 @@ PPCODE: { STRLEN len = 0; char *ptr = SvPVutf8(aSV, len); - LUCY_OutStream_Write_C32(self, len); + if (len > INT32_MAX) { + CFISH_THROW(CFISH_ERR, "String too long: %u64", (uint64_t)len); + } + LUCY_OutStream_Write_CU32(self, len); LUCY_OutStream_Write_Bytes(self, ptr, len); } END_XS_CODE http://git-wip-us.apache.org/repos/asf/lucy/blob/cbe964df/perl/lib/LucyX/Search/Filter.pm ---------------------------------------------------------------------- diff --git a/perl/lib/LucyX/Search/Filter.pm b/perl/lib/LucyX/Search/Filter.pm index d168e9e..d6db91f 100644 --- a/perl/lib/LucyX/Search/Filter.pm +++ b/perl/lib/LucyX/Search/Filter.pm @@ -63,14 +63,14 @@ sub serialize { my ( $self, $outstream ) = @_; $self->SUPER::serialize($outstream); my $frozen = nfreeze( $query{$$self} ); - $outstream->write_c32( bytes::length($frozen) ); + $outstream->write_cu32( bytes::length($frozen) ); $outstream->print($frozen); } sub deserialize { my ( $self, $instream ) = @_; $self->SUPER::deserialize($instream); - my $len = $instream->read_c32; + my $len = $instream->read_cu32; my $frozen; $instream->read( $frozen, $len ); $query{$$self} = thaw($frozen); http://git-wip-us.apache.org/repos/asf/lucy/blob/cbe964df/perl/t/023-stepper.t ---------------------------------------------------------------------- diff --git a/perl/t/023-stepper.t b/perl/t/023-stepper.t index 7ea2fa8..2786ad7 100644 --- a/perl/t/023-stepper.t +++ b/perl/t/023-stepper.t @@ -38,7 +38,7 @@ sub get_number { $number{ ${ +shift } } } sub read_record { my ( $self, $instream ) = @_; - $number{$$self} += $instream->read_c32; + $number{$$self} += $instream->read_ci32; } package main; @@ -47,7 +47,7 @@ use Lucy::Test; my $folder = Lucy::Store::RAMFolder->new; my $outstream = $folder->open_out("foo") or die Clownfish->error; -$outstream->write_c32(10) for 1 .. 5; +$outstream->write_ci32(10) for 1 .. 5; $outstream->close; my $instream = $folder->open_in("foo") or die Clownfish->error; my $stepper = MyStepper->new; http://git-wip-us.apache.org/repos/asf/lucy/blob/cbe964df/perl/t/102-strings_io.t ---------------------------------------------------------------------- diff --git a/perl/t/102-strings_io.t b/perl/t/102-strings_io.t index 657bf46..02d7ca8 100644 --- a/perl/t/102-strings_io.t +++ b/perl/t/102-strings_io.t @@ -24,7 +24,7 @@ my ( @items, $packed, $template, $buf, $file, $out, $in, $correct ); $file = Lucy::Store::RAMFile->new; $out = Lucy::Store::OutStream->open( file => $file ) or die Clownfish->error; -$out->write_c64(10000); +$out->write_cu64(10000); $out->close; $in = Lucy::Store::InStream->open( file => $file ) or die Clownfish->error; http://git-wip-us.apache.org/repos/asf/lucy/blob/cbe964df/perl/t/binding/101-simple_io.t ---------------------------------------------------------------------- diff --git a/perl/t/binding/101-simple_io.t b/perl/t/binding/101-simple_io.t index fd5a9be..85db57a 100644 --- a/perl/t/binding/101-simple_io.t +++ b/perl/t/binding/101-simple_io.t @@ -47,7 +47,7 @@ sub check_round_trip_bytes { my $file = Lucy::Store::RAMFile->new; my $outstream = Lucy::Store::OutStream->open( file => $file ); for (@$expected) { - $outstream->write_c32( bytes::length($_) ); + $outstream->write_ci32( bytes::length($_) ); $outstream->print($_); } $outstream->close; @@ -56,7 +56,7 @@ sub check_round_trip_bytes { my @got; for (@$expected) { my $buf; - my $len = $instream->read_c32; + my $len = $instream->read_ci32; $instream->read( $buf, $len ); push @got, $buf; } @@ -95,24 +95,24 @@ $_ += int( rand( 2**16 ) ) for @nums; check_round_trip( 'u64', \@nums ); @nums = ( 0 .. 127 ); -check_round_trip( 'c32', \@nums ); +check_round_trip( 'ci32', \@nums ); @nums = ( 128 .. 500 ); $packed = pack( 'w*', @nums ); -$ram_file = check_round_trip( 'c32', \@nums ); -is( $ram_file->get_contents, $packed, "C32 is equivalent to Perl's pack w" ); +$ram_file = check_round_trip( 'cu32', \@nums ); +is( $ram_file->get_contents, $packed, "CU32 is equivalent to Perl's pack w" ); @nums = ( 0 .. 127 ); -check_round_trip( 'c64', \@nums ); +check_round_trip( 'ci64', \@nums ); @nums = ( 128 .. 500 ); $packed = pack( 'w*', @nums ); -$ram_file = check_round_trip( 'c64', \@nums ); -is( $ram_file->get_contents, $packed, "C64 is equivalent to Perl's pack w" ); +$ram_file = check_round_trip( 'cu64', \@nums ); +is( $ram_file->get_contents, $packed, "CU64 is equivalent to Perl's pack w" ); @nums = map { $_ * 2**31 } 0 .. 2000; $_ += int( rand( 2**16 ) ) for @nums; -check_round_trip( 'c64', \@nums ); +check_round_trip( 'cu64', \@nums ); # rand (always?) has 64-bit precision, but we need 32-bit - so truncate via # pack/unpack. @@ -152,6 +152,6 @@ my $unibytes = $latin; utf8ify($unibytes); utf8_flag_off($unibytes); my $slurped = $ram_file->get_contents; -substr( $slurped, 0, 1, "" ); # ditch c32 at head of string; +substr( $slurped, 0, 1, "" ); # ditch cu32 at head of string; is( $slurped, $unibytes, "write_string upgrades to utf8" ); http://git-wip-us.apache.org/repos/asf/lucy/blob/cbe964df/perl/xs/Lucy/Document/Doc.c ---------------------------------------------------------------------- diff --git a/perl/xs/Lucy/Document/Doc.c b/perl/xs/Lucy/Document/Doc.c index 902df23..a923e25 100644 --- a/perl/xs/Lucy/Document/Doc.c +++ b/perl/xs/Lucy/Document/Doc.c @@ -92,11 +92,11 @@ void LUCY_Doc_Serialize_IMP(lucy_Doc *self, lucy_OutStream *outstream) { dTHX; lucy_DocIVARS *const ivars = lucy_Doc_IVARS(self); - LUCY_OutStream_Write_C32(outstream, ivars->doc_id); + LUCY_OutStream_Write_CU32(outstream, ivars->doc_id); SV *frozen = S_nfreeze_fields(aTHX_ self); STRLEN len; char *buf = SvPV(frozen, len); - LUCY_OutStream_Write_C64(outstream, len); + LUCY_OutStream_Write_CU64(outstream, len); LUCY_OutStream_Write_Bytes(outstream, buf, len); SvREFCNT_dec(frozen); } @@ -104,7 +104,7 @@ LUCY_Doc_Serialize_IMP(lucy_Doc *self, lucy_OutStream *outstream) { static HV* S_thaw_fields(pTHX_ lucy_InStream *instream) { // Read frozen data into an SV buffer. - size_t len = (size_t)LUCY_InStream_Read_C64(instream); + size_t len = (size_t)LUCY_InStream_Read_CU64(instream); SV *buf_sv = newSV(len + 1); SvPOK_on(buf_sv); SvCUR_set(buf_sv, len); @@ -137,7 +137,7 @@ S_thaw_fields(pTHX_ lucy_InStream *instream) { lucy_Doc* LUCY_Doc_Deserialize_IMP(lucy_Doc *self, lucy_InStream *instream) { dTHX; - int32_t doc_id = (int32_t)LUCY_InStream_Read_C32(instream); + int32_t doc_id = (int32_t)LUCY_InStream_Read_CU32(instream); HV *fields = S_thaw_fields(aTHX_ instream); lucy_Doc_init(self, fields, doc_id); SvREFCNT_dec(fields); http://git-wip-us.apache.org/repos/asf/lucy/blob/cbe964df/perl/xs/Lucy/Index/DocReader.c ---------------------------------------------------------------------- diff --git a/perl/xs/Lucy/Index/DocReader.c b/perl/xs/Lucy/Index/DocReader.c index 8eda8bc..7daf909 100644 --- a/perl/xs/Lucy/Index/DocReader.c +++ b/perl/xs/Lucy/Index/DocReader.c @@ -43,7 +43,7 @@ LUCY_DefDocReader_Fetch_Doc_IMP(lucy_DefaultDocReader *self, int32_t doc_id) { LUCY_InStream_Seek(ix_in, (int64_t)doc_id * 8); start = LUCY_InStream_Read_U64(ix_in); LUCY_InStream_Seek(dat_in, start); - num_fields = LUCY_InStream_Read_C32(dat_in); + num_fields = LUCY_InStream_Read_CU32(dat_in); // Decode stored data and build up the doc field by field. while (num_fields--) { @@ -53,7 +53,7 @@ LUCY_DefDocReader_Fetch_Doc_IMP(lucy_DefaultDocReader *self, int32_t doc_id) { lucy_FieldType *type; // Read field name. - field_name_len = LUCY_InStream_Read_C32(dat_in); + field_name_len = LUCY_InStream_Read_CU32(dat_in); field_name_ptr = SvGROW(field_name_sv, field_name_len + 1); LUCY_InStream_Read_Bytes(dat_in, field_name_ptr, field_name_len); SvPOK_on(field_name_sv); @@ -69,7 +69,7 @@ LUCY_DefDocReader_Fetch_Doc_IMP(lucy_DefaultDocReader *self, int32_t doc_id) { // Read the field value. switch (LUCY_FType_Primitive_ID(type) & lucy_FType_PRIMITIVE_ID_MASK) { case lucy_FType_TEXT: { - STRLEN value_len = LUCY_InStream_Read_C32(dat_in); + STRLEN value_len = LUCY_InStream_Read_CU32(dat_in); value_sv = newSV((value_len ? value_len : 1)); LUCY_InStream_Read_Bytes(dat_in, SvPVX(value_sv), value_len); SvCUR_set(value_sv, value_len); @@ -79,7 +79,7 @@ LUCY_DefDocReader_Fetch_Doc_IMP(lucy_DefaultDocReader *self, int32_t doc_id) { break; } case lucy_FType_BLOB: { - STRLEN value_len = LUCY_InStream_Read_C32(dat_in); + STRLEN value_len = LUCY_InStream_Read_CU32(dat_in); value_sv = newSV((value_len ? value_len : 1)); LUCY_InStream_Read_Bytes(dat_in, SvPVX(value_sv), value_len); SvCUR_set(value_sv, value_len); @@ -94,15 +94,15 @@ LUCY_DefDocReader_Fetch_Doc_IMP(lucy_DefaultDocReader *self, int32_t doc_id) { value_sv = newSVnv(LUCY_InStream_Read_F64(dat_in)); break; case lucy_FType_INT32: - value_sv = newSViv((int32_t)LUCY_InStream_Read_C32(dat_in)); + value_sv = newSViv(LUCY_InStream_Read_CI32(dat_in)); break; case lucy_FType_INT64: if (sizeof(IV) == 8) { - int64_t val = (int64_t)LUCY_InStream_Read_C64(dat_in); + int64_t val = LUCY_InStream_Read_CI64(dat_in); value_sv = newSViv((IV)val); } else { // (lossy) - int64_t val = (int64_t)LUCY_InStream_Read_C64(dat_in); + int64_t val = LUCY_InStream_Read_CI64(dat_in); value_sv = newSVnv((double)val); } break;
