Co-authored-by: Bob Long <robertlong13@gmail.com>
Co-authored-by: Michelle Rossouw <michelleros128@gmail.com>
another one of our "do nasty thing to autopilot" commands, useful for testing what ground control stations do when the autopilot is in this state
this allows for hwdef entries like this:
PB1 GPIO_CAN1_TERM OUTPUT PUSHPULL SPEED_LOW LOW
PB3 GPIO_CAN1_TERM_LED OUTPUT PUSHPULL SPEED_LOW LOW
PB0 GPIO_CAN1_TERM_SWITCH INPUT FLOAT
that specifies a termination pin controllable by either a parameter or
a hardware switch, with an LED to indicate if termination is active
... if the driver ever asked for prom0 then we would do Very Bad Things here.
File: build/sitl/../../libraries/SITL/SIM_Temperature_TSYS01.cpp
Warning: line 38, column 13
Assigned value is garbage or undefined
Lua opens scripts to load them into memory, then the logger opens them
after to stream them into the dataflash log. When loading multiple large
Lua scripts from ROMFS, decompression takes a significant amount of
time. This creates the opportunity for the Lua interpreter and logging
threads to both be inside `AP_Filesystem_ROMFS::open()` decompressing a
file.
If this happens, the function can return the same `fd` for two different
calls as the `fd` is chosen before decompression starts, but only marked
as being used after that finishes. The read pointers then stomp on each
other, so Lua loads garbled scripts (usually resulting in a syntax
error) and the logger dumps garbled data.
Fix the issue by locking before searching for a free record (or marking
a record as free). Apply the same fix to directories as well. This
doesn't protect against using the same `fd`/`dirp` from multiple
threads, but that behavior is to be discouraged anyway and is not the
root cause here.
the third argument is space remaining in buffer, not size of buffer...
../../libraries/AP_AIS/AP_AIS.cpp:183:71: warning: Potential buffer overflow. Replace with 'sizeof(multi) - strlen(multi) - 1' or use a safer 'strlcat' API [unix.cstring.BadSizeArg]
strncat(multi,_AIVDM_buffer[msg_parts[i]].payload,sizeof(multi));
^~~~~~~~~~~~~
../../libraries/AP_AIS/AP_AIS.cpp:185:49: warning: Potential buffer overflow. Replace with 'sizeof(multi) - strlen(multi) - 1' or use a safer 'strlcat' API [unix.cstring.BadSizeArg]
strncat(multi,_incoming.payload,sizeof(multi));
these would be leaked if the "new" call for the ModeGuidedCustom object failed.
Since resgister_custom_mode may be called multiple times we could leak memory continuously
roll and pitch are unused if !SITL_RANGEFINDER_AS_OBJECT_SENSOR
../../libraries/SITL/SIM_Aircraft.cpp:546:13: warning: Value stored to 'roll' is never read [deadcode.DeadStores]
roll = 0;
^ ~
../../libraries/SITL/SIM_Aircraft.cpp:551:13: warning: Value stored to 'roll' is never read [deadcode.DeadStores]
roll = 0;
^ ~
../../libraries/SITL/SIM_Aircraft.cpp:557:13: warning: Value stored to 'pitch' is never read [deadcode.DeadStores]
pitch = 0;
^ ~
../../libraries/SITL/SIM_Aircraft.cpp:562:13: warning: Value stored to 'pitch' is never read [deadcode.DeadStores]
pitch = 0;