Use the validated bandwidth index when accessing bandwidth tables in the
ChirpChat, MeshCore, and Meshtastic channel GUIs. The previous code used the
raw UI value after clamping it into m_bandwidthIndex, allowing negative or
out-of-range array accesses.
Found by cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize m_rollupState to nullptr in the constructor and set
m_autoNbSymbolsMax to false in resetToDefaults(). This ensures the optional
rollup state pointer and the automatic message length setting have defined
initial values rather than relying on uninitialized storage.
Pointed out by cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize m_radiotext_AB_flag in the RDSParser constructor to ensure the
radio text state is defined before the first Group 2 update.
Keep the flag out of clearUpdateFlags() because it is persistent parser state,
not a transient update flag. Resetting it when update flags are cleared could
incorrectly appear as an A/B transition and cause stale radio text handling.
Pointed out by cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Zero-initialize the pilot PLL sample buffer used by BFMDemodSink.
This ensures all four PLL sample values have defined initial values
before they are consumed by the FM stereo processing path and removes
the uninitialized member warning reported by cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize the field and vertical sync detection sample counters and
the previous sample value in ATVDemodSink.
This gives the video synchronization state defined initial values when
the sink is constructed and removes the uninitialized member warnings
reported by cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize the channel pointer to nullptr and zero-initialize the
synchronous AM demodulation buffer in AMDemodSink.
This ensures both members have defined values when the sink is
constructed and removes the uninitialized member warnings reported by
cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize the m_bytes buffer to zero so all elements have defined
values when an AISDemodSink is constructed.
Detected by cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize m_matchColumn and m_autoTarget in the NotificationSettings
constructor rather than assigning m_matchColumn in the constructor body.
This ensures both members are initialized before the constructor body
executes and removes the uninitialized m_autoTarget member.
Detected by cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Value-initialize the Interogator airspace member so it has a defined
state when an Interogator is constructed.
Found by cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize the CPR latitude and longitude state when an Aircraft is
created so the position data has defined values before the first CPR
calculation.
Found by cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize m_channel to nullptr in the ChannelPowerSink constructor to
ensure the pointer has a defined value before a channel is assigned.
Found by cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize m_scopeGUI to nullptr in the settings constructor. The pointer
was not initialized and is only assigned through setScopeGUI().
Detected by cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize m_useReverseAPI to false when resetting Interferometer settings
to their defaults. The member was not initialized by the constructor or
resetToDefaults(), allowing its value to be read before being set.
Detected by cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize m_useReverseAPI to false when resetting DOA2 settings to their
defaults. The member was not initialized by the constructor or
resetToDefaults(), allowing its value to be read before being set.
Detected by cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Initialize m_streamIndex to zero in the stream source constructor.
BeamSteeringCWModBaseband subsequently assigns each source its actual
stream index, but initializing the member ensures getStreamIndex() does
not expose an indeterminate value during construction.
Detected by cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Avoid incrementing an iterator after it has been invalidated by
QMap::erase() by using the iterator returned from erase().
This fixes undefined behavior when removing a channel from m_channelsMap.
Found by cppcheck.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Create and populate the VOR service report message as before, but delete it
when the feature message queue is not available.
The message is normally transferred to `m_msgQueueToFeature` for ownership,
but when the queue is null there is no owner and the allocated message leaked.
Coverity reported the leak as CID 652338 (`RESOURCE_LEAK`) while analyzing
`VorLocalizerWorker::rrNextTurn()`. Review of the surrounding message queue
usage confirmed that queued messages are owned by the queue, making the
missing-queue path the unhandled ownership case.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Add a destructor to s2_deframer to release the pipewriter objects owned by
state_out and locktime_out.
opt_writer() allocates these pipewriters dynamically when the corresponding
output pipe is provided. Without a destructor, the objects were leaked when
s2_deframer was destroyed.
Coverity reported CTOR_DTOR_LEAK findings for state_out and locktime_out.
The existing leansdr code was reviewed and confirmed that other users of
opt_writer() explicitly delete the resulting pipewriters in their
destructors, so s2_deframer was missing the corresponding cleanup.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Unload the dynamically loaded VISA library when the VISA object is
destroyed and ensure radio astronomy VISA sessions are closed first.
Coverity reported a resource leak because `visaLibrary` was loaded with
`LoadLibrary`/`dlopen` but was never released. It also identified
uninitialized VISA function pointers and the library handle.
Initialize the remaining pointers, add platform-specific library cleanup,
and close all radio astronomy instrument sessions before releasing the
default VISA resource manager. The other VISA users were reviewed to
verify that their sessions and default resource managers are also closed
before their VISA objects are destroyed.
The library is only unloaded when no default resource manager session
remains active, avoiding unloading the VISA library while it is still in
use.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Only allocate `MsgSampleRateCorrection` when a feedback message queue is
available.
The message was previously allocated before checking `m_autoRWBalance`
and `m_feedbackMessageQueue`. When either condition was false, the
message was never queued and its allocation was leaked.
Coverity CID 652413 reported a `RESOURCE_LEAK` after tracing the allocation
from `MsgSampleRateCorrection::create()` to the point where the local pointer
went out of scope without being transferred to the feedback queue.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Free the bitcount and errcount pipe writers owned by s2_fecdec.
The writers are allocated by opt_writer() but were not released when
s2_fecdec was destroyed, causing the allocations to leak.
Coverity reported a CTOR_DTOR_LEAK in the s2_fecdec constructor,
identifying the allocations without corresponding destructor cleanup.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Delete the FFT-based RRC filter when RRCHelper is destroyed.
RRCHelper allocates m_filterFFT but the destructor did not release it,
leaking the filter for every RRCHelper instance.
Coverity flagged the missing destructor cleanup as a CTOR_DTOR_LEAK.
The existing destructor already releases the FIR filter and sample buffer,
making the FFT filter cleanup part of the same ownership path.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Add a destructor to ObjectMapItem to release its owned m_aircraftState.
ObjectMapItem allocates m_aircraftState when aircraft state is present,
but had no corresponding cleanup when the map item was destroyed.
Coverity reported the allocation as a constructor/destructor resource
leak.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
SWGFreqScannerSettings is newly created without a frequency list, so
there is no need to check for or copy into an existing list. Transfer
the newly created frequency list directly to the settings object.
The previous copy path left the newly allocated QList unowned when an
existing frequency list was present. This leaked the list because the
assignment copied its contents rather than transferring ownership.
This also resolves that resource leak identified by Coverity.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Coverity reported a resource leak for the bitcount and errcount writers
allocated by opt_writer(). Free them when the FEC decoder helper is
destroyed, matching the existing cleanup used by other LeanSDR components.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Fix Coverity CID 652347 reporting an uninitialized scalar variable.
Replace XOR self-assignment with explicit zero initialization to
avoid reading uninitialized SIMD elements.
Modern compilers already optimize zero assignments to efficient
zeroing instructions where appropriate.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Coverity reported an uninitialized value use in AISModSource::modulateSample().
The Gaussian filter output variable was only assigned during transmission,
but was used afterwards when the modulator was idle or waiting.
Initialize the variable to zero to match the idle sample behavior.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Coverity reported an uninitialized m_rx2txGPIOEnable value when it was
used by SimplePTTGUI before settings were loaded. Initialize the setting
in resetToDefaults() to provide a defined default value.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Coverity reported an uninitialized scalar use of varPhase when the
reference and variable Goertzel filters completed at different times.
Store the last valid variable phase and magnitude values to ensure the
radial calculation always uses initialized data.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
Coverity reported that an invalid sample size could leave the
conversion buffer uninitialized before it was passed to calcPower()
and the sample FIFO.
Return early when the sample conversion format is unsupported to
prevent processing invalid data.
Signed-off-by: Robin Getz <rgetz503@gmail.com>
The HDLC encoder accumulated bits into m_bits using the |= operator
without first initializing the first byte. This resulted in an
uninitialized read of m_bits[0] when encoding the first bit of a
packet.
Initialize each output byte when writing its first bit, ensuring the
buffer contains a defined value before bits are OR'ed into it. This
also makes addBit() self-contained, eliminating the need for callers to
pre-initialize the current output byte.
Reported by Coverity.
Signed-off-by: Robin Getz <rgetz503@gmail.com>