After running a block in the GUI the undo feature becomes unstable. Specifically, if the user tries to undo changes that were made before it was run the system may crash.
When a block is run the system saves and reloads it ... the reloading is necessary as the underlying script has to be read. Unfortunately this invalidates all the block pointers which the undo feature employs.
As a fix, the undo list is now cleared when blocks are run. i.e. the user can no longer cause the crash because they can no longer undo beyond a run operation. A longer term fix would be to reimplement undo using block names as identifiers rather than pointers.