Adapt Perl bindings for I32Array size change.
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/0c494085 Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/0c494085 Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/0c494085 Branch: refs/heads/master Commit: 0c494085ac98a77d7969f1a385be1bf39936bb2e Parents: 7e31cc6 Author: Marvin Humphrey <mar...@rectangular.com> Authored: Tue Apr 5 17:47:50 2016 -0700 Committer: Marvin Humphrey <mar...@rectangular.com> Committed: Wed Apr 6 13:03:09 2016 -0700 ---------------------------------------------------------------------- perl/buildlib/Lucy/Build/Binding/Object.pm | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/0c494085/perl/buildlib/Lucy/Build/Binding/Object.pm ---------------------------------------------------------------------- diff --git a/perl/buildlib/Lucy/Build/Binding/Object.pm b/perl/buildlib/Lucy/Build/Binding/Object.pm index fb9fd5a..f24f9cd 100644 --- a/perl/buildlib/Lucy/Build/Binding/Object.pm +++ b/perl/buildlib/Lucy/Build/Binding/Object.pm @@ -78,18 +78,22 @@ CODE: ints_av = (AV*)SvRV(ints_sv); } if (ints_av && SvTYPE(ints_av) == SVt_PVAV) { - int32_t size = av_len(ints_av) + 1; - int32_t *ints = (int32_t*)CFISH_MALLOCATE(size * sizeof(int32_t)); - int32_t i; + int64_t size = av_len(ints_av) + 1; + int32_t *ints; + int64_t i; + if (size < 0 || size > INT32_MAX) { + THROW(CFISH_ERR, "Size out of range: %i64", size); + } + ints = (int32_t*)CFISH_MALLOCATE(size * sizeof(int32_t)); for (i = 0; i < size; i++) { - SV **const sv_ptr = av_fetch(ints_av, i, 0); + SV **const sv_ptr = av_fetch(ints_av, (I32)i, 0); ints[i] = (sv_ptr && XSBind_sv_defined(aTHX_ *sv_ptr)) ? SvIV(*sv_ptr) : 0; } self = (lucy_I32Array*)XSBind_new_blank_obj(aTHX_ either_sv); - lucy_I32Arr_init(self, ints, size); + lucy_I32Arr_init(self, ints, (size_t)size); } else { THROW(CFISH_ERR, "Required param 'ints' isn't an arrayref"); @@ -105,8 +109,8 @@ to_arrayref(self) CODE: { AV *out_av = newAV(); - uint32_t i; - uint32_t size = LUCY_I32Arr_Get_Size(self); + size_t i; + size_t size = LUCY_I32Arr_Get_Size(self); av_extend(out_av, size); for (i = 0; i < size; i++) {