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

Undostack: Fix segfault when trying to fetch macro on -1 index #144

Merged
merged 1 commit into from
Feb 6, 2024

Conversation

tetektoza
Copy link
Contributor

@tetektoza tetektoza commented Feb 5, 2024

Currently, if user adds a command to the undostack, and then undos it, and then adds another command - this causes a segfault while fetching macro ID from command on current undoPos. Current undo position pointer of undostack is being moved to -1 if user undos every possible command on the stack. Everytime user adds a new command, eraseRedundantCmds() method is being called, because all commands that are in "undo" state need to be cleared. So the solution to that is to simply clear every single macro and command while erasing redundant commands, if the current undo position is -1 - this basically means that every single command/macro is in undo state, so we clear all of them.

As a reproduction with and without this patch:

  1. open CelView
  2. insert/delete/replace a frame
  3. undo this operation
  4. once again do some operation on frames
  5. Expected: last command which was undo'd gets removed, new command gets pushed and we see a result of this command, actual result: segfault happens (with this patch it doesn't)

Currently, if user adds a command to the undostack, and then undos it,
and then adds another command - this causes a segfault while fetching
macro ID from command on current undoPos. Current undo position pointer
of undostack is being moved to -1 if user undos every possible command
on the stack. Everytime user adds a new command, eraseRedundantCmds()
method is being called, because all commands that are in "undo" state
need to be cleared. So the solution to that is to simply clear every
single macro and command while erasing redundant commands, if the
current undo position is -1 - this basically means that every single
command/macro is in undo state, so we clear all of them.
@tetektoza tetektoza marked this pull request as ready for review February 5, 2024 23:14
@AJenbo AJenbo merged commit 3ca9b79 into diasurgical:master Feb 6, 2024
5 checks passed
@tetektoza tetektoza deleted the fix_undostack_segv branch February 8, 2024 23:58
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