From 37db873fb97cdcd0b477055dbace7bdc7aee80cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Fran=C3=A7ois=20DEL=20NERO?= Date: Mon, 20 Nov 2023 19:36:28 +0100 Subject: [PATCH] fix some static analyzer reports (Null pointer Dereferences) --- src/mtp_properties.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/mtp_properties.c b/src/mtp_properties.c index 1e55599..d21229d 100644 --- a/src/mtp_properties.c +++ b/src/mtp_properties.c @@ -675,6 +675,19 @@ int build_DevicePropValue_dataset(mtp_ctx * ctx,void * buffer, int maxsize,uint3 int objectproplist_element(mtp_ctx * ctx, void * buffer, int * ofs, int maxsize, uint16_t prop_code, uint32_t handle, void * data,uint32_t prop_code_param) { int i; + uint64_t tmp_data[2]; + void * tmp_ptr; + + if( !ofs ) + return 0; + + tmp_data[0] = 0; + tmp_data[1] = 0; + + if( data ) + tmp_ptr = data; + else + tmp_ptr = (void*)&tmp_data; if( (prop_code != prop_code_param) && (prop_code_param != 0xFFFFFFFF) ) { @@ -695,28 +708,25 @@ int objectproplist_element(mtp_ctx * ctx, void * buffer, int * ofs, int maxsize, switch(properties[i].data_type) { case MTP_TYPE_STR: - if(data) - *ofs = poke_string(buffer, *ofs, maxsize, (char*)data); - else - *ofs = poke08(buffer, *ofs, maxsize, 0); + *ofs = poke_string(buffer, *ofs, maxsize, (char*)tmp_ptr); break; case MTP_TYPE_UINT8: - *ofs = poke08(buffer, *ofs, maxsize, *((uint8_t*)data)); + *ofs = poke08(buffer, *ofs, maxsize, *((uint8_t*)tmp_ptr)); break; case MTP_TYPE_UINT16: - *ofs = poke16(buffer, *ofs, maxsize, *((uint16_t*)data)); + *ofs = poke16(buffer, *ofs, maxsize, *((uint16_t*)tmp_ptr)); break; case MTP_TYPE_UINT32: - *ofs = poke32(buffer, *ofs, maxsize, *((uint32_t*)data)); + *ofs = poke32(buffer, *ofs, maxsize, *((uint32_t*)tmp_ptr)); break; case MTP_TYPE_UINT64: - *ofs = poke32(buffer, *ofs, maxsize, *((uint64_t*)data) & 0xFFFFFFFF); - *ofs = poke32(buffer, *ofs, maxsize, *((uint64_t*)data) >> 32); + *ofs = poke32(buffer, *ofs, maxsize, *((uint64_t*)tmp_ptr) & 0xFFFFFFFF); + *ofs = poke32(buffer, *ofs, maxsize, *((uint64_t*)tmp_ptr) >> 32); break; case MTP_TYPE_UINT128: for(i=0;i<4;i++) { - *ofs = poke32(buffer, *ofs, maxsize, *((uint32_t*)data)+i); + *ofs = poke32(buffer, *ofs, maxsize, *((uint32_t*)tmp_ptr)+i); } break; default: