From: kostasch Date: Thu, 2 Jul 2020 22:42:19 +0300 2020-07-02 Kostas Chasialis * libpoke/libpoke.h (pk_array_elem_val): Prototype documentation now describes what happens in case invalid IDX is passed. (pk_array_set_elem_val): Likewise. (pk_array_elem_boffset): Likewise. (pk_array_set_elem_boffset): Likewise. * libpoke/pk-val.c (pk_array_elem_val): Check for IDX. (pk_array_set_elem_val): Likewise. (pk_array_elem_boffset): Likewise. (pk_array_set_elem_boffset): Likewise. --- ChangeLog | 12 ++++++++++++ libpoke/libpoke.h | 16 ++++++++++++---- libpoke/pk-val.c | 16 ++++++++++++---- 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5392ccda..36fcdadb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2020-07-02 Kostas Chasialis + + * libpoke/libpoke.h (pk_array_elem_val): Prototype documentation + now describes what happens in case invalid IDX is passed. + (pk_array_set_elem_val): Likewise. + (pk_array_elem_boffset): Likewise. + (pk_array_set_elem_boffset): Likewise. + * libpoke/pk-val.c (pk_array_elem_val): Check for IDX. + (pk_array_set_elem_val): Likewise. + (pk_array_elem_boffset): Likewise. + (pk_array_set_elem_boffset): Likewise. + 2020-07-02 Kostas Chasialis * etc/pk-mi-json-schema.json : JSON Schema diff --git a/libpoke/libpoke.h b/libpoke/libpoke.h index b44d6715..7b2c6691 100644 --- a/libpoke/libpoke.h +++ b/libpoke/libpoke.h @@ -507,7 +507,9 @@ pk_val pk_array_nelem (pk_val array); /* Get the value of the element of an array. ARRAY is the array value. - IDX is the index of the element in the array. */ + IDX is the index of the element in the array. + + If IDX is invalid, PK_NULL is returned. */ pk_val pk_array_elem_val (pk_val array, uint64_t idx); @@ -518,7 +520,9 @@ pk_val pk_array_elem_val (pk_val array, uint64_t idx); VAL is the new value for the array element. Note that the type of the element is not checked by this function, - so be careful. */ + so be careful. + + If IDX is invalid, array remains unchanged. */ void pk_array_set_elem_val (pk_val array, uint64_t idx, pk_val val); @@ -528,7 +532,9 @@ void pk_array_set_elem_val (pk_val array, uint64_t idx, pk_val val); ARRAY is the array value. IDX is the index of the element in the array. - The returned bit-offset is an uint<64>. */ + The returned bit-offset is an uint<64>. + + If IDX is invalid, PK_NULL is returned. */ pk_val pk_array_elem_boffset (pk_val array, uint64_t idx); @@ -537,7 +543,9 @@ pk_val pk_array_elem_boffset (pk_val array, uint64_t idx); ARRAY is the array value. IDX is the index of the element in the array. - BOFFSET is an uint<64> value with the bit-offset of the element. */ + BOFFSET is an uint<64> value with the bit-offset of the element. + + If IDX is invalid, array remains unchanged. */ void pk_array_set_elem_boffset (pk_val array, uint64_t idx, pk_val boffset); diff --git a/libpoke/pk-val.c b/libpoke/pk-val.c index 1722a4e6..3c333911 100644 --- a/libpoke/pk-val.c +++ b/libpoke/pk-val.c @@ -269,23 +269,31 @@ pk_array_nelem (pk_val array) pk_val pk_array_elem_val (pk_val array, uint64_t idx) { - return PVM_VAL_ARR_ELEM_VALUE (array, idx); + if (idx < pk_uint_value (pk_array_nelem (array))) + return PVM_VAL_ARR_ELEM_VALUE (array, idx); + else + return PK_NULL; } void pk_array_set_elem_val (pk_val array, uint64_t idx, pk_val val) { - PVM_VAL_ARR_ELEM_VALUE (array, idx) = val; + if (idx < pk_uint_value (pk_array_nelem (array))) + PVM_VAL_ARR_ELEM_VALUE (array, idx) = val; } pk_val pk_array_elem_boffset (pk_val array, uint64_t idx) { - return PVM_VAL_ARR_ELEM_OFFSET (array, idx); + if (idx < pk_uint_value (pk_array_nelem (array))) + return PVM_VAL_ARR_ELEM_OFFSET (array, idx); + else + return PK_NULL; } void pk_array_set_elem_boffset (pk_val array, uint64_t idx, pk_val boffset) { - PVM_VAL_ARR_ELEM_OFFSET (array, idx) = boffset; + if (idx < pk_uint_value (pk_array_nelem (array))) + PVM_VAL_ARR_ELEM_OFFSET (array, idx) = boffset; } -- 2.17.1