<div dir="ltr"><div dir="ltr">Hi, <br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Sep 8, 2020 at 6:23 PM Ulrich Windl <<a href="mailto:Ulrich.Windl@rz.uni-regensburg.de">Ulrich.Windl@rz.uni-regensburg.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi!<br>
<br>
vbuf is initialized: It has some address on the stack, so "if (value != vbuf)" is comparing adresses, if I got it right...<br></blockquote><div>vbuf having some address on stack and "if(value!=vbuf)" is comparing addresses doesn't necessarily implies that vbuf is initialized. <br></div><div>I am still not clear about where vbuf is initialized.</div><div>Also, expecting some information regarding my queries in below mail.</div><div><br></div><div>Thanks, <br></div><div>Amit<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
>>> Amit anand <<a href="mailto:amit.table@gmail.com" target="_blank">amit.table@gmail.com</a>> schrieb am 08.09.2020 um 13:56 in Nachricht<br>
<CAMkFpM5NFmN+pc_cztmMZW=<a href="mailto:j1vn2RYC16AgJ3LYL6RSgdqP1eA@mail.gmail.com" target="_blank">j1vn2RYC16AgJ3LYL6RSgdqP1eA@mail.gmail.com</a>>:<br>
> Hi systemd-devel team,<br>
> <br>
> I am trying to understand where "vbuf" is initialized in function<br>
> "token_match_attr()" in file udev-rules.c<br>
> <br>
> Below code snippet :<br>
> static bool* token_match_attr*(UdevRuleToken *token, sd_device *dev,<br>
> UdevEvent *event) {<br>
>  *char* nbuf[UTIL_NAME_SIZE], *vbuf*[UTIL_NAME_SIZE];     // Here, vbuf is<br>
> defined, however not initialized.<br>
> *const char* *name, **value;        *// Here, value is declared to be of<br>
> type const char *, however, not initialized.<br>
> ...<br>
> ... // some code<br>
> ...<br>
> switch (token->attr_subst_type) {   // *Event 1* : This evaluates to<br>
> SUBST_TYPE_PLAIN<br>
> ...<br>
> case *SUBST_TYPE_PLAIN*:   if (sd_device_get_sysattr_value(dev, name,<br>
> &value) < 0)   // *Event 2* :The if condition evaluates to false.<br>
>                                                  return false;<br>
>  break;<br>
> ...// some code<br>
> ...<br>
> }<br>
> <br>
>         if (token->attr_match_remove_trailing_whitespace) {      // *Event<br>
> 4*: If condition evaluates to true<br>
>                 if (value != vbuf) {      //  *Event 5* : vbuf and value<br>
> are both declared but not initialized. Comparison is done without<br>
> initializing "vbuf" and "value".<br>
>                         strscpy(vbuf, sizeof(vbuf), value);<br>
>                         value = vbuf;<br>
>                 } // End of if.<br>
> <br>
>                 delete_trailing_chars(vbuf, NULL);         // *Event 6*:<br>
> trying to delete trailing chars from "vbuf" which is not initialzed. ??<br>
>         } // End of outer if.<br>
> ... // some code<br>
> } /End of function : *token_match_attr()*<br>
> <br>
> Below are my queries :<br>
> 1. *Event 5 *above, we are comparing two resources ("value" and "vbuf")<br>
> even before initializing them.<br>
>     Are we doing this comparision to do decision making based on whether<br>
> the pointer type variable "value" is pointing to "vbuf" or not.<br>
> *Query*: Kindly confirm whether my understanding is correct.<br>
> <br>
> 2. *Event 6* above, delete_trailing_chars(vbuf, NULL) is called outside  *if<br>
> (value != vbuf).*<br>
>     This implies there may occur a situation where:<br>
>               step 1 ) *if (value != vbuf) *condition fails  --> step 2 )<br>
> *vbuf* is not initialzed inside the *if(value != vbuf)  *--> step 3 )<br>
> delete_trailing_chars(*vbuf*, NULL).<br>
> Here, delete_trailing_chars() called for "*vbuf*" which is not necessarily<br>
> initiazlied.<br>
> *Query*: Kindly let me know if my understanding is correct or I am missing<br>
> something.<br>
> <br>
> Thanks,<br>
> Amit<br>
<br>
<br>
<br>
<br>
</blockquote></div></div>