Skip to content

Commit d652dbd

Browse files
authored
Merge pull request #6 from soburi/copilot/sub-pr-4-again
Add bounds checking for arduino_pins array access in digital_pin_gpios path
2 parents 9ac9ac8 + 010e8d5 commit d652dbd

2 files changed

Lines changed: 7 additions & 2 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
rust/Cargo.lock
2+
_codeql_build_dir/
3+
_codeql_detected_source_root

cores/arduino/zephyrCommon.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,22 +115,25 @@ constexpr inline pin_size_t global_gpio_pin(const struct device *lport, pin_size
115115

116116
constexpr inline const struct device *local_gpio_port(pin_size_t gpin) {
117117
#if DT_NODE_HAS_PROP(DT_PATH(zephyr_user), digital_pin_gpios)
118-
return arduino_pins[gpin].port;
118+
return (gpin < ARRAY_SIZE(arduino_pins)) ? arduino_pins[gpin].port : nullptr;
119119
#else
120120
return local_gpio_port_r(gpin, gpio_ports, 0, gpio_ngpios, ARRAY_SIZE(gpio_ports));
121121
#endif
122122
}
123123

124124
constexpr inline pin_size_t local_gpio_pin(pin_size_t gpin) {
125125
#if DT_NODE_HAS_PROP(DT_PATH(zephyr_user), digital_pin_gpios)
126-
return arduino_pins[gpin].pin;
126+
return (gpin < ARRAY_SIZE(arduino_pins)) ? arduino_pins[gpin].pin : pin_size_t(-1);
127127
#else
128128
return port_idx(gpin) == pin_size_t(-1) ? pin_size_t(-1) : gpin - end_accum(port_idx(gpin));
129129
#endif
130130
}
131131

132132
inline int global_gpio_pin_configure(pin_size_t pinNumber, int flags) {
133133
#if DT_NODE_HAS_PROP(DT_PATH(zephyr_user), digital_pin_gpios)
134+
if (pinNumber >= ARRAY_SIZE(arduino_pins)) {
135+
return -1;
136+
}
134137
return gpio_pin_configure_dt(&arduino_pins[pinNumber], flags);
135138
#else
136139
const struct device *port = local_gpio_port(pinNumber);

0 commit comments

Comments
 (0)