diff options
author | Jenkins <jenkins@review.openstack.org> | 2016-09-08 04:37:39 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2016-09-08 04:37:39 +0000 |
commit | 8472bfff39322f416171872e9358d6163fa40438 (patch) | |
tree | a5cb9814fe3f6ac37b429b2c44954007beb46754 | |
parent | f53a0d5700b51ce154e5f10b741dce1db9fbdb3d (diff) | |
parent | 1d9cea73cb133ce59e1a7d4af14a45fe36b44315 (diff) | |
download | pyeclib-8472bfff39322f416171872e9358d6163fa40438.tar.gz |
Merge "Correct fragment size handling"
-rw-r--r-- | src/c/pyeclib_c/pyeclib_c.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/c/pyeclib_c/pyeclib_c.c b/src/c/pyeclib_c/pyeclib_c.c index dc97c38..466fa40 100644 --- a/src/c/pyeclib_c/pyeclib_c.c +++ b/src/c/pyeclib_c/pyeclib_c.c @@ -373,6 +373,10 @@ pyeclib_c_get_segment_info(PyObject *self, PyObject *args) /* The minimum segment size depends on the EC algorithm */ min_segment_size = liberasurecode_get_minimum_encode_size(pyeclib_handle->ec_desc); + if (min_segment_size < 0) { + pyeclib_c_seterr(-EINVALIDPARAMS, "pyeclib_c_get_segment_info ERROR: "); + return NULL; + } /* Get the number of segments */ num_segments = (int)ceill((double)data_len / segment_size); @@ -396,7 +400,12 @@ pyeclib_c_get_segment_info(PyObject *self, PyObject *args) * This will retrieve fragment_size calculated by liberasurecode with * specified backend. */ + fragment_size = liberasurecode_get_fragment_size(pyeclib_handle->ec_desc, data_len); + if (fragment_size < 0) { + pyeclib_c_seterr(-EINVALIDPARAMS, "pyeclib_c_get_segment_info ERROR: "); + return NULL; + } /* Segment size is the user-provided segment size */ segment_size = data_len; @@ -409,6 +418,10 @@ pyeclib_c_get_segment_info(PyObject *self, PyObject *args) */ fragment_size = liberasurecode_get_fragment_size(pyeclib_handle->ec_desc, segment_size); + if (fragment_size < 0) { + pyeclib_c_seterr(-EINVALIDPARAMS, "pyeclib_c_get_segment_info ERROR: "); + return NULL; + } last_segment_size = data_len - (segment_size * (num_segments - 1)); @@ -425,6 +438,10 @@ pyeclib_c_get_segment_info(PyObject *self, PyObject *args) } last_fragment_size = liberasurecode_get_fragment_size(pyeclib_handle->ec_desc, last_segment_size); + if (fragment_size < 0) { + pyeclib_c_seterr(-EINVALIDPARAMS, "pyeclib_c_get_segment_info ERROR: "); + return NULL; + } } /* Add header to fragment sizes */ @@ -1191,7 +1208,7 @@ pyeclib_c_check_backend_available(PyObject *self, PyObject *args) } static PyObject* -pyeclib_c_liberasurecode_version(PyObject *self, PyObject *args){ +pyeclib_c_liberasurecode_version(PyObject *self, PyObject *args) { return PyInt_FromLong(LIBERASURECODE_VERSION); } |