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++) {

Reply via email to