Ethereal-dev: Re: [ethereal-dev] Broken filters

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Guy Harris <gharris@xxxxxxxxxxxx>
Date: Sat, 5 Feb 2000 15:56:51 -0800
> The filter for LLC OUI or PID is broken.
> When I try to select a OUI or a PID and run "Match selected", Ethereal
> quits.
> Then I tried the filter "llc.oui==0xc" and again the Ethereal exits.

"Dumps core" is a more complete description than "quits"....

Filtering on 24-bit fields such as the OUI in an LLC header was broken
(as I discovered when filtering on that exact same condition); I've
checked in a fix, and have attached the patch to this message.
Index: dfilter-grammar.y
===================================================================
RCS file: /usr/local/cvsroot/ethereal/dfilter-grammar.y,v
retrieving revision 1.37
retrieving revision 1.38
diff -c -r1.37 -r1.38
*** dfilter-grammar.y	1999/11/15 06:32:11	1.37
--- dfilter-grammar.y	2000/02/05 06:07:16	1.38
***************
*** 144,152 ****
--- 144,154 ----
  
  %token <variable>	T_FT_UINT8
  %token <variable>	T_FT_UINT16
+ %token <variable>	T_FT_UINT24
  %token <variable>	T_FT_UINT32
  %token <variable>	T_FT_INT8
  %token <variable>	T_FT_INT16
+ %token <variable>	T_FT_INT24
  %token <variable>	T_FT_INT32
  %token <variable>	T_FT_ETHER
  %token <variable>	T_FT_IPv4
***************
*** 490,498 ****
--- 492,502 ----
  
  numeric_variable:	T_FT_UINT8	{ $$ = dfilter_mknode_numeric_variable($1.id); }
  	|		T_FT_UINT16	{ $$ = dfilter_mknode_numeric_variable($1.id); }
+ 	|		T_FT_UINT24	{ $$ = dfilter_mknode_numeric_variable($1.id); }
  	|		T_FT_UINT32	{ $$ = dfilter_mknode_numeric_variable($1.id); }
  	|		T_FT_INT8	{ $$ = dfilter_mknode_numeric_variable($1.id); }
  	|		T_FT_INT16	{ $$ = dfilter_mknode_numeric_variable($1.id); }
+ 	|		T_FT_INT24	{ $$ = dfilter_mknode_numeric_variable($1.id); }
  	|		T_FT_INT32	{ $$ = dfilter_mknode_numeric_variable($1.id); }
  	;
  
***************
*** 536,544 ****
--- 540,550 ----
  
  any_variable_type:	T_FT_UINT8	{ $$ = $1; }
  	|		T_FT_UINT16	{ $$ = $1; }
+ 	|		T_FT_UINT24	{ $$ = $1; }
  	|		T_FT_UINT32	{ $$ = $1; }
  	|		T_FT_INT8	{ $$ = $1; }
  	|		T_FT_INT16	{ $$ = $1; }
+ 	|		T_FT_INT24	{ $$ = $1; }
  	|		T_FT_INT32	{ $$ = $1; }
  	|		T_FT_DOUBLE	{ $$ = $1; }
  	|		T_FT_ETHER	{ $$ = $1; }

Index: dfilter-scanner.l
===================================================================
RCS file: /usr/local/cvsroot/ethereal/dfilter-scanner.l,v
retrieving revision 1.27
retrieving revision 1.28
diff -c -r1.27 -r1.28
*** dfilter-scanner.l	2000/01/10 17:32:50	1.27
--- dfilter-scanner.l	2000/02/05 06:07:16	1.28
***************
*** 194,199 ****
--- 194,202 ----
  		case FT_UINT16:
  			retval = T_FT_UINT16;
  			break;
+ 		case FT_UINT24:
+ 			retval = T_FT_UINT24;
+ 			break;
  		case FT_UINT32:
  			retval = T_FT_UINT32;
  			break;
***************
*** 202,207 ****
--- 205,213 ----
  			break;
  		case FT_INT16:
  			retval = T_FT_INT16;
+ 			break;
+ 		case FT_INT24:
+ 			retval = T_FT_INT24;
  			break;
  		case FT_INT32:
  			retval = T_FT_INT32;