diff options
author | Kota Tsuyuzaki <tsuyuzaki.kota@lab.ntt.co.jp> | 2016-07-12 08:37:00 -0700 |
---|---|---|
committer | Kota Tsuyuzaki <tsuyuzaki.kota@lab.ntt.co.jp> | 2016-09-07 20:22:47 -0700 |
commit | cb0daba975dfb3b7bffe402d7aa73fac19180f73 (patch) | |
tree | 95abb9857046643272b98b5a52b84eab947529a2 | |
parent | 89807c5aac829453d855c1adb6830bd3a12876b5 (diff) | |
download | liberasurecode-cb0daba975dfb3b7bffe402d7aa73fac19180f73.tar.gz |
Add get_by_desc ret val handling to get_fragment_size
As well as any other callers, libersurecode_get_fragment_size should
handle the return value of liberasurecode_get_backend_instance_by_desc.
Otherwise, get_by_desc can return NULL and it causes an invalid memory
access in librerasurecode_get_fragment_size.
Change-Id: I489f8b5d049610863b5e0b477b6ff70ead245b55
-rw-r--r-- | include/erasurecode/erasurecode.h | 1 | ||||
-rw-r--r-- | src/erasurecode.c | 2 |
2 files changed, 3 insertions, 0 deletions
diff --git a/include/erasurecode/erasurecode.h b/include/erasurecode/erasurecode.h index 5f5e054..a17c45c 100644 --- a/include/erasurecode/erasurecode.h +++ b/include/erasurecode/erasurecode.h @@ -371,6 +371,7 @@ int liberasurecode_get_minimum_encode_size(int desc); * * @return fragment size - sizeof(fragment_header) + size * + frag_backend_metadata_size + * if an error, return value will be negative */ int liberasurecode_get_fragment_size(int desc, int data_len); diff --git a/src/erasurecode.c b/src/erasurecode.c index 73091fd..31fc884 100644 --- a/src/erasurecode.c +++ b/src/erasurecode.c @@ -1221,6 +1221,8 @@ int liberasurecode_get_fragment_size(int desc, int data_len) { ec_backend_t instance = liberasurecode_backend_instance_get_by_desc(desc); // TODO: Create a common function to calculate fragment size also for preprocessing + if (NULL == instance) + return -EBACKENDNOTAVAIL; int aligned_data_len = get_aligned_data_size(instance, data_len); int size = (aligned_data_len / instance->args.uargs.k) + instance->common.backend_metadata_size; |