summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-09-08 04:37:39 +0000
committerGerrit Code Review <review@openstack.org>2016-09-08 04:37:39 +0000
commit8472bfff39322f416171872e9358d6163fa40438 (patch)
treea5cb9814fe3f6ac37b429b2c44954007beb46754
parentf53a0d5700b51ce154e5f10b741dce1db9fbdb3d (diff)
parent1d9cea73cb133ce59e1a7d4af14a45fe36b44315 (diff)
downloadpyeclib-8472bfff39322f416171872e9358d6163fa40438.tar.gz
Merge "Correct fragment size handling"
-rw-r--r--src/c/pyeclib_c/pyeclib_c.c19
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);
}