Your message dated Sat, 23 Feb 2008 17:02:44 -0500
with message-id <[EMAIL PROTECTED]>
has caused the   report #466789,
regarding [vim] Incorrectly parses respone to "Send Device Attributes" terminal 
code
to be marked as having been forwarded to the upstream software
author(s) Bram Moolenaar <[EMAIL PROTECTED]>

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [EMAIL PROTECTED]
immediately.)


-- 
466789: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=466789
Debian Bug Tracking System
Contact [EMAIL PROTECTED] with problems
--- Begin Message ---
Bram,

In term.c's check_termcode, there is code to handle the response to
"CSI>0c" (request terminal version) which is of the form
"CSI>{x};{vers};{y}c".  The format of {vers} isn't strictly defined but
the current code assumes that the response will only be made up of
digits, ';', and '.'.

When this assumption is wrong (as was the case with a recent mrxvt
version which contained a '+'), the parsing stops early and any unparsed
characters end up being fed to Vim as if they were key presses by the
user.  This caused anyone using Vim inside mrxvt to start in
operator-pending mode from the 'c' that Vim received.

I've attached a patch which simply reduces the conditional check of the
for loop that does the parsing to "i < len && tp[i] != 'c'".

James
-- 
GPG Key: 1024D/61326D40 2003-09-02 James Vega <[EMAIL PROTECTED]>
Index: vim/src/term.c
===================================================================
*** vim/src/term.c.orig
--- vim/src/term.c
***************
*** 4056,4064 ****
  	    {
  		j = 0;
  		extra = 0;
! 		for (i = 2 + (tp[0] != CSI);
! 			i < len && (VIM_ISDIGIT(tp[i])
! 			    || tp[i] == ';' || tp[i] == '.'); ++i)
  		    if (tp[i] == ';' && ++j == 1)
  			extra = atoi((char *)tp + i + 1);
  		if (i == len)
--- 4056,4062 ----
  	    {
  		j = 0;
  		extra = 0;
! 		for (i = 2 + (tp[0] != CSI); i < len && tp[i] != 'c'; ++i)
  		    if (tp[i] == ';' && ++j == 1)
  			extra = atoi((char *)tp + i + 1);
  		if (i == len)

Attachment: signature.asc
Description: Digital signature


--- End Message ---

Reply via email to