2016-04-30 22:17 GMT+09:00 Bram Moolenaar <[email protected]>:

>
> Kelvin Lee wrote:
>
> > Patch 7.4.1784 is problematic.
> >
> > On both FreeBSD (10.3) and Linux (Ubuntu 16.04), the follow error would
> happen upon starting gvim:
> >
> > X Error of failed request:  BadValue (integer parameter out of range for
> operation)
> >   Major opcode of failed request:  91 (X_QueryColors)
> >   Value in failed request:  0xffffd499
> >   Serial number of failed request:  1159
> >   Current serial number in output stream:  1159
> > E852: The child process failed to start the GUI
> > Press ENTER or type command to continue[xcb] Unknown sequence number
> while processing queue
> > [xcb] Most likely this is a multi-threaded client and XInitThreads has
> not been called
> > [xcb] Aborting, sorry about that.
> > Assertion failed: (! xcb_xlib_threads_sequence_lost), function
> poll_for_event, file xcb_io.c, line 274.
> > Vim: Caught deadly signal ABRT
> >
> > Vim: Finished.
> > Abort trap (core dumped)
> >
> > My gvim build version info:
> >
> > VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Apr 30 2016 15:28:24)
> > Included patches: 1-1784
> > Compiled by kiyo@zion
> > Big version with X11-Athena GUI.  Features included (+) or not (-):
> > +acl             +farsi           +mouse_netterm   +tag_binary
> > +arabic          +file_in_path    +mouse_sgr       +tag_old_static
> > +autocmd         +find_in_path    +mouse_sysmouse  -tag_any_white
> > +balloon_eval    +float           +mouse_urxvt     -tcl
> > +browse          +folding         +mouse_xterm     +terminfo
> > ++builtin_terms  -footer          +multi_byte      +termresponse
> > +byte_offset     +fork()          +multi_lang      +termtruecolor
> > +channel         +gettext         -mzscheme        +textobjects
> > +cindent         -hangul_input    +netbeans_intg   +timers
> > +clientserver    +iconv           +packages        +title
> > +clipboard       +insert_expand   +path_extra      +toolbar
> > +cmdline_compl   +job             -perl            +user_commands
> > +cmdline_hist    +jumplist        +persistent_undo +vertsplit
> > +cmdline_info    +keymap          +postscript      +virtualedit
> > +comments        +langmap         +printer         +visual
> > +conceal         +libcall         -profile         +visualextra
> > +cryptv          +linebreak       -python          +viminfo
> > +cscope          +lispindent      -python3         +vreplace
> > +cursorbind      +listcmds        +quickfix        +wildignore
> > +cursorshape     +localmap        +reltime         +wildmenu
> > +dialog_con_gui  -lua             +rightleft       +windows
> > +diff            +menu            -ruby            +writebackup
> > +digraphs        +mksession       +scrollbind      +X11
> > -dnd             +modify_fname    +signs           +xfontset
> > -ebcdic          +mouse           +smartindent     +xim
> > +emacs_tags      +mouseshape      +startuptime     +xsmp_interact
> > +eval            +mouse_dec       +statusline      +xterm_clipboard
> > +ex_extra        -mouse_gpm       -sun_workshop    -xterm_save
> > +extra_search    -mouse_jsbterm   +syntax          +xpm
> >    system vimrc file: "$VIM/vimrc"
> >      user vimrc file: "$HOME/.vimrc"
> >  2nd user vimrc file: "~/.vim/vimrc"
> >       user exrc file: "$HOME/.exrc"
> >   system gvimrc file: "$VIM/gvimrc"
> >     user gvimrc file: "$HOME/.gvimrc"
> > 2nd user gvimrc file: "~/.vim/gvimrc"
> >     system menu file: "$VIMRUNTIME/menu.vim"
> >   fall-back for $VIM: "/usr/local/share/vim"
> > Compilation: /usr/local/libexec/ccache/clang -c -I. -Iproto
> -DHAVE_CONFIG_H -DFEAT_GUI_ATHENA   -I/usr/local/include  -g -O2
> -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
> > Linking: /usr/local/libexec/ccache/clang   -L/usr/local/lib
> -Wl,--as-needed -o vim -lXaw -lXmu -lXext -lXt -lSM -lICE -lXpm -lXt -lX11
>  -lm -ltinfo  -liconv -lintl
>
> I can reproduce it when building with Athena.
>

As indicated in the report above, the direct cause of the problem is to
pass, `INVALCOLOR` (= -11111 = 0xffffd499) to `XQueryColor()` via the
structure `XColor` in `gui_mch_get_rgb()` at gui_x11.c:3214.

Although the type of the field `pixel` of `XColor` is unsigned long, the
valid range of pixel values is supposed to be from 0 to 65535, inclusive.

Obviously, `INVALCOLOR` is out of the range, thus the BadValue error.

The problematic `INVALCOLOR` comes from the macro `GUI_MCH_GET_RGB()` which
is used in `set_hl_attr()` at syntax.c:9194.

`GUI_MCH_GET_RGB()` flips between `termgui_mch_get_rgb()` and
`gui_mch_get_rgb()`, depending on the value of the boolean `gui.in_use` at
runtime.

Hence the trouble happens when `gui.in_use` is true (thus
`gui_mch_get_rgb()` is selected) and the given pixel value is `INVALCOLOR`.

The proposed patch is to prevent `INVALCOLOR` from being passed to
`gui_mch_get_rgb()` by adding appropriate conditions when the function is
invoked.

N.B. This bug potensially affects the GTK+2 GUI because its
`gui_mch_get_rgb()` uses `gdk_colorpmap_query_color()` and the latter calls
`XQueryColor()` directly under certain conditions.

Best regards,
Kazunobu Kuriyama

>
> --
> BRIDGEKEEPER: What is your favorite colour?
> LAUNCELOT:    Blue.
> BRIDGEKEEPER: Right.  Off you go.
>                  "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES
> LTD
>
>  /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net
>  \\\
> ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/
> \\\
> \\\  an exciting new programming language -- http://www.Zimbu.org
> ///
>  \\\            help me help AIDS victims -- http://ICCF-Holland.org
> ///
>
> --
> --
> You received this message from the "vim_dev" maillist.
> Do not top-post! Type your reply below the text you are replying to.
> For more information, visit http://www.vim.org/maillist.php
>
> ---
> You received this message because you are subscribed to the Google Groups
> "vim_dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Attachment: athena-badvalue.patch
Description: Binary data

Raspunde prin e-mail lui