Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove multiple calls to free when successively calling jq_reset. #3134

Merged
merged 1 commit into from
Jun 5, 2024

Commits on Jun 4, 2024

  1. Remove multiple calls to free when successively calling jq_reset.

    `jq_reset` calls `jv_free` on the `exit_code` and the `error_message` stored on the jq state.
    However, it doesn't replace the actual instance of those members. This means that subsequent
    calls to `jq_reset` will call `jv_free` again on those members, which in turn may call `free`
    on the same pointer multiple times. Freeing the same pointer multiple times is undefined
    behavior and can cause heap corruption, which is how I spotted this issue.
    
    In practice, this issue only occurs when using a program that may `halt_error`, because that
    is when the `exit_code` and `error_message` are set to values other than `jv_invalid`.
    Subsequent attempts to call `jq_start` (which calls `jq_reset` internally) after hitting a
    `halt_error` can cause you to run into this issue.
    
    The changes simply reset the `exit_code` and the `error_message` to `jv_invalid` (the initial
    value set in `jq_init`) after they are freed.
    Sameesunkaria committed Jun 4, 2024
    Configuration menu
    Copy the full SHA
    ae99179 View commit details
    Browse the repository at this point in the history