[systemd-devel] Initialization of "vbuf" in function "token_match_attr"

Amit anand amit.table at gmail.com
Tue Sep 8 11:56:30 UTC 2020


Hi systemd-devel team,

I am trying to understand where "vbuf" is initialized in function
"token_match_attr()" in file udev-rules.c

Below code snippet :
static bool* token_match_attr*(UdevRuleToken *token, sd_device *dev,
UdevEvent *event) {
 *char* nbuf[UTIL_NAME_SIZE], *vbuf*[UTIL_NAME_SIZE];     // Here, vbuf is
defined, however not initialized.
*const char* *name, **value;        *// Here, value is declared to be of
type const char *, however, not initialized.
...
... // some code
...
switch (token->attr_subst_type) {   // *Event 1* : This evaluates to
SUBST_TYPE_PLAIN
...
case *SUBST_TYPE_PLAIN*:   if (sd_device_get_sysattr_value(dev, name,
&value) < 0)   // *Event 2* :The if condition evaluates to false.
                                                 return false;
 break;
...// some code
...
}

        if (token->attr_match_remove_trailing_whitespace) {      // *Event
4*: If condition evaluates to true
                if (value != vbuf) {      //  *Event 5* : vbuf and value
are both declared but not initialized. Comparison is done without
initializing "vbuf" and "value".
                        strscpy(vbuf, sizeof(vbuf), value);
                        value = vbuf;
                } // End of if.

                delete_trailing_chars(vbuf, NULL);         // *Event 6*:
trying to delete trailing chars from "vbuf" which is not initialzed. ??
        } // End of outer if.
... // some code
} /End of function : *token_match_attr()*

Below are my queries :
1. *Event 5 *above, we are comparing two resources ("value" and "vbuf")
even before initializing them.
    Are we doing this comparision to do decision making based on whether
the pointer type variable "value" is pointing to "vbuf" or not.
*Query*: Kindly confirm whether my understanding is correct.

2. *Event 6* above, delete_trailing_chars(vbuf, NULL) is called outside  *if
(value != vbuf).*
    This implies there may occur a situation where:
              step 1 ) *if (value != vbuf) *condition fails  --> step 2 )
*vbuf* is not initialzed inside the *if(value != vbuf)  *--> step 3 )
delete_trailing_chars(*vbuf*, NULL).
Here, delete_trailing_chars() called for "*vbuf*" which is not necessarily
initiazlied.
*Query*: Kindly let me know if my understanding is correct or I am missing
something.

Thanks,
Amit
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/systemd-devel/attachments/20200908/b9b50e76/attachment.htm>


More information about the systemd-devel mailing list