Fix a copy/paste error in decodeSymbols() where FT8 message type
0.3 was checked twice, preventing type 0.4 messages from being
recognized as replies.
FT8::Packing supports both 0.3 and 0.4 message types using the same
reply bit location.
Detected by cppcheck as a redundant condition.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Replace variable-length arrays used for DVB-S2 pilot symbol matching with
std::vector allocations.
Use vector::data() when passing buffers to the existing pointer-based
match_ph_amp() function. This removes non-standard VLA usage and improves
C++ portability without changing behavior.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Replace variable-length arrays used for DVB-S2 pilot symbol matching with
std::vector allocations.
Use vector::data() when passing buffers to the existing pointer-based
match_ph_amp() function. This removes additional non-standard VLA usage and
improves C++ portability without changing behavior.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Replace the variable-length array used for SOF symbol buffering in the
DVB-S2 frame receiver with a std::vector allocation.
Use vector::data() when passing the buffer to the existing pointer-based
conjugate product function. This removes another non-standard VLA usage and
improves C++ portability without changing behavior.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Replace non-standard variable-length arrays used for PLHEADER symbol
processing with std::vector allocations. Update buffer copies and pointer
interfaces accordingly while preserving existing behavior.
This removes VLA compiler/static analysis warnings and improves C++
portability.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
cppcheck reported that the std::copy() call used iterators from different
containers when restoring ADSB demod table column sizes.
The copy operation used settings.m_columnSizes as the source start iterator
but settings.m_columnIndexes as the source end iterator. This was likely a
copy/paste error and resulted in an invalid iterator range.
Use settings.m_columnSizes for both source iterators so column size settings
are restored correctly.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
cppcheck reported boolean expressions being used in bitwise operations
when validating UDP ports. Replace accidental '&' operators with logical
'&&' operators.
Also replace hard-coded port range limits with UINT16_MAX to make the
valid UDP port range explicit and keep UDP source/sink validation
consistent.
No functional change.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
The original leansdr code uses fatal() and fail() for unrecoverable errors by
terminating execution. When integrated into SDRangel, these error paths did
not provide a mechanism for the plugin to handle failures locally, allowing
initialization failures to escape the normal plugin lifecycle.
Convert leansdr fatal() and fail() handling into C++ exceptions so DATV can
detect framework initialization failures, report them, and cleanly return
control to SDRangel instead of allowing the error to terminate the application.
This behavior is desirable because a DATV framework configuration failure
should not bring down the entire application.
Catch initialization exceptions in DATVDemodSink::feed(), report the failure,
clean up the partially initialized framework, and return to the caller.
Add noreturn annotations to the leansdr error functions and include the
leansdr source in exception messages to make failures easier to diagnose.
This does not redesign leansdr error handling or provide recovery from
runtime DSP failures. It only adds an exception boundary between the
leansdr library code and the SDRangel plugin lifecycle.
noticed via cppcheck indicating many Array indexes could go out of bounds
due to fail and fatal returning.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Replace the runtime-sized temporary array in the int8_t specialization of
MinSumAlgorithm::finalp() with std::vector.
The array size is determined by the runtime value of cnt, requiring a
compiler VLA extension. Using std::vector preserves the existing behavior
while removing the dependency on non-standard language extensions.
This eliminates remaining -Wvla warnings (for me) reported from
ldpctool/algorithms.h
Part of #2830
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Replace the runtime-sized temporary array in
MinSumCAlgorithm::finalp() with std::vector.
The temporary array size depends on the runtime value of cnt, requiring a
compiler VLA extension. Using std::vector preserves the existing behavior
while removing the dependency on non-standard language extensions.
This eliminates ~6 of remaining -Wvla warnings (for me) reported
from ldpctool/algorithms.h
Part of #2830
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Replace the runtime-sized temporary array in the int8_t specialization of
OffsetMinSumAlgorithm::finalp() with std::vector.
The array size is determined by the runtime value of cnt, requiring a
compiler VLA extension. Using std::vector preserves the existing behavior
while removing the dependency on non-standard language extensions.
This eliminates ~12 of remaining -Wvla warnings (for me) reported
from ldpctool/algorithms.h
Part of #2830
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Replace the runtime-sized temporary arrays in
OffsetMinSumAlgorithm::finalp() with std::vector.
The array sizes depend on the runtime value of cnt, requiring compiler
support for variable length arrays. Using std::vector removes this
non-standard extension while preserving the existing algorithm and memory
layout.
This eliminates ~24 of remaining -Wvla warnings (for me) reported
from ldpctool/algorithms.h.
Part of #2830
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Replace the runtime-sized temporary arrays used by
MinSumAlgorithm<SIMD<...>>::finalp() with std::vector.
The array sizes are determined at runtime from the number of links,
making them variable-length arrays that rely on compiler extensions.
Using std::vector removes the dependency on VLA support while
preserving the existing algorithm and behavior.
This eliminates ~24 of remaining -Wvla warnings (for me) reported
from ldpctool/algorithms.h.
Part of #2830
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Replace the runtime-sized stack array in the spectrum processing path
with std::vector to avoid compiler VLA extensions.
Although the spectrum template is not instantiated as part of the
current SDRangel build, GCC still emits -Wvla warnings while parsing
the template definition. This change removes those warnings and keeps
the template valid for future use.
Use std::copy() and vector::data() when accessing the underlying
storage.
Part of #2830
Signed-off-by: Robin Getz <rgetz503@gmail.com>
The spectrum template was not being instantiated by the current build,
so stale accesses to cfft_engine::n went unnoticed.
Replace direct accesses to the private cfft_engine member with the
public size() accessor. This restores spectrum compilation and allows
the upcoming VLA cleanup to be built and tested.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Only apply channel settings after BasicChannelSettingsDialog returns an
accepted result. Previously, the return value from dialog.exec() was ignored
and settings were copied from the dialog regardless of whether the dialog was
accepted or rejected.
This could cause changes made in the channel settings dialog to be applied
even when the user discarded them. Check the dialog result before updating
the channel title, color, Reverse API configuration, and stream index to keep
the GUI state synchronized with the user's action.
This also fixes the Coverity CHECKED_RETURN warning for the unchecked
QDialog::exec() return value.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize previously unset FFTMeasurement members with defined default
values so newly constructed measurement objects start in a known state.
Although these fields are populated during normal measurement processing,
constructors should establish a complete and deterministic object state
rather than leaving scalar members with indeterminate values. This also
makes the class safer if the initialization sequence changes in the future.
This fixes a Coverity UNINIT_CTOR warning caused by uninitialized scalar
members in the constructor.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize m_min and m_max in the SensorMeasurements constructor to ensure
the object has a valid state immediately after construction, before init()
is called.
Although init() sets these values before normal use, constructors should
fully initialize all class members to avoid leaving objects with undefined
state and to make the class safe to use regardless of initialization order.
This fixes a Coverity UNINIT_CTOR warning caused by uninitialized scalar
members in the constructor.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
RadioAstronomyGUI::spectrumSeries_clicked() called
calcVrAndDistanceToPeak() without verifying that currentFFT() returned a
valid FFTMeasurement. Since currentFFT() can return nullptr and
calcVrAndDistanceToPeak() immediately dereferences the pointer, this could
result in a null pointer dereference.
Guard the calls so they are only made when a valid FFT measurement is
available, matching the existing pattern used elsewhere in the class.
Reported by Coverity (CID 649213).
Signed-off-by: Robin Getz <rgetz503@gmail.com>
The ui object is created during MeshcoreDemodGUI and MeshtasticDemodGUI
construction and remains valid for the lifetime of the widget. Remove
the unnecessary null check to avoid misleading static analysis tools
into assuming ui can be null.
This resolves a Coverity false positive where the later call to
updateDechirpModeUI() was reported as a possible null dereference
in both places.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Fix Coverity CID 649243 (DIVIDE_BY_ZERO) by validating sweep step
values before calculating 2D sweep dimensions.
Move sweep step validation to on_startStop_clicked() so invalid sweep
configurations are reported to the user before a sweep begins. Display
an error message when either sweep step is zero and prevent the sweep
from starting.
Retain defensive validation when updating 2D sweep settings to guard
against invalid configurations received from saved settings or other
code paths.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Fix a Coverity UNINIT warning in RadioAstronomyGUI::update2DImage()
where the intensity variable could be used uninitialized if
m_powerYUnits contained an unexpected value and followed the default path.
Handle the default switch case by logging a warning and falling back
to fft->m_totalPowerdBFS, ensuring intensity is always initialized
before being used while providing diagnostics for invalid enum values.
Fixes Coverity CID 649242.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Fix Coverity CID 649221 (DIVIDE_BY_ZERO) by validating the cold
calibration power sum before calculating the Y-factor.
Refactor calcCalTrx() to use early returns for invalid calibration
states and avoid duplicated UI clearing logic. Also handle the
undefined Y-factor case when hot and cold measurements have equal power.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Fix Coverity CID 649238 (DIVIDE_BY_ZERO) by validating the reference
column count before using it as a divisor in plotChart().
The reference column count can be cleared when removing reference data,
in on_clearReference_clicked() so ensure chart rendering handles an empty
reference configuration safely.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Fix Coverity CID 649215 (OVERFLOW_BEFORE_WIDEN) by ensuring the band
preset frequency calculation is widened to 64-bit before converting
kHz to Hz.
This prevents a potential 32-bit intermediate overflow when applying
band presets (which is likely not a real issue, but it keeps the
analyzer happy).
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Fix Coverity CID 649088 (CONSTANT_EXPRESSION_RESULT) in the BDS 4,1
next waypoint decoding logic.
The high bit contribution to waypoint character c[5] was incorrectly
shifted right by 3, causing the expression to always evaluate to zero
and discard a valid bit from the decoded character. Change the shift
direction to correctly place the extracted bit into the character field.
This restores proper decoding of the BDS 4,1 waypoint string and removes
the Coverity warning.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Fix an incorrect bit shift when decoding aircraft registration
markings from BDS 2,1 Comm-B messages.
Coverity (CID 649088) reported that the expression
'(data[7] & 0x1) >> 3' always evaluates to zero, causing one bit of
the 6-bit character value to be discarded.
The BDS 2,1 aircraft registration marking format encodes seven
6-bit characters. Based on the bit layout defined in ICAO Doc 9871
(Technical Provisions for Mode S Specific Services) and verified
against independent implementations such as pyModeS/rs1090, the
remaining bit from data[7] is the most significant bit of the
character and must be shifted left, not right.
Update the extraction to preserve this bit when combining it with
the remaining bits from data[8].
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize the AircraftModel settings pointer to nullptr.
Coverity (CID 649096) flagged m_settings as potentially
uninitialized because the compiler-generated constructor does not
initialize it. Initialize it to nullptr, which is the appropriate
default until setSettings() provides a valid pointer.
This is likely not an issue, as m_settings is typically assigned
shortly after construction. However, correctness depends on that
assumption holding everywhere. Initializing it in the declaration
costs nothing, removes the dependency on initialization order, and
eliminates this class of bugs.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize the remaining Aircraft members that were previously left
uninitialized by the constructor.
Coverity (CID 649090) flagged m_pressureAltitude, m_squawk,
m_range, m_lastColor, m_prevTrack, and
m_trackWhenHeadingSet as potentially uninitialized. Initialize
them to sensible default values consistent with their intended use.
This is likely not an issue, as these members are generally
initialized before use. However, correctness depends on that
assumption holding everywhere. Initializing them in the constructor
costs nothing, removes the dependency on call ordering, and
eliminates this class of bugs.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize all coordinate boundary members in the Interogator
constructor.
Coverity (CID 649097) flagged m_minLatitude, m_maxLatitude,
m_minLongitude, and m_maxLongitude as potentially uninitialized.
Initialize them to max()/lowest() sentinel values so subsequent
min/max accumulation logic operates on defined data.
This is likely not an issue, but safety depends on discipline
across the entire codebase, every place these members are
accessed must check m_valid first. Cleaner approach is to just
initialize them, it costs nothing and eliminates the entire class of bugs.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Both plugin readmes listed the SWGMeshtastic* placeholder as an
outstanding item needing dedicated SWGMeshcore* schemas. This PR
provides exactly that — strike the stale todo and note the resolution.