Fix undefined behavior and memory leak in AfskModulator - #809
Open
MarkRose wants to merge 1 commit into
Open
Conversation
- Fix undefined-behavior read of back() on an empty deque during end-of-frame fade-out. When the last symbol is popped from bitbuf in writeToSink(), the deque becomes empty; the fade-out code then refilled it with bitbuf.push_back(bitbuf.back()), reading from an empty container on the first iteration. This fired at the end of every AFSK burst. Capture the last transmitted bit before popping it and use that saved value to refill the deque instead. - Free the sin_lookup and exp_lookup heap-allocated lookup tables in ~AfskModulator(); they were allocated with new[] in the constructor but never released, leaking on every destruction of the modulator. Co-Authored-By: Claude Opus 4.8 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fix undefined-behavior read of back() on an empty deque during
end-of-frame fade-out. When the last symbol is popped from bitbuf
in writeToSink(), the deque becomes empty; the fade-out code then
refilled it with bitbuf.push_back(bitbuf.back()), reading from an
empty container on the first iteration. This fired at the end of
every AFSK burst. Capture the last transmitted bit before popping
it and use that saved value to refill the deque instead.
Free the sin_lookup and exp_lookup heap-allocated lookup tables in
~AfskModulator(); they were allocated with new[] in the constructor
but never released, leaking on every destruction of the modulator.
Co-Authored-By: Claude Opus 4.8 [email protected]