From: Jean Perier Date: Wed, 28 Nov 2018 00:07:21 +0000 (-0800) Subject: [flang] Added nullptr check in CFI functions returning error codes X-Git-Tag: llvmorg-12-init~9537^2~1842 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9b3d9e52f23aff19fe464ed1a17d995af1a56775;p=platform%2Fupstream%2Fllvm.git [flang] Added nullptr check in CFI functions returning error codes Original-commit: flang-compiler/f18@5213d3a92119e509a173aa74abbe794a70b0c9aa Reviewed-on: https://github.com/flang-compiler/f18/pull/227 Tree-same-pre-rewrite: false --- diff --git a/flang/runtime/ISO_Fortran_binding.cc b/flang/runtime/ISO_Fortran_binding.cc index 6a48d34..1838540 100644 --- a/flang/runtime/ISO_Fortran_binding.cc +++ b/flang/runtime/ISO_Fortran_binding.cc @@ -33,6 +33,9 @@ void *CFI_address( int CFI_allocate(CFI_cdesc_t *descriptor, const CFI_index_t lower_bounds[], const CFI_index_t upper_bounds[], std::size_t elem_len) { + if (descriptor == nullptr) { + return CFI_INVALID_DESCRIPTOR; + } if (descriptor->version != CFI_VERSION) { return CFI_INVALID_DESCRIPTOR; } @@ -80,6 +83,9 @@ int CFI_allocate(CFI_cdesc_t *descriptor, const CFI_index_t lower_bounds[], } int CFI_deallocate(CFI_cdesc_t *descriptor) { + if (descriptor == nullptr) { + return CFI_INVALID_DESCRIPTOR; + } if (descriptor->version != CFI_VERSION) { return CFI_INVALID_DESCRIPTOR; } @@ -157,6 +163,9 @@ int CFI_establish(CFI_cdesc_t *descriptor, void *base_addr, if (type < CFI_type_signed_char || type > CFI_type_struct) { return CFI_INVALID_TYPE; } + if (descriptor == nullptr) { + return CFI_INVALID_DESCRIPTOR; + } std::size_t minElemLen{MinElemLen(type)}; if (minElemLen > 0) { elem_len = minElemLen; @@ -204,8 +213,10 @@ int CFI_section(CFI_cdesc_t *result, const CFI_cdesc_t *source, CFI_index_t extent[CFI_MAX_RANK]; CFI_index_t actualStride[CFI_MAX_RANK]; CFI_rank_t resRank{0}; - char *shiftedBaseAddr{static_cast(source->base_addr)}; + if (result == nullptr || source == nullptr) { + return CFI_INVALID_DESCRIPTOR; + } if (source->rank == 0) { return CFI_INVALID_RANK; } @@ -223,6 +234,7 @@ int CFI_section(CFI_cdesc_t *result, const CFI_cdesc_t *source, return CFI_ERROR_BASE_ADDR_NULL; } + char *shiftedBaseAddr{static_cast(source->base_addr)}; bool isZeroSized{false}; for (int j{0}; j < source->rank; ++j) { const CFI_dim_t &dim{source->dim[j]}; @@ -269,6 +281,9 @@ int CFI_section(CFI_cdesc_t *result, const CFI_cdesc_t *source, int CFI_select_part(CFI_cdesc_t *result, const CFI_cdesc_t *source, std::size_t displacement, std::size_t elem_len) { + if (result == nullptr || source == nullptr) { + return CFI_INVALID_DESCRIPTOR; + } if (result->rank != source->rank) { return CFI_INVALID_RANK; } @@ -302,6 +317,9 @@ int CFI_select_part(CFI_cdesc_t *result, const CFI_cdesc_t *source, int CFI_setpointer(CFI_cdesc_t *result, const CFI_cdesc_t *source, const CFI_index_t lower_bounds[]) { + if (result == nullptr) { + return CFI_INVALID_DESCRIPTOR; + } if (result->attribute != CFI_attribute_pointer) { return CFI_INVALID_ATTRIBUTE; }