Wow, we should get the Map(s) this user created :-)

To reproduce the first problem we should edit the biggest maxium possible 
map with as many objects a possible and zomm out and in like mad. 
Never restart to get the overflow in that undo stack?.

An in a normal game this could happen, too?

Can we perhaps limit the maximum Zoom-factor to avoid this?

Some questions / comments inline.



Diff comments:

> === modified file 'src/editor/tools/history.cc'
> --- src/editor/tools/history.cc       2019-02-23 11:00:49 +0000
> +++ src/editor/tools/history.cc       2019-03-10 07:49:40 +0000
> @@ -115,6 +118,11 @@
>               undo_stack_.push_front(ac);
>               undo_button_.set_enabled(true);
>               redo_button_.set_enabled(false);
> +             if (undo_stack_.size() > kMaximumUndoActions) {
> +                     for (size_t i = 0; i < kTooManyUndoActionsDeleteBatch; 
> ++i) {
> +                             undo_stack_.pop_back();
> +                     }
> +             }

A stack has no bulk operation fo this?

>       }
>       return tool.handle_click(ind, world, center, parent, ac.args, &map);
>  }
> 
> === modified file 'src/graphic/gl/fields_to_draw.cc'
> --- src/graphic/gl/fields_to_draw.cc  2019-02-23 11:00:49 +0000
> +++ src/graphic/gl/fields_to_draw.cc  2019-03-10 07:49:40 +0000
> @@ -106,7 +106,17 @@
>  
>       w_ = max_fx_ - min_fx_ + 1;

This is FieldsToDraw::reset(), which is called when ctrl-0 or the Reset-zoom 
Button is pressed.

If this correct we should spend some comments on this function and its 
parameters.

>       h_ = max_fy_ - min_fy_ + 1;
> -     const size_t dimension = w_ * h_;
> +     assert(w_ > 0);
> +     assert(h_ > 0);
> +
> +     // Ensure that there is enough memory for the resize operation
> +     size_t dimension = w_ * h_;
> +     const size_t max_dimension = fields_.max_size();
> +     if (dimension > max_dimension) {
> +             log("WARNING: Not enough memory allocated to redraw the whole 
> map!\nWe recommend that you restart Widelands\n");
> +             dimension = max_dimension;
> +     }
> +     // Now resize the vector
>       if (fields_.size() != dimension) {
>               fields_.resize(dimension);
>       }


-- 
https://code.launchpad.net/~widelands-dev/widelands/bug-1818494-reset-zoom-crash/+merge/364208
Your team Widelands Developers is requested to review the proposed merge of 
lp:~widelands-dev/widelands/bug-1818494-reset-zoom-crash into lp:widelands.

_______________________________________________
Mailing list: https://launchpad.net/~widelands-dev
Post to     : widelands-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~widelands-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to