Skip to content

fix(binding): fix mem leak#225

Merged
wemeetagain merged 2 commits intomainfrom
gr/mem_leak_binding_bsv
Feb 26, 2026
Merged

fix(binding): fix mem leak#225
wemeetagain merged 2 commits intomainfrom
gr/mem_leak_binding_bsv

Conversation

@GrapeBaBa
Copy link
Contributor

Motivation

The serialize() call returns a heap-allocated slice that was never freed after being copied into the NAPI ArrayBuffer by numberSliceToNapiValue. Added defer allocator.free(result) to prevent the leak.

The serialize() call returns a heap-allocated slice that was never freed
after being copied into the NAPI ArrayBuffer by numberSliceToNapiValue.
Added defer allocator.free(result) to prevent the leak.
@GrapeBaBa GrapeBaBa requested a review from a team as a code owner February 26, 2026 09:08
Copilot AI review requested due to automatic review settings February 26, 2026 09:08
@gemini-code-assist
Copy link

Summary of Changes

Hello @GrapeBaBa, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request resolves a critical memory leak occurring in the NAPI binding for BeaconStateView_serialize. The fix ensures that a heap-allocated data slice, which was previously not being deallocated after its data was transferred, is now correctly freed. This enhancement improves the stability and memory efficiency of the application by preventing unnecessary memory consumption.

Highlights

  • Memory Leak Fix: Addressed a memory leak in the BeaconStateView_serialize function by ensuring that the heap-allocated slice returned from serialize() is properly freed after its contents are copied into a NAPI ArrayBuffer.
  • Resource Management: Implemented defer allocator.free(result) to guarantee the deallocation of memory, improving the overall resource management within the NAPI binding.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • bindings/napi/BeaconStateView.zig
    • Added a defer statement to free the result slice after serialization, preventing a memory leak.
  • src/ssz/type/byte_list.zig
    • Adjusted formatting for a JSON string in a test case.
  • src/ssz/type/list.zig
    • Adjusted formatting for a JSON string in a test case.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request correctly fixes a memory leak in BeaconStateView_serialize by adding a defer statement to free the heap-allocated slice. The other changes are minor formatting adjustments. I have added one comment regarding adherence to the repository's style guide.

pub fn BeaconStateView_serialize(env: napi.Env, cb: napi.CallbackInfo(0)) !napi.Value {
const cached_state = try env.unwrap(CachedBeaconState, cb.this());
const result = try cached_state.state.serialize(allocator);
defer allocator.free(result);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The repository style guide recommends grouping resource allocation and deallocation with newlines, specifically mentioning a newline before the allocation and after the defer statement. While a newline is correctly added after the defer, a newline is missing before the allocation on line 874.

References
  1. Use newlines to group resource allocation and deallocation, i.e. before the resource allocation and after the corresponding defer statement, to make leaks easier to spot. (link)

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes a memory leak in the NAPI binding for BeaconStateView_serialize by adding defer allocator.free(result) to properly deallocate the heap-allocated slice returned by serialize() after it has been copied into a NAPI ArrayBuffer. The PR also includes minor whitespace formatting fixes in test files.

Changes:

  • Fixed memory leak in BeaconStateView_serialize by freeing the allocated serialization buffer
  • Removed trailing whitespace in test case definitions

Reviewed changes

Copilot reviewed 1 out of 3 changed files in this pull request and generated no comments.

File Description
bindings/napi/BeaconStateView.zig Added defer allocator.free(result) to prevent memory leak when serializing beacon state
src/ssz/type/list.zig Removed trailing whitespace before line continuation in test case
src/ssz/type/byte_list.zig Removed trailing whitespace before line continuation in test cases

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Signed-off-by: Chen Kai <[email protected]>
@wemeetagain wemeetagain merged commit a26fbaf into main Feb 26, 2026
10 checks passed
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.

3 participants