pidgin/pidgin

2bb66ef1475e
Fix a crash when hovering over an exceptionally long URL (4074 characters,
but it might be different for you) in a gtkimhtml widget (such as the IM
window).

This was reported on the support mailing list:
http://pidgin.im/pipermail/support/2013-March/012980.html
http://pidgin.im/pipermail/support/2013-March/012981.html

Repro steps:
1. "gdb pidgin"

2. "break gdk_x_error"
You'll probably need to type "y" to make breakpoint pending on future shared library load. (Or you could run first then add the breakpoint.)

3. "run --sync"
--sync probably isn't actually necessary. Theoretically it should make the backtrace more useful. Like, maybe it could actually show the Pidgin calls that trigger the problem? Or maybe the problem call starts from the gtk main loop, so there would never be Pidgin code in the backtrace? It's also possible we don't pass our args to the right places to make --sync work.

4. "cont"
I hit the breakpoint at startup for some reason. I've just been continuing past it. Doesn't seem to affect anything.

5. Open an IM window.

6. Paste a long URL.

7. Mouse over the long URL.

8. The breakpoint is hit.

9. "bt"

#0 gdk_x_error (display=0x740e30, error=0x7fffffffbc20)
at /build/buildd/gtk+2.0-2.24.13/gdk/x11/gdkmain-x11.c:458
#1 0x00007ffff73b94f6 in _XError () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#2 0x00007ffff73b6741 in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#3 0x00007ffff73b6785 in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#4 0x00007ffff73b7378 in _XReply () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#5 0x00007ffff73b2d3d in XSync () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#6 0x00007ffff73b2dcb in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#7 0x00007ffff73b9e2f in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#8 0x00007ffff7395d14 in XCreatePixmap () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#9 0x00007ffff62bd0d2 in _gdk_pixmap_new (drawable=0x186ec60, width=width@entry=32774, height=25, depth=24,
depth@entry=-1) at /build/buildd/gtk+2.0-2.24.13/gdk/x11/gdkpixmap-x11.c:175
#10 0x00007ffff6289617 in IA__gdk_pixmap_new (drawable=drawable@entry=0x186ec60, width=width@entry=32774,
height=, depth=depth@entry=-1) at /build/buildd/gtk+2.0-2.24.13/gdk/gdkpixmap.c:249
#11 0x00007ffff6297036 in gdk_window_begin_implicit_paint (rect=0x7fffffffbed0, window=0x186ec60)
at /build/buildd/gtk+2.0-2.24.13/gdk/gdkwindow.c:2779
#12 gdk_window_process_updates_internal (window=0x186ec60) at /build/buildd/gtk+2.0-2.24.13/gdk/gdkwindow.c:5574
#13 0x00007ffff6299201 in IA__gdk_window_process_all_updates ()
at /build/buildd/gtk+2.0-2.24.13/gdk/gdkwindow.c:5696
#14 0x00007ffff6299269 in gdk_window_update_idle (data=)
at /build/buildd/gtk+2.0-2.24.13/gdk/gdkwindow.c:5322
#15 0x00007ffff6276e77 in gdk_threads_dispatch (data=0x1a45c40) at /build/buildd/gtk+2.0-2.24.13/gdk/gdk.c:512
#16 0x00007ffff53d8ab5 in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#17 0x00007ffff53d8de8 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#18 0x00007ffff53d91e2 in g_main_loop_run () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#19 0x00007ffff663ec77 in IA__gtk_main () at /build/buildd/gtk+2.0-2.24.13/gtk/gtkmain.c:1271
#20 0x0000000000499950 in main (argc=1, argv=0x7fffffffe538) at gtkmain.c:933

This is the message it prints when it exits:
The program 'Pidgin' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadAlloc (insufficient resources for operation)'.
(Details: serial 14454 error_code 11 request_code 53 minor_code 0)
(Note to programmers: normally, X errors are reported asynchronously;
that is, you will receive the error a while after causing it.
To debug your program, run it with the --sync command line
option to change this behavior. You can then get a meaningful
backtrace from your debugger if you break on the gdk_x_error() function.)

I think it's kinda lame that gdk/gtk/xlib/whatever barfs when we give it a
ridiculously wide pango layout, but whatever. I'm assuming this problem is
gtkimhtml specific, and so I don't want to spend a whole lot of time fixing
it. As an easy fix I want to just truncate the URL displayed in the tooltip
to 200 characters.

