<tt><font size=2>If no features are present</font></tt><font size=2 face="sans-serif">,
the function will return from the case </font><tt><font size=2>"if
(!n || *n == '0')</font></tt><font size=2 face="sans-serif">" ( structs.c
line 521) . </font>
<br>
<br><font size=1>Because </font><font size=2 face="sans-serif">add_feature()
is called by some functions, taking a protect inside is much safer.<br>
</font><font size=3> </font>
<br>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td width=36%><font size=1 face="sans-serif"><b>Hannes Reinecke <hare@suse.de></b>
</font>
<p><font size=1 face="sans-serif">2016-10-14 14:02</font>
<td width=63%>
<table width=100%>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">收件人</font></div>
<td><font size=1 face="sans-serif">huang.wei56@zte.com.cn, Christophe Varoqui
<christophe.varoqui@opensvc.com>, </font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">抄送</font></div>
<td><font size=1 face="sans-serif">bmarzins@redhat.com, dm-devel@redhat.com,
zhang.kai16@zte.com.cn, tang.junhui@zte.com.cn</font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">主题</font></div>
<td><font size=1 face="sans-serif">Re: [PATCH] add_feature: coredump</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><tt><font size=2>On 10/14/2016 04:08 AM, huang.wei56@zte.com.cn wrote:<br>
> From: "wei.huang" <huang.wei56@zte.com.cn><br>
> <br>
> Problem:<br>
> when we configure device like vendor is COMPELNT in multipath.conf,
multipathd will be coredump.<br>
> <br>
> Reasons:<br>
> some vonders are not configured features in default_hw. In add_feature,
strstr's first parameter *f maybe null.<br>
> <br>
> Signed-off-by: wei.huang <huang.wei56@zte.com.cn><br>
> ---<br>
>  libmultipath/structs.c | 14 ++++++++++++++<br>
>  1 file changed, 14 insertions(+)<br>
> <br>
> diff --git a/libmultipath/structs.c b/libmultipath/structs.c<br>
> index fee58e5..41e142f 100644<br>
> --- a/libmultipath/structs.c<br>
> +++ b/libmultipath/structs.c<br>
> @@ -520,6 +520,20 @@ add_feature (char **f, char *n)<br>
>                  
if (!n || *n == '0')<br>
>                  
                 return
0;<br>
>  <br>
> +                
/* default feature is null */<br>
> +                
if(!*f)<br>
> +                
{<br>
> +                
                 l
= strlen("1 ") + strlen(n) + 1;<br>
> +                
                 t
= MALLOC(l);<br>
> +                
                 if
(!t)<br>
> +                
                 
               
return 1;<br>
> +<br>
> +                
                 snprintf(t,
l, "1 %s", n);<br>
> +                
                 *f
= t;<br>
> +                
<br>
> +                
                 return
0;<br>
> +                
}<br>
> +<br>
>                  
/* Check if feature is already present */<br>
>                  
if (strstr(*f, n))<br>
>                  
                 return
0;<br>
> <br>
No, that is wrong.<br>
It'll insert a '1' into the string if no features are present.<br>
<br>
I have a patch queued for fixing this one up.<br>
<br>
Cheers,<br>
<br>
Hannes<br>
-- <br>
Dr. Hannes Reinecke              
               
      Teamlead Storage & Networking<br>
hare@suse.de                
                 
               
               +49 911 74053 688<br>
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg<br>
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton<br>
HRB 21284 (AG Nürnberg)<br>
</font></tt>
<br>