1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-08-22 11:34:10 -04:00

6597 Commits

Author SHA1 Message Date
f4exb 97e9e21fe9 Release v7.27.2 2026-08-19 20:28:39 +02:00
Edouard Griffiths 646e0cf3a3 Merge pull request #2883 from rgetz/rgetz-fix-negativeIndex
channel: fix bandwidth index validation
2026-08-16 17:51:16 +02:00
Edouard Griffiths 6052fc8f04 Merge pull request #2882 from rgetz/rgetz-resolve-uninitMemberVar-1
Initialize members identified by cppcheck as potentially uninitialized across the demodulator and channel code.
2026-08-16 15:03:07 +02:00
Edouard Griffiths 25c354476c Merge pull request #2881 from rgetz/rgetz-fix-used-after-erase
afc: fix iterator invalidation when removing channels
2026-08-16 11:14:37 +02:00
Edouard Griffiths d8feb80e98 Merge pull request #2880 from rgetz/rgetz-fix-resource-leaks
Fix resource ownership and cleanup issues across several SDRangel components.
2026-08-16 06:15:24 +02:00
Robin Getz 8aea40f300 channel: fix bandwidth index validation
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>
2026-08-10 20:21:35 -04:00
Robin Getz 9c6ec8aab6 demodchirpchat: initialize missing settings members
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>
2026-08-10 19:55:46 -04:00
Robin Getz 9c8d90f4cf demodbfm: initialize RDS radio text A/B flag
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>
2026-08-10 19:48:36 -04:00
Robin Getz fa750948e1 demodbfm: initialize pilot PLL sample buffer
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>
2026-08-10 19:40:02 -04:00
Robin Getz 65dc673bef demodatv: initialize uninitialized sync detection members
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>
2026-08-10 19:37:10 -04:00
Robin Getz ac75334533 demodam: initialize uninitialized sink members
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>
2026-08-10 19:30:04 -04:00
Robin Getz 56026014c3 demodais: initialize message byte buffer
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>
2026-08-10 19:23:29 -04:00
Robin Getz 248ba9426b demodadsb: initialize notification settings members
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>
2026-08-10 19:20:19 -04:00
Robin Getz 532387f622 adsb: initialize interrogator airspace
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>
2026-08-10 19:14:54 -04:00
Robin Getz d532fed0e9 adsb: initialize CPR position state
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>
2026-08-10 19:09:26 -04:00
Robin Getz 9a71a8e697 channelpower: initialize channel pointer
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>
2026-08-10 19:04:11 -04:00
Robin Getz fc7e7e5791 To be merged with channelpower: initialize scope GUI pointer
Signed-off-by: Robin Getz <rgetz503@gmail.com>
2026-08-10 19:02:13 -04:00
Robin Getz 8d933879f8 channelpower: initialize scope GUI pointer
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>
2026-08-10 18:51:58 -04:00
Robin Getz 7bc8f5cc31 interferometer: initialize reverse API setting
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>
2026-08-10 18:48:15 -04:00
Robin Getz c52c563e55 doa2: initialize reverse API setting
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>
2026-08-10 18:45:27 -04:00
Robin Getz 740cb53f0b beamsteeringcwmod: initialize stream source index
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>
2026-08-10 18:41:57 -04:00
Edouard Griffiths c861ae06a3 Merge pull request #2869 from rgetz/rgetz-fix-containerOutOfBounds
Fix cppcheck-reported out-of-bounds accesses
2026-08-10 11:42:16 +02:00
Robin Getz 77fa427e62 afc: fix iterator invalidation when removing channels
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>
2026-08-09 21:17:13 -04:00
Robin Getz ccc140fbf7 vorlocalizer: fix leaked report message
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>
2026-08-09 19:53:20 -04:00
Robin Getz edd7092444 leansdr: fix pipewriter leaks in s2_deframer
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>
2026-08-09 19:45:52 -04:00
Robin Getz c29e491194 visa: close dynamically loaded VISA library
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>
2026-08-09 19:35:41 -04:00
Robin Getz 4498bc62b2 udpsource: avoid leaking sample rate correction messages
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>
2026-08-09 18:22:34 -04:00
Robin Getz 874fbbd65d dvbs2: fix leaked fec decoder writers
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>
2026-08-09 18:10:33 -04:00
Robin Getz 9039a6ec9d chanalyzer: release FFT filter in RRCHelper destructor
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>
2026-08-09 18:00:17 -04:00
Robin Getz 164a35b083 map: release aircraft state with map item
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>
2026-08-09 17:41:39 -04:00
Robin Getz c88cc7236a freqscanner: simplify frequency list handling
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>
2026-08-09 17:33:58 -04:00
Robin Getz daea77ff23 dvbs2: fix leaked fec decoder writers
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>
2026-08-09 17:14:06 -04:00
Edouard Griffiths 34215520ec Merge pull request #2864 from rgetz/rgetz-fix-uninitStructMember
fix uninit struct members
2026-08-09 20:02:04 +02:00
Edouard Griffiths 7abc5b3274 Merge pull request #2873 from srcejon/fixes
AIS, Packet and Pager demodulator improvements
2026-08-07 19:02:06 +02:00
Jon Beniston ed7903cb53 Copy missing settings. 2026-08-04 02:11:20 +01:00
Jon Beniston 0b71f7c746 Fix typo for useFileTime 2026-08-04 02:06:51 +01:00
Jon Beniston 02667a306f Improve AIS acquisition. 2026-08-04 01:54:38 +01:00
Jon Beniston afd178a3a4 Fix typo in useFileTime 2026-08-04 01:18:14 +01:00
Jon Beniston a67629c6da Avoid divide by zero, which can block demod 2026-08-04 01:18:01 +01:00
Jon Beniston 80ef2b2847 Improve packet detection 2026-08-04 01:17:24 +01:00
Jon Beniston 8ebdf56c19 Merge branch 'fixes' of https://github.com/srcejon/sdrangel into fixes 2026-08-03 14:06:15 +01:00
Jon Beniston 7e5d4f8d43 Packet Demod: Add MLSE demod and Chase decoding to improve performance. 2026-08-03 14:06:11 +01:00
srcejon 0d67de7847 Merge branch 'f4exb:master' into fixes 2026-08-03 13:42:07 +01:00
Jon Beniston db0a085096 Match values in resetToDefaults. 2026-08-03 01:44:35 +01:00
Robin Getz 99da6143dc ldpctool: fix uninitialized variable in vzero
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>
2026-08-02 20:39:53 -04:00
Robin Getz 4b1a910c12 modais: Initialize AIS modulator sample variable
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>
2026-08-02 20:39:53 -04:00
Robin Getz 7e96f9c139 simpleptt: Initialize rx to tx GPIO enable setting
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>
2026-08-02 20:39:52 -04:00
Robin Getz bb01f58f28 demodvormc: Fix uninitialized variable phase in radial calculation
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>
2026-08-02 20:39:51 -04:00
Robin Getz d4f36753ed remotetcpinput: Avoid using uninitialized converter buffer
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>
2026-08-02 20:39:50 -04:00
Robin Getz ee24189bd2 modais: Initialize output bytes before HDLC bit packing
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>
2026-08-02 18:53:58 -04:00