After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 697397 - Segfault when using page-up/page-down in dual mode or home/end in normal mode
Segfault when using page-up/page-down in dual mode or home/end in normal mode
Status: RESOLVED FIXED
Product: evince
Classification: Core
Component: PDF
git master
Other Linux
: Normal critical
: ---
Assigned To: Evince Maintainers
Evince Maintainers
: 698048 701040 701703 702113 703491 703793 (view as bug list)
Depends on:
Blocks:
 
 
Reported: 2013-04-05 22:26 UTC by Germán Poo-Caamaño
Modified: 2013-07-08 14:33 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
Valgrind output (58.22 KB, text/plain)
2013-06-08 17:14 UTC, Germán Poo-Caamaño
Details

Description Germán Poo-Caamaño 2013-04-05 22:26:40 UTC
1. Open a PDF file with 4 or more pages.
2. Set Dual Mode 
3. Press Page-Down, Page-Up, Page-Down
4. Segfault

In gdb, sometimes I have to press 'Page-Up' once again to get the segfault.  It seems like a thread issue (as in Bug #697194).

I am not attaching any file because I can reproduce the bug with different PDF files that have 4 or more pages (I have not tried with smaller than 3, though).

Here 2 stacktraces:

First stacktrace:

Starting program: /home/gpoo/code/evince/install/bin/evince interview-guadec.pdf
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1".
[New Thread 0xb5669b40 (LWP 9148)]
[New Thread 0xb4cffb40 (LWP 9149)]
[New Thread 0xa7316b40 (LWP 9150)]
[New Thread 0xa69ffb40 (LWP 9151)]

Program received signal SIGSEGV, Segmentation fault.
g_type_check_instance_is_a (type_instance=0xb7f0a130, iface_type=138301608)
    at gtype.c:3994
3994	  check = node && node->is_instantiatable && iface && type_node_conforms_to_U (node, iface, TRUE, FALSE);
  • #0 g_type_check_instance_is_a
    at gtype.c line 3994
  • #1 ev_link_get_action
    at ev-link.c line 66
  • #2 compare_link
    at ev-history.c line 206
  • #3 g_list_find_custom
    at glist.c line 787
  • #4 ev_history_go_to_link
    at ev-history.c line 221
  • #5 ev_history_add_link
    at ev-history.c line 119
  • #6 ev_history_add_link_for_page
    at ev-history.c line 356
  • #7 ev_view_marshal_VOID__INT_INT
    at ev-view-marshal.c line 137
  • #8 g_closure_invoke
    at gclosure.c line 777
  • #9 signal_emit_unlocked_R
    at gsignal.c line 3584
  • #10 g_signal_emit_valist
    at gsignal.c line 3328
  • #11 g_signal_emit
    at gsignal.c line 3384
  • #12 ev_document_model_set_page
    at ev-document-model.c line 415
  • #13 ev_document_model_set_page
    at ev-document-model.c line 401
  • #14 view_update_range_and_current_page
    at ev-view.c line 743
  • #15 on_adjustment_value_changed
    at ev-view.c line 5106
  • #16 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #17 g_closure_invoke
    at gclosure.c line 777
  • #18 signal_emit_unlocked_R
    at gsignal.c line 3584
  • #19 g_signal_emit_valist
    at gsignal.c line 3328
  • #20 g_signal_emit
    at gsignal.c line 3384
  • #21 gtk_adjustment_value_changed
    at gtkadjustment.c line 762
  • #22 gtk_adjustment_set_value
    at gtkadjustment.c line 443
  • #23 ev_view_scroll
    at ev-view.c line 1013
  • #24 ev_view_scroll
    at ev-view.c line 922
  • #25 ev_window_cmd_scroll_backward
    at ev-window.c line 3773
  • #26 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #27 g_closure_invoke
    at gclosure.c line 777
  • #28 signal_emit_unlocked_R
    at gsignal.c line 3584
  • #29 g_signal_emit_valist
    at gsignal.c line 3328
  • #30 g_signal_emit
    at gsignal.c line 3384
  • #31 _gtk_action_emit_activate
    at gtkaction.c line 801
  • #32 closure_accel_activate
    at gtkaction.c line 1638
  • #33 closure_accel_activate
    at gtkaction.c line 1629
  • #34 g_closure_invoke
    at gclosure.c line 777
  • #35 signal_emit_unlocked_R
    at gsignal.c line 3584
  • #36 g_signal_emit_valist
    at gsignal.c line 3338
  • #37 g_signal_emit
    at gsignal.c line 3384
  • #38 gtk_accel_group_activate
    at gtkaccelgroup.c line 914
  • #39 gtk_accel_groups_activate
    at gtkaccelgroup.c line 952
  • #40 gtk_window_activate_key
    at gtkwindow.c line 9406
  • #41 gtk_window_key_press_event
    at gtkwindow.c line 6035
  • #42 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #43 g_type_class_meta_marshalv
    at gclosure.c line 997
  • #44 _g_closure_invoke_va
    at gclosure.c line 840
  • #45 g_signal_emit_valist
    at gsignal.c line 3234
  • #46 g_signal_emit
    at gsignal.c line 3384
  • #47 gtk_widget_event_internal
    at gtkwidget.c line 6714
  • #48 propagate_event
    at gtkmain.c line 2490
  • #49 gtk_main_do_event
    at gtkmain.c line 1716
  • #50 _gdk_event_emit
    at gdkevents.c line 69
  • #51 gdk_event_source_dispatch
    at gdkeventsource.c line 364
  • #52 g_main_dispatch
    at gmain.c line 3054
  • #53 g_main_context_dispatch
    at gmain.c line 3630
  • #54 g_main_context_iterate
    at gmain.c line 3701
  • #55 g_main_context_iterate
    at gmain.c line 3638
  • #56 g_main_context_iteration
    at gmain.c line 3762
  • #57 g_application_run
    at gapplication.c line 1623
  • #58 main
    at main.c line 332
  • #0 g_list_prepend
    at glist.c line 287
  • #1 ev_history_go_to_link
    at ev-history.c line 228
  • #2 ev_history_add_link
    at ev-history.c line 119
  • #3 ev_history_add_link_for_page
    at ev-history.c line 356
  • #4 ev_view_marshal_VOID__INT_INT
    at ev-view-marshal.c line 137
  • #5 g_closure_invoke
    at gclosure.c line 777
  • #6 signal_emit_unlocked_R
    at gsignal.c line 3584
  • #7 g_signal_emit_valist
    at gsignal.c line 3328
  • #8 g_signal_emit
    at gsignal.c line 3384
  • #9 ev_document_model_set_page
    at ev-document-model.c line 415
  • #10 ev_document_model_set_page
    at ev-document-model.c line 401
  • #11 view_update_range_and_current_page
    at ev-view.c line 743
  • #12 on_adjustment_value_changed
    at ev-view.c line 5106
  • #13 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #14 g_closure_invoke
    at gclosure.c line 777
  • #15 signal_emit_unlocked_R
    at gsignal.c line 3584
  • #16 g_signal_emit_valist
    at gsignal.c line 3328
  • #17 g_signal_emit
    at gsignal.c line 3384
  • #18 gtk_adjustment_value_changed
    at gtkadjustment.c line 762
  • #19 gtk_adjustment_set_value
    at gtkadjustment.c line 443
  • #20 ev_view_scroll
    at ev-view.c line 1013
  • #21 ev_view_scroll
    at ev-view.c line 922
  • #22 ev_window_cmd_scroll_forward
    at ev-window.c line 3767
  • #23 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #24 g_closure_invoke
    at gclosure.c line 777
  • #25 signal_emit_unlocked_R
    at gsignal.c line 3584
  • #26 g_signal_emit_valist
    at gsignal.c line 3328
  • #27 g_signal_emit
    at gsignal.c line 3384
  • #28 _gtk_action_emit_activate
    at gtkaction.c line 801
  • #29 closure_accel_activate
    at gtkaction.c line 1638
  • #30 closure_accel_activate
    at gtkaction.c line 1629
  • #31 g_closure_invoke
    at gclosure.c line 777
  • #32 signal_emit_unlocked_R
    at gsignal.c line 3584
  • #33 g_signal_emit_valist
    at gsignal.c line 3338
  • #34 g_signal_emit
    at gsignal.c line 3384
  • #35 gtk_accel_group_activate
    at gtkaccelgroup.c line 914
  • #36 gtk_accel_groups_activate
    at gtkaccelgroup.c line 952
  • #37 gtk_window_activate_key
    at gtkwindow.c line 9406
  • #38 gtk_window_key_press_event
    at gtkwindow.c line 6035
  • #39 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #40 g_type_class_meta_marshalv
    at gclosure.c line 997
  • #41 _g_closure_invoke_va
    at gclosure.c line 840
  • #42 g_signal_emit_valist
    at gsignal.c line 3234
  • #43 g_signal_emit
    at gsignal.c line 3384
  • #44 gtk_widget_event_internal
    at gtkwidget.c line 6714
  • #45 propagate_event
    at gtkmain.c line 2490
  • #46 gtk_main_do_event
    at gtkmain.c line 1716
  • #47 _gdk_event_emit
    at gdkevents.c line 69
  • #48 gdk_event_source_dispatch
    at gdkeventsource.c line 364
  • #49 g_main_dispatch
    at gmain.c line 3054
  • #50 g_main_context_dispatch
    at gmain.c line 3630
  • #51 g_main_context_iterate
    at gmain.c line 3701
  • #52 g_main_context_iterate
    at gmain.c line 3638
  • #53 g_main_context_iteration
    at gmain.c line 3762
  • #54 g_application_run
    at gapplication.c line 1623
  • #55 main
    at main.c line 332

Comment 1 Germán Poo-Caamaño 2013-04-05 22:28:09 UTC
It seems, this thing put both stacktraces as one.  Here is the second one:

Starting program: /home/gpoo/code/evince/install/bin/evince 'proposal.pdf'
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1".
[New Thread 0xb5669b40 (LWP 9168)]
[New Thread 0xb4cffb40 (LWP 9169)]
[New Thread 0xa7316b40 (LWP 9170)]
[New Thread 0xa69ffb40 (LWP 9171)]

Program received signal SIGSEGV, Segmentation fault.
g_list_prepend (list=0x87dc990, data=0x86dbe90) at glist.c:287
287		list->prev->next = new_list;
  • #0 g_list_prepend
    at glist.c line 287
  • #1 ev_history_go_to_link
    at ev-history.c line 228
  • #2 ev_history_add_link
    at ev-history.c line 119
  • #3 ev_history_add_link_for_page
    at ev-history.c line 356
  • #4 ev_view_marshal_VOID__INT_INT
    at ev-view-marshal.c line 137
  • #5 g_closure_invoke
    at gclosure.c line 777
  • #6 signal_emit_unlocked_R
    at gsignal.c line 3584
  • #7 g_signal_emit_valist
    at gsignal.c line 3328
  • #8 g_signal_emit
    at gsignal.c line 3384
  • #9 ev_document_model_set_page
    at ev-document-model.c line 415
  • #10 ev_document_model_set_page
    at ev-document-model.c line 401
  • #11 view_update_range_and_current_page
    at ev-view.c line 743
  • #12 on_adjustment_value_changed
    at ev-view.c line 5106
  • #13 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #14 g_closure_invoke
    at gclosure.c line 777
  • #15 signal_emit_unlocked_R
    at gsignal.c line 3584
  • #16 g_signal_emit_valist
    at gsignal.c line 3328
  • #17 g_signal_emit
    at gsignal.c line 3384
  • #18 gtk_adjustment_value_changed
    at gtkadjustment.c line 762
  • #19 gtk_adjustment_set_value
    at gtkadjustment.c line 443
  • #20 ev_view_scroll
    at ev-view.c line 1013
  • #21 ev_view_scroll
    at ev-view.c line 922
  • #22 ev_window_cmd_scroll_forward
    at ev-window.c line 3767
  • #23 g_cclosure_marshal_VOID__VOID
    at gmarshal.c line 85
  • #24 g_closure_invoke
    at gclosure.c line 777
  • #25 signal_emit_unlocked_R
    at gsignal.c line 3584
  • #26 g_signal_emit_valist
    at gsignal.c line 3328
  • #27 g_signal_emit
    at gsignal.c line 3384
  • #28 _gtk_action_emit_activate
    at gtkaction.c line 801
  • #29 closure_accel_activate
    at gtkaction.c line 1638
  • #30 closure_accel_activate
    at gtkaction.c line 1629
  • #31 g_closure_invoke
    at gclosure.c line 777
  • #32 signal_emit_unlocked_R
    at gsignal.c line 3584
  • #33 g_signal_emit_valist
    at gsignal.c line 3338
  • #34 g_signal_emit
    at gsignal.c line 3384
  • #35 gtk_accel_group_activate
    at gtkaccelgroup.c line 914
  • #36 gtk_accel_groups_activate
    at gtkaccelgroup.c line 952
  • #37 gtk_window_activate_key
    at gtkwindow.c line 9406
  • #38 gtk_window_key_press_event
    at gtkwindow.c line 6035
  • #39 _gtk_marshal_BOOLEAN__BOXEDv
    at gtkmarshalers.c line 130
  • #40 g_type_class_meta_marshalv
    at gclosure.c line 997
  • #41 _g_closure_invoke_va
    at gclosure.c line 840
  • #42 g_signal_emit_valist
    at gsignal.c line 3234
  • #43 g_signal_emit
    at gsignal.c line 3384
  • #44 gtk_widget_event_internal
    at gtkwidget.c line 6714
  • #45 propagate_event
    at gtkmain.c line 2490
  • #46 gtk_main_do_event
    at gtkmain.c line 1716
  • #47 _gdk_event_emit
    at gdkevents.c line 69
  • #48 gdk_event_source_dispatch
    at gdkeventsource.c line 364
  • #49 g_main_dispatch
    at gmain.c line 3054
  • #50 g_main_context_dispatch
    at gmain.c line 3630
  • #51 g_main_context_iterate
    at gmain.c line 3701
  • #52 g_main_context_iterate
    at gmain.c line 3638
  • #53 g_main_context_iteration
    at gmain.c line 3762
  • #54 g_application_run
    at gapplication.c line 1623
  • #55 main
    at main.c line 332

Comment 2 Christian Persch 2013-06-06 11:32:55 UTC
*** Bug 698048 has been marked as a duplicate of this bug. ***
Comment 3 Christian Persch 2013-06-06 11:33:19 UTC
*** Bug 701040 has been marked as a duplicate of this bug. ***
Comment 4 Christian Persch 2013-06-06 11:34:09 UTC
I think this may be fixed by commit 068a358607bd634c53572c288b7e41514c172024; can anyone still repro on current master?
Comment 5 Evgeny Bobkin 2013-06-07 08:41:38 UTC
I have tested the version from master and the 3.9.2 and it seems that the segmentation fault from bug 701040 is fixed. Thank you

can you please back-port it to evince 3.8.x releases?
Comment 6 Germán Poo-Caamaño 2013-06-07 18:24:05 UTC
(In reply to comment #4)
> I think this may be fixed by commit 068a358607bd634c53572c288b7e41514c172024;
> can anyone still repro on current master?

I still can reproduce it with master.

Here the output of bt full:

  • #0 magazine_chain_pop_head
    at gslice.c line 532
  • #1 thread_memory_magazine1_alloc
    at gslice.c line 835
  • #2 g_slice_alloc
    at gslice.c line 994
  • #3 g_list_prepend
    at glist.c line 279
  • #4 gtk_container_children_callback
    at gtkcontainer.c line 2922
  • #5 gtk_toolbar_forall
    at gtktoolbar.c line 2531
  • #6 gtk_container_forall
    at gtkcontainer.c line 2047
  • #7 _gtk_container_get_all_children
    at gtkcontainer.c line 2343
  • #8 gtk_toolbar_get_path_for_child
    at gtktoolbar.c line 3897
  • #9 gtk_container_get_path_for_child
    at gtkcontainer.c line 3406
  • #10 _gtk_widget_create_path
    at gtkwidget.c line 14645
  • #11 gtk_container_real_get_path_for_child
    at gtkcontainer.c line 2359
  • #12 gtk_container_get_path_for_child
    at gtkcontainer.c line 3406
  • #13 _gtk_widget_create_path
    at gtkwidget.c line 14645
  • #14 gtk_box_get_path_for_child
    at gtkbox.c line 904
  • #15 gtk_container_get_path_for_child
    at gtkcontainer.c line 3406
  • #16 _gtk_widget_create_path
    at gtkwidget.c line 14645
  • #17 gtk_container_real_get_path_for_child
    at gtkcontainer.c line 2359
  • #18 gtk_container_get_path_for_child
    at gtkcontainer.c line 3406
  • #19 _gtk_widget_create_path
    at gtkwidget.c line 14645
  • #20 gtk_container_real_get_path_for_child
    at gtkcontainer.c line 2359
  • #21 gtk_container_get_path_for_child
    at gtkcontainer.c line 3406
  • #22 _gtk_widget_create_path
    at gtkwidget.c line 14645
  • #23 create_query_path
    at gtkstylecontext.c line 950
  • #24 build_properties
    at gtkstylecontext.c line 990
  • #25 gtk_style_context_update_cache
    at gtkstylecontext.c line 3073
  • #26 _gtk_style_context_validate
    at gtkstylecontext.c line 3236
  • #27 _gtk_style_context_validate
    at gtkstylecontext.c line 3303
  • #28 _gtk_style_context_validate
    at gtkstylecontext.c line 3303
  • #29 _gtk_style_context_validate
    at gtkstylecontext.c line 3303
  • #30 _gtk_style_context_validate
    at gtkstylecontext.c line 3303
  • #31 _gtk_style_context_validate
    at gtkstylecontext.c line 3303
  • #32 _gtk_style_context_validate
    at gtkstylecontext.c line 3303
  • #33 _gtk_style_context_validate
    at gtkstylecontext.c line 3303
  • #34 gtk_container_idle_sizer
    at gtkcontainer.c line 1654
  • #35 g_cclosure_marshal_VOID__VOIDv
    at gmarshal.c line 115
  • #36 _g_closure_invoke_va
    at gclosure.c line 840
  • #37 g_signal_emit_valist
    at gsignal.c line 3234
  • #38 g_signal_emit_by_name
    at gsignal.c line 3424
  • #39 gdk_frame_clock_paint_idle
    at gdkframeclockidle.c line 400
  • #40 gdk_threads_dispatch
    at gdk.c line 788
  • #41 g_timeout_dispatch
    at gmain.c line 4413
  • #42 g_main_dispatch
    at gmain.c line 3054
  • #43 g_main_context_dispatch
    at gmain.c line 3630
  • #44 g_main_context_iterate
    at gmain.c line 3701
  • #45 g_main_context_iterate
    at gmain.c line 3638
  • #46 g_main_context_iteration
    at gmain.c line 3762
  • #47 g_application_run
    at gapplication.c line 1623
  • #48 main
    at main.c line 332

Comment 7 Germán Poo-Caamaño 2013-06-08 15:14:27 UTC
I updated the summary because it normal mode it crashes as well, just using different keys.

1. Open a PDF file with 3 or more pages.
2. Press End, Home, End
3. Segfault

The problem happens in ev_history_go_to_link when either history->priv->forward_list or history->priv->back_list is NULL.

https://git.gnome.org/browse/evince/tree/shell/ev-history.c#n217

I am trying to understand what is the purpose of ev_history_go_to_link, returning FALSE immediately there does not seem to change the history behaviour.
Comment 8 Germán Poo-Caamaño 2013-06-08 17:14:28 UTC
Created attachment 246320 [details]
Valgrind output

It took out several lines regarding to cairo (which should be irrelevant to this bug).
Comment 9 Germán Poo-Caamaño 2013-06-08 17:53:55 UTC
*** Bug 701703 has been marked as a duplicate of this bug. ***
Comment 10 Christian Persch 2013-06-08 23:14:17 UTC
Pushed a fix to wip/history-fix branch. Rewiring the history was easier than trying to understand the logic in go_to_link, so I went that way. It's also conceptually easier now, IMHO.
Comment 11 Germán Poo-Caamaño 2013-06-10 16:17:36 UTC
FWIW, the new history fix the issue.

Also I noticed that previously there were some cases where the history had saved a page more than once.  For instance, after having browsed 2 pages (say Page 1, Page 4, Page 1), the widget still would have 'Back' enabled when it should not (it did not make any harm, just an extra click in the widget to get the button disabled).  With the new implementation, this behaviour is also fixed.
Comment 12 Germán Poo-Caamaño 2013-06-12 16:43:44 UTC
*** Bug 702113 has been marked as a duplicate of this bug. ***
Comment 13 Germán Poo-Caamaño 2013-06-12 21:14:48 UTC
I am trying to reproduce a problem that the current fix is having.  For reference, this the context:

<KaL> chpe: another thing previous patch did, going to a page that is in the history (using the page entry or a link or whatever) should be like clicking in the history menu entry
<KaL> not sure I explained it correctly
<chpe> in go_to_link you mean? it should still do that. it searches in the list and sets it as current if found
<gpoo> indeed, it should do that
<KaL> hmm, let me try again
<KaL> chpe: it doesn't happen here, do you have the hig document? I can tell you some steps to reproduce it
<chpe> hmm just tried, seems I can get duplicate entries (ie page 2, page 2, page 1,...) in history. do you mean that?
<chpe> let me see why that happens...
<KaL> not exactly that
<KaL> if you are in page X, clikc a link to go to page Y and then to page Z
<KaL> when in Z the back list constains
<KaL> X, Y
<KaL> if you clik on X
<KaL> the back list is empty
<KaL> try the same but entering X in the page entry
<KaL> back list is not empty and contains X in the middle of the list
<KaL> I know my implementation was a mess, but the thing is complex :-)

I tried to reproduce the problem as this:

1. Open a document (>4 pages)
2. Enable the sidebar (to navigate using the thumbnails)
3. Click on P4 in the thumbnails
3. Click on P3 in the thumbnails
4. Click on P1 in the thumbnails

When using the history buttons, it will go only to P1 and P4, discarding P3 from the history.

Another issue (more likely what Carlos meant):

1. Open PDF3200_2008.pdf (PDF specification from Adobe)
2. Open the index (sidebar)
3. Click on Comformance
4. Click on Syntax
5. Click on Comformance
6. Enter "i" in the entry box

Now the history has i->iii->i

The relevant comment on this from Christian:

<chpe> the ev_history->priv->list contains 3 entries
<chpe> item 0 and 2 are for page 'i'
<chpe> but the link's action's EvLinkDest differ
<chpe> because the 0th entry has page_label NULL, while the item 2 has page_label "i"
<gpoo> oh, is it because they were triggered differently?
<chpe> apparently the compare func is too strict
<gpoo> it compares actions
<gpoo> but this "problem" should be in master as well.
<chpe> these actions are EV_LINK_ACTION_TYPE_GOTO_DEST, so it uses ev_link_dest_equal
<chpe> the 0th item is EV_LINK_DEST_TYPE_PAGE, item 2 is EV_LINK_DEST_TYPE_PAGE_LABEL
<chpe> so they differ
<chpe> not sure how to fix this, but clearly a different problem than the corruption
<chpe> looks like the corruption just 'hid' this, you'd crash before you could see the problem
Comment 14 Germán Poo-Caamaño 2013-06-12 21:19:28 UTC
For what it is worth, in master I do not see the problem with the history (duplicated entries), but after repeating the process several times, sometimes I get the following in console when I finish evince:

(evince:12797): GLib-WARNING **: corrupted double-linked list detected

(evince:12797): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed

The session only includes the step mentioned in c#13.
Comment 15 Christian Persch 2013-06-18 17:37:05 UTC
Should be fixed on master and 3-8.

The history was also changed to be more 'web-browser like', ie we throw away the forward history on non-history navigation. That should also make the 'duplicate page' problem less annoying; if any other matters remain, please file new bugs. Thanks!
Comment 16 Germán Poo-Caamaño 2013-07-02 21:49:01 UTC
*** Bug 703491 has been marked as a duplicate of this bug. ***
Comment 17 Germán Poo-Caamaño 2013-07-08 14:33:00 UTC
*** Bug 703793 has been marked as a duplicate of this bug. ***