Here's an example URL that I used to trigger the crash:
http://www.example.com/?%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%30123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789%3012345678901234567890123456789012345678901234567890123456789012345678
#FIG 3.2 Produced by xfig version 3.2.5-alpha5
Landscape
Center
Inches
A4
100.00
Single
-2
1200 2
5 1 0 1 0 7 50 -1 -1 0.000 0 0 1 0 2400.000 -4500.000 6900 1500 4500 2700 2400 3000
1 1 1.00 60.00 120.00
6 4800 825 6300 1275
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4800 825 6300 825 6300 1275 4800 1275 4800 825
4 0 0 50 -1 0 12 0.0000 4 135 1050 5025 1125 Event Hooks\001
-6
6 525 375 6300 675
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
525 375 6300 375 6300 675 525 675 525 375
4 0 0 50 -1 0 12 0.0000 4 135 1590 2700 600 User Interface Code\001
-6
6 4800 2925 6300 3375
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4800 2925 6300 2925 6300 3375 4800 3375 4800 2925
4 0 0 50 -1 0 12 0.0000 4 135 1050 5025 3225 Event Hooks\001
-6
6 300 3900 2400 6300
6 600 4800 2100 5250
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
600 4800 2100 4800 2100 5250 600 5250 600 4800
4 0 0 50 -1 0 12 0.0000 4 180 1185 750 5100 PrplInfo Struct\001
-6
6 525 5925 2175 6225
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
525 6225 2175 6225 2175 5925 525 5925 525 6225
4 0 0 50 -1 0 12 0.0000 4 135 1170 750 6150 Protocol Code\001
-6
6 300 4500 2400 6300
2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
2400 6300 2400 4500 300 4500 300 6300 2400 6300
4 0 0 50 -1 0 12 0.0000 4 180 1275 750 5625 Protocol Plugin\001
-6
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
1050 4500 1050 3900
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
1350 4200 1350 4800
-6
6 3000 1350 4500 1800
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
3000 1350 4500 1350 4500 1800 3000 1800 3000 1350
4 0 0 50 -1 0 12 0.0000 4 135 810 3300 1650 Callbacks\001
-6
6 7200 1425 8700 1875
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
7200 1425 8700 1425 8700 1875 7200 1875 7200 1425
4 0 0 50 -1 0 12 0.0000 4 135 810 7500 1725 Callbacks\001
-6
6 7200 3525 8700 3975
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
7200 3525 8700 3525 8700 3975 7200 3975 7200 3525
4 0 0 50 -1 0 12 0.0000 4 135 810 7500 3825 Callbacks\001
-6
6 2100 3900 4800 6300
6 3000 4800 4500 5250
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
3000 4800 4500 4800 4500 5250 3000 5250 3000 4800
4 0 0 50 -1 0 12 0.0000 4 180 1185 3150 5100 PrplInfo Struct\001
-6
6 2925 5925 4575 6225
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2925 6225 4575 6225 4575 5925 2925 5925 2925 6225
4 0 0 50 -1 0 12 0.0000 4 135 1170 3150 6150 Protocol Code\001
-6
6 2700 4500 4800 6300
2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
4800 6300 4800 4500 2700 4500 2700 6300 4800 6300
4 0 0 50 -1 0 12 0.0000 4 180 1275 3150 5625 Protocol Plugin\001
-6
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
3750 4200 3750 4800
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
3000 4500 2100 3900
-6
6 600 2700 2400 3900
6 900 3075 2025 3525
4 0 0 50 -1 0 12 0.0000 4 180 975 975 3225 Pidgin Core\001
4 0 0 50 -1 0 12 0.0000 4 180 1110 900 3450 Functionality\001
-6
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
600 2700 2400 2700 2400 3900 600 3900 600 2700
-6
6 4800 1350 6300 1800
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
4800 1350 6300 1350 6300 1800 4800 1800 4800 1350
4 0 0 50 -1 0 12 0.0000 4 180 1365 4875 1650 UiOps Structures\001
-6
6 6900 2400 9000 4200
2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
9000 4200 9000 2400 6900 2400 6900 4200 9000 4200
4 0 0 50 -1 0 12 0.0000 4 180 975 7500 2925 Core Plugin\001
-6
6 6900 300 9000 2100
2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
9000 2100 9000 300 6900 300 6900 2100 9000 2100
4 0 0 50 -1 0 12 0.0000 4 180 780 7500 825 UI Plugin\001
-6
6 5700 4950 8625 5550
4 0 0 50 -1 0 16 0.0000 4 180 1965 6150 5175 A Brief Overview\001
4 0 0 50 -1 0 16 0.0000 4 240 2895 5700 5475 Of the Pidgin Architecture\001
-6
2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
6600 2100 6600 300 300 300 300 2100 6600 2100
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
5550 2400 5550 1800
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
5100 2925 4200 1800
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
1050 2100 1050 2700
2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
6600 4200 6600 2400 300 2400 300 4200 6600 4200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
6900 3600 2400 3600
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
6300 1050 7200 1575
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
6300 3000 7200 1725
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
6300 3150 7200 3750
4 1 0 50 -1 0 12 0.0000 4 135 1110 1125 1275 User Interface\001
4 0 0 50 -1 0 12 0.0000 4 135 390 3225 3375 Core\001