Skip to content

Conversation

jesper-olsen
Copy link
Contributor

Pull Request Template

Description

Fix heap corruption in Floyd's algorithm tests

Problem

The test test_detect_cycle_with_cycle creates a cycle in a LinkedList but doesn't break it before the list is dropped. This causes heap corruption because the Drop implementation tries to free nodes in an infinite loop, potentially causing double-frees.

Solution

Break the cycle at the end of the test by setting the tail's next pointer to None.

Testing

  • Ran cargo test data_structures multiple times without heap corruption errors
  • Confirmed the fix by running tests with --test-threads=1 for consistency

Fixes intermittent test failures with "Heap corruption detected" errors.

Type of change

Please delete options that are not relevant.

  • [x ] Bug fix (non-breaking change which fixes an issue)

Checklist:

  • [x ] I ran bellow commands using the latest version of rust nightly.
  • [x ] I ran cargo clippy --all -- -D warnings just before my last commit and fixed any issue that was found.

Note I ran cargo clippy --all -- -D warnings locally, and the build fails due to 24 existing warnings/errors (e.g., clippy::manual-is-multiple-of, clippy::needless-range-loop) in unrelated files (ciphers, math, sorting).

  • [x ] I ran cargo fmt just before my last commit.
  • I ran cargo test just before my last commit and all tests passed.
  • [x ] I checked COUNTRIBUTING.md and my code follows its guidelines.

Please make sure that if there is a test that takes too long to run ( > 300ms), you #[ignore] that or
try to optimize your code or make the test easier to run. We have this rule because we have hundreds of
tests to run; If each one of them took 300ms, we would have to wait for a long time.

- Change HuffmanDictionary::new() to return Option<Self> for safer API
- Add proper handling for empty alphabet (returns None)
- Add special case handling for single-symbol alphabets
- Replace unwrap() calls with ? operator in decode() for better error handling
- Add #[inline(always)] optimization for frequently called get_bit()
- Add comprehensive tests for edge cases
- Improve documentation with usage examples

BREAKING CHANGE: HuffmanDictionary::new() now returns Option<Self>
@codecov-commenter
Copy link

Codecov Report

❌ Patch coverage is 96.92308% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 95.32%. Comparing base (f2a23e9) to head (9b57391).

Files with missing lines Patch % Lines
src/general/huffman_encoding.rs 96.72% 2 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##           master     #913   +/-   ##
=======================================
  Coverage   95.32%   95.32%           
=======================================
  Files         319      319           
  Lines       20807    20858   +51     
=======================================
+ Hits        19834    19883   +49     
- Misses        973      975    +2     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants