Bug 1301254

Summary: Execution hits g_assert_not_reached with certain XCompose files
Product: [Fedora] Fedora Reporter: Lars Seipel <ls>
Component: gtk3Assignee: Matthias Clasen <mclasen>
Status: CLOSED UPSTREAM QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: rawhideCC: ccecchi, mclasen
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2016-01-28 04:23:28 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Lars Seipel 2016-01-23 03:16:52 UTC
Description of problem:
When an XCompose file contains a sequence mapping to a backslash character, parse_compose_table in gtk/gtkcomposetable.c:107 hits a "not reached" assertion, terminating the GTK+-using program. Firefox (on startup) and virt-manager (upon navigating to the VM details tab) are examples of affected programs.

Version-Release number of selected component (if applicable):
gtk3-3.19.7-1.fc24.x86_64
firefox-44.0-1.fc24.x86_64
virt-manager-1.3.2-1.fc24.noarch

How reproducible:
100%

Steps to Reproduce:
1. Add the following line to your ~/.XCompose:
<Multi_key> <X> <0> <0> <5> <c> : "\" U005C
2. Start firefox or open VM details in virt-manager. Other GTK+ programs will probably do, too.
3. Enjoy!

Actual results:
Program dumps core, might print the following:
Gtk:ERROR:gtkcomposetable.c:107:parse_compose_value: code should not be reached

Expected results:
The user is able to enter a backslash using the specified compose sequence. Alternatively, if a backslash at this position is invalid for XCompose files (I think it is fine, but not quite sure), it should be handled like any other old error.

Additional info:
Backtrace from coredumpctl:
(if you need a full one with line info, just say so)
0x00007fd55dec5618 __GI_raise (libc.so.6)
0x00007fd55dec721a __GI_abort (libc.so.6)
0x00007fd55ef76ee5 g_assertion_message (libglib-2.0.so.0)
0x00007fd55ef76f7a g_assertion_message_expr (libglib-2.0.so.0)
0x00007fd560a272ed gtk_compose_table_new_with_file (libgtk-3.so.0)
0x00007fd560a275f8 gtk_compose_table_list_add_file (libgtk-3.so.0)
0x00007fd560ada5c3 gtk_im_context_simple_add_compose_file (libgtk-3.so.0)
0x00007fd560ada87b init_compose_table_thread_cb (libgtk-3.so.0)
0x00007fd55f4f708d g_task_thread_pool_thread (libgio-2.0.so.0)
0x00007fd55ef786ce g_thread_pool_thread_proxy (libglib-2.0.so.0)
0x00007fd55ef77d35 g_thread_proxy (libglib-2.0.so.0)
0x00007fd56147a6da start_thread (libpthread.so.0)
0x00007fd55df9614d __clone (libc.so.6)

Comment 1 Matthias Clasen 2016-01-28 04:21:51 UTC
I believe your example is probably invalid. man xcompose talks about octal or hex esacpes in "", like "\300". If anything, you'd have to quote the backslash: "\\". But GTK+ won't parse that either. I've now made it not abort on such lines in git master.