diff options
author | Lorenz Meier <lm@inf.ethz.ch> | 2015-05-04 14:58:57 +0200 |
---|---|---|
committer | Lorenz Meier <lm@inf.ethz.ch> | 2015-05-04 14:59:07 +0200 |
commit | e09f5d2871f0c23cf8eb8154a2fa8831d9b96062 (patch) | |
tree | a375151d332cd0cb510fc5213158853601b106e0 /src | |
parent | 980d9bcf3eba96c7e6f4b46039e0484c5e1f3eea (diff) | |
download | px4-firmware-e09f5d2871f0c23cf8eb8154a2fa8831d9b96062.tar.gz px4-firmware-e09f5d2871f0c23cf8eb8154a2fa8831d9b96062.tar.bz2 px4-firmware-e09f5d2871f0c23cf8eb8154a2fa8831d9b96062.zip |
IO driver: Ensure comms protocol cannot get into integer overflow on bad control outputs. Fixes #2119.
Diffstat (limited to 'src')
-rw-r--r-- | src/drivers/px4io/px4io.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/drivers/px4io/px4io.cpp b/src/drivers/px4io/px4io.cpp index 9032a9669..b974b711f 100644 --- a/src/drivers/px4io/px4io.cpp +++ b/src/drivers/px4io/px4io.cpp @@ -1181,7 +1181,17 @@ PX4IO::io_set_control_state(unsigned group) } for (unsigned i = 0; i < _max_controls; i++) { - regs[i] = FLOAT_TO_REG(controls.control[i]); + + /* ensure FLOAT_TO_REG does not produce an integer overflow */ + float ctrl = controls.control[i]; + + if (ctrl < -1.0f) { + ctrl = -1.0f; + } else if (ctrl > 1.0f) { + ctrl = 1.0f; + } + + regs[i] = FLOAT_TO_REG(ctrl); } /* copy values to registers in IO */ |