apache / mynewt-nimble

Apache mynewt
https://mynewt.apache.org/
Apache License 2.0
665 stars 385 forks source link

nimble/host: Fix compilation error in ble_store_config.c #1737

Closed kasjer closed 3 months ago

kasjer commented 3 months ago

This should fix compilation error when -O2 optimization is enabled. GCC incorrectly detects problem. This change adds asserts that convinces GCC that pre-condition will not result in accessing memory out-of-bounds.

This also changes one condition that also contributes to make GCC convinced that pre-condition are met.

Error: In function 'ble_store_config_delete_obj', inlined from 'ble_store_config_delete_cccd' at repos/apache-mynewt-nimble/nimble/host/store/config/src/ble_store_config.c:380:10, inlined from 'ble_store_config_delete' at repos/apache-mynewt-nimble/nimble/host/store/config/src/ble_store_config.c:542:14: repos/apache-mynewt-nimble/nimble/host/store/config/src/ble_store_config.c:193:9: error: 'memmove' offset [16, 31] is out of the bounds [0, 16] of object 'ble_store_config_cccds' with type 'struct ble_store_value_cccd[1]' [-Werror=array-bounds] 193 | memmove(dst, src, move_count * value_size); | ^~~~~~~~~~ repos/apache-mynewt-nimble/nimble/host/store/config/src/ble_store_config.c: In function 'ble_store_config_delete': repos/apache-mynewt-nimble/nimble/host/store/config/src/ble_store_config.c:45:5: note: 'ble_store_config_cccds' declared here 45 | ble_store_config_cccds[MYNEWT_VAL(BLE_STORE_MAX_CCCDS)];

This should solve problem that #1693 tries to solve