Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2
s390-tools
s390-tools-sles11sp2-cpuplugd_parse_config.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File s390-tools-sles11sp2-cpuplugd_parse_config.patch of Package s390-tools
Description: cpuplugd: fix config file parsing Symptom: Commented lines in the config file might not be ignored and trigger a parsing error. Also, invalid variable names might not be rejected if they match a correct substring. Problem: Comment handling and string matching is broken. Solution: Fix comment handling and string matching. Problem-ID: 74419 --- cpuplugd/config.c | 16 ++++++++-------- cpuplugd/info.c | 13 +++++++------ 2 files changed, 15 insertions(+), 14 deletions(-) --- a/cpuplugd/config.c +++ b/cpuplugd/config.c @@ -111,6 +111,8 @@ static void parse_configline(char *line) size_t len; char temp[strlen(line) + 1]; + if (line[0] == '#') + return; for (i = j = 0; line[i] != 0; i++) /* Remove whitespace. */ if (!isblank(line[i]) && !isspace(line[i])) temp[j++] = line[i]; @@ -169,14 +171,12 @@ static void parse_configline(char *line) if (check_value("cmm_max", name, rvalue, &cfg.cmm_max)) return; - if (name[0] != '#') { - cpuplugd_debug("found the following variable: %s = %s\n", - name, rvalue); - if (strlen(name) > MAX_VARNAME) - cpuplugd_exit("Variable name too long (max. length is " - "%i chars): %s\n", MAX_VARNAME, name); - add_var(name, rvalue); - } + cpuplugd_debug("found the following variable: %s = %s\n", + name, rvalue); + if (strlen(name) > MAX_VARNAME) + cpuplugd_exit("Variable name too long (max. length is " + "%i chars): %s\n", MAX_VARNAME, name); + add_var(name, rvalue); } /* --- a/cpuplugd/info.c +++ b/cpuplugd/info.c @@ -122,21 +122,22 @@ double get_proc_value(char *procinfo, ch { char buf[PROCINFO_LINE]; char *proc_offset; - unsigned long length; + unsigned long proc_length, name_length; double value; int found; value = -1; found = 0; + name_length = strlen(name); while ((proc_offset = strchr(procinfo, separator))) { - length = proc_offset - procinfo; + proc_length = proc_offset - procinfo; /* - * proc_read_size() made sure that length < PROCINFO_LINE + * proc_read_size() made sure that proc_length < PROCINFO_LINE */ - memcpy(buf, procinfo, length); - buf[length] = '\0'; + memcpy(buf, procinfo, proc_length); + buf[proc_length] = '\0'; procinfo = proc_offset + 1; - if (strncmp(buf, name, length) == 0) { + if (strncmp(buf, name, MAX(proc_length, name_length)) == 0) { errno = 0; value = strtod(procinfo, NULL); if (errno)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor