tcpdump mailing list archives

Re: [tcpdump] Truncated strings


From: Francois-Xavier Le Bail <devel.fx.lebail () orange fr>
Date: Sat, 8 Sep 2018 11:30:19 +0200

On 21/08/2018 17:21, Denis Ovsienko wrote:
(moving this to tcpdump-workers)

 ---- On Tue, 08 May 2018 14:41:13 +0100 Francois-Xavier Le Bail <devel.fx.lebail () orange fr> wrote ---- 
 > e.g.: 
 > proto1_print(...) 
 > { 
 >   ndo->ndo_protocol = "proto1"; 
 >   ... 
 >   proto2_print(...); 
 >   ... 
 > } 
 >  
 > proto2_print(...) 
 > { 
 >   ndo->ndo_protocol = "proto2"; 
 >   ... 
 > } 
 >  
 > If proto2_print, a "final protocol" (don't call another function with ndo_protocol assignment), need 
 > to print truncated string with/without longjmp process: no problem. 
 >  
 > If no truncated case occurs in proto2_print, after return, the proto1_print function take the 
 > control and if truncated case occurs in proto1_print it will print "[|proto2]". 
 >  
 > Thus after all calls of function with ndo_protocol assignment, we will need a ndo_protocol re-assign 
 > like: 
 >  
 > proto1_print(...) 
 > { 
 >   ndo->ndo_protocol = "proto1"; 
 >   ... 
 >   proto2_print(...); 
 >   ndo->ndo_protocol = "proto1"; 
 >   ... 
 > } 
 >  
 > It can bring errors (forgetting...). 
 >  
 > Could we do things differently ? 

With things done this way it looks like this issue could happen, although it would result in incorrect labeling, not 
incorrect behaviour.

A possible solution could be some stack structure and a macro to call the next function, which macro would take care 
to update the stack before and after the function call. But to me such a solution looks more complicated than the 
problem, I would rather proof-read the source code once and leave it to work.

Agreed. Some ndo_protocol reassignment already done in 6daf3a54 and d8802934.
Perhaps more to do. I will have a look.
_______________________________________________
tcpdump-workers mailing list
tcpdump-workers () lists tcpdump org
https://lists.sandelman.ca/mailman/listinfo/tcpdump-workers

Current thread: