- fixed the building on 9+ - clean-up patches PR: 167724 Submitted by: Masamichi Takatsu <taka2@doga.co.jp>
77 lines
2 KiB
C
77 lines
2 KiB
C
--- lib/getcap.c.orig 1997-01-24 16:09:09.000000000 +0900
|
|
+++ lib/getcap.c 2012-05-10 00:14:28.822558096 +0900
|
|
@@ -73,8 +73,10 @@
|
|
fprintf(stderr, "cap %s redefined (default %s)\r\n", name,
|
|
def_value ? def_value : "None");
|
|
#endif
|
|
+ SafeFree(cp->name);
|
|
cp->name = strdup(name);
|
|
cp->func = func;
|
|
+ SafeFree(cp->def_value);
|
|
if (def_value)
|
|
cp->def_value = strdup(def_value);
|
|
return;
|
|
@@ -86,8 +88,10 @@
|
|
fprintf(stderr, "cap %s defined (default %s)\r\n", name,
|
|
def_value ? def_value : "None");
|
|
#endif
|
|
+ SafeFree(cp->name);
|
|
cp->name = strdup(name);
|
|
cp->func = func;
|
|
+ SafeFree(cp->def_value);
|
|
if (def_value)
|
|
cp->def_value = strdup(def_value);
|
|
return;
|
|
@@ -110,12 +114,9 @@
|
|
fprintf(stderr, "cap %s deleted\r\n", cp->name);
|
|
#endif
|
|
cp->initialized = 0;
|
|
- if (cp->name)
|
|
- free(cp->name);
|
|
- if (cp->arg)
|
|
- free(cp->arg);
|
|
- if (cp->def_value)
|
|
- free(cp->def_value);
|
|
+ SafeFree(cp->name);
|
|
+ SafeFree(cp->arg);
|
|
+ SafeFree(cp->def_value);
|
|
cp->name = cp->arg = cp->def_value = NULL;
|
|
}
|
|
}
|
|
@@ -149,10 +150,13 @@
|
|
if ((c = FindCap(p)) != NULL) {
|
|
/* Found matching capability. Get body from file. */
|
|
char *l = buf;
|
|
+ int bnum = 0;
|
|
while (fgets(line, MAX_COLS, capFp) != NULL
|
|
&& line[0] == '\t') {
|
|
char *l2 = line;
|
|
while (*l2 != '\n' && *l2 != '#') {
|
|
+ if (++bnum > BUF_SIZE - 2)
|
|
+ fatal("buffer overflow at configuration file\n");
|
|
*l++ = *l2++;
|
|
}
|
|
*l++ = '\n';
|
|
@@ -223,6 +227,7 @@
|
|
/* Protected capability. */
|
|
return FAILURE;
|
|
}
|
|
+ SafeFree(cp->arg);
|
|
cp->arg = strdup(value);
|
|
#ifdef DEBUG
|
|
fprintf(stderr, "Setting arg for %s to %s\r\n", capName, value);
|
|
@@ -234,8 +239,12 @@
|
|
|
|
bool BoolConf(const char *confstr)
|
|
{
|
|
- char name[MAX_COLS];
|
|
- sscanf(confstr, "%s", name);
|
|
+ char *name, *last, *sep = " \t\r\n";
|
|
+
|
|
+ name = strtok_r((char *)confstr, sep, &last);
|
|
+ if (name == NULL)
|
|
+ return FALSE;
|
|
+
|
|
if (strcasecmp(name, "On") == 0 ||
|
|
strcasecmp(name, "True") == 0) {
|
|
return TRUE;
|