Blame SOURCES/ctags-5.7-segment-fault.patch

93d03b
diff -ruN -x '*~' ctags-5.7/vim.c ctags-5.7/vim.c
93d03b
--- ctags-5.7/vim.c	2006-10-26 12:06:21.000000000 +0900
93d03b
+++ ctags-5.7/vim.c	2009-08-28 22:21:31.000000000 +0900
93d03b
@@ -328,7 +328,7 @@
93d03b
 	 */
93d03b
 	const unsigned char *cp = line;
93d03b
 
93d03b
-	if ( (int) *cp == '\\' ) 
93d03b
+	if ( cp && ( (int) *cp == '\\' ) ) 
93d03b
 	{
93d03b
 		/*
93d03b
 		 * We are recursively calling this function is the command
93d03b
@@ -350,9 +350,10 @@
93d03b
 		while (*cp && isspace ((int) *cp))
93d03b
 			++cp; 
93d03b
 	}
93d03b
-	else if ( (!strncmp ((const char*) line, "comp", (size_t) 4) == 0) && 
93d03b
-		     (!strncmp ((const char*) line, "comc", (size_t) 4) == 0) && 
93d03b
-				(strncmp ((const char*) line, "com", (size_t) 3) == 0) )
93d03b
+	else if ( line && 
93d03b
+                     (!strncmp ((const char*) line, "comp", (size_t) 4) == 0) && 
93d03b
+		                (!strncmp ((const char*) line, "comc", (size_t) 4) == 0) && 
93d03b
+				          (strncmp ((const char*) line, "com", (size_t) 3) == 0) )
93d03b
 	{
93d03b
 		cp += 2;
93d03b
 		if ((int) *++cp == 'm' && (int) *++cp == 'a' &&
93d03b
@@ -394,6 +395,14 @@
93d03b
 			while (*cp && !isspace ((int) *cp))
93d03b
 				++cp; 
93d03b
 		}
93d03b
+		else if (!isalnum ((int) *cp))
93d03b
+		{
93d03b
+			/*
93d03b
+			 * Broken syntax: throw away this line
93d03b
+			 */
93d03b
+			cmdProcessed = TRUE;
93d03b
+			goto cleanUp;
93d03b
+		}
93d03b
 	} while ( *cp &&  !isalnum ((int) *cp) );
93d03b
 
93d03b
 	if ( ! *cp )