fix a few stray unguarded strdup's

1_11_stable
Denis Vlasenko 2008-03-28 02:24:59 +00:00
parent 2570b2e575
commit c4523c2b3d
4 changed files with 140 additions and 147 deletions

View File

@ -285,7 +285,7 @@ static char *string_copy(const char *s)
if (!s) if (!s)
return 0; return 0;
ret = strdup(s); ret = xstrdup(s);
return ret; return ret;
} }

View File

@ -119,7 +119,7 @@ int ed_main(int argc ATTRIBUTE_UNUSED, char **argv)
static void doCommands(void) static void doCommands(void)
{ {
const char *cp; const char *cp;
char *endbuf, *newname, buf[USERSIZE]; char *endbuf, buf[USERSIZE];
int len, num1, num2; int len, num1, num2;
smallint have1, have2; smallint have1, have2;
@ -168,162 +168,157 @@ static void doCommands(void)
num2 = num1; num2 = num1;
switch (*cp++) { switch (*cp++) {
case 'a': case 'a':
addLines(num1 + 1); addLines(num1 + 1);
break; break;
case 'c': case 'c':
deleteLines(num1, num2); deleteLines(num1, num2);
addLines(num1); addLines(num1);
break; break;
case 'd': case 'd':
deleteLines(num1, num2); deleteLines(num1, num2);
break; break;
case 'f': case 'f':
if (*cp && !isblank(*cp)) { if (*cp && !isblank(*cp)) {
bb_error_msg("bad file command"); bb_error_msg("bad file command");
break;
}
cp = skip_blank(cp);
if (*cp == '\0') {
if (fileName)
printf("\"%s\"\n", fileName);
else
printf("No file name\n");
break;
}
newname = strdup(cp);
if (newname == NULL) {
bb_error_msg("no memory for file name");
break;
}
free(fileName);
fileName = newname;
break; break;
}
case 'i': cp = skip_blank(cp);
addLines(num1); if (*cp == '\0') {
if (fileName)
printf("\"%s\"\n", fileName);
else
printf("No file name\n");
break; break;
}
free(fileName);
fileName = xstrdup(cp);
break;
case 'k': case 'i':
cp = skip_blank(cp); addLines(num1);
if ((*cp < 'a') || (*cp > 'z') || cp[1]) { break;
bb_error_msg("bad mark name");
break; case 'k':
} cp = skip_blank(cp);
marks[*cp - 'a'] = num2; if ((*cp < 'a') || (*cp > 'z') || cp[1]) {
bb_error_msg("bad mark name");
break; break;
}
marks[*cp - 'a'] = num2;
break;
case 'l': case 'l':
printLines(num1, num2, TRUE); printLines(num1, num2, TRUE);
break;
case 'p':
printLines(num1, num2, FALSE);
break;
case 'q':
cp = skip_blank(cp);
if (have1 || *cp) {
bb_error_msg("bad quit command");
break; break;
}
if (!dirty)
return;
len = read_line_input("Really quit? ", buf, 16, NULL);
/* read error/EOF - no way to continue */
if (len < 0)
return;
cp = skip_blank(buf);
if ((*cp | 0x20) == 'y') /* Y or y */
return;
break;
case 'p': case 'r':
printLines(num1, num2, FALSE); if (*cp && !isblank(*cp)) {
bb_error_msg("bad read command");
break; break;
}
case 'q': cp = skip_blank(cp);
cp = skip_blank(cp); if (*cp == '\0') {
if (have1 || *cp) { bb_error_msg("no file name");
bb_error_msg("bad quit command");
break;
}
if (!dirty)
return;
len = read_line_input("Really quit? ", buf, 16, NULL);
/* read error/EOF - no way to continue */
if (len < 0)
return;
cp = skip_blank(buf);
if ((*cp | 0x20) == 'y') /* Y or y */
return;
break; break;
}
case 'r': if (!have1)
if (*cp && !isblank(*cp)) { num1 = lastNum;
bb_error_msg("bad read command"); if (readLines(cp, num1 + 1))
break;
}
cp = skip_blank(cp);
if (*cp == '\0') {
bb_error_msg("no file name");
break;
}
if (!have1)
num1 = lastNum;
if (readLines(cp, num1 + 1))
break;
if (fileName == NULL)
fileName = strdup(cp);
break; break;
if (fileName == NULL)
fileName = xstrdup(cp);
break;
case 's': case 's':
subCommand(cp, num1, num2); subCommand(cp, num1, num2);
break;
case 'w':
if (*cp && !isblank(*cp)) {
bb_error_msg("bad write command");
break; break;
}
case 'w': cp = skip_blank(cp);
if (*cp && !isblank(*cp)) { if (!have1) {
bb_error_msg("bad write command"); num1 = 1;
break; num2 = lastNum;
} }
cp = skip_blank(cp); if (*cp == '\0')
if (!have1) { cp = fileName;
num1 = 1; if (cp == NULL) {
num2 = lastNum; bb_error_msg("no file name specified");
}
if (*cp == '\0')
cp = fileName;
if (cp == NULL) {
bb_error_msg("no file name specified");
break;
}
writeLines(cp, num1, num2);
break;
case 'z':
switch (*cp) {
case '-':
printLines(curNum - 21, curNum, FALSE);
break;
case '.':
printLines(curNum - 11, curNum + 10, FALSE);
break;
default:
printLines(curNum, curNum + 21, FALSE);
break;
}
break;
case '.':
if (have1) {
bb_error_msg("no arguments allowed");
break;
}
printLines(curNum, curNum, FALSE);
break; break;
}
writeLines(cp, num1, num2);
break;
case 'z':
switch (*cp) {
case '-': case '-':
if (setCurNum(curNum - 1)) printLines(curNum - 21, curNum, FALSE);
printLines(curNum, curNum, FALSE);
break; break;
case '.':
case '=': printLines(curNum - 11, curNum + 10, FALSE);
printf("%d\n", num1);
break; break;
case '\0':
if (have1) {
printLines(num2, num2, FALSE);
break;
}
if (setCurNum(curNum + 1))
printLines(curNum, curNum, FALSE);
break;
default: default:
bb_error_msg("unimplemented command"); printLines(curNum, curNum + 21, FALSE);
break; break;
}
break;
case '.':
if (have1) {
bb_error_msg("no arguments allowed");
break;
}
printLines(curNum, curNum, FALSE);
break;
case '-':
if (setCurNum(curNum - 1))
printLines(curNum, curNum, FALSE);
break;
case '=':
printf("%d\n", num1);
break;
case '\0':
if (have1) {
printLines(num2, num2, FALSE);
break;
}
if (setCurNum(curNum + 1))
printLines(curNum, curNum, FALSE);
break;
default:
bb_error_msg("unimplemented command");
break;
} }
} }
} }

View File

@ -800,7 +800,7 @@ static char *encodeString(const char *string)
/* /*
* Given a URL encoded string, convert it to plain ascii. * Given a URL encoded string, convert it to plain ascii.
* Since decoding always makes strings smaller, the decode is done in-place. * Since decoding always makes strings smaller, the decode is done in-place.
* Thus, callers should strdup() the argument if they do not want the * Thus, callers should xstrdup() the argument if they do not want the
* argument modified. The return is the original pointer, allowing this * argument modified. The return is the original pointer, allowing this
* function to be easily used as arguments to other functions. * function to be easily used as arguments to other functions.
* *
@ -1725,9 +1725,7 @@ static int checkPerm(const char *path, const char *request)
if (strcmp(p, request) == 0) { if (strcmp(p, request) == 0) {
set_remoteuser_var: set_remoteuser_var:
remoteuser = strdup(request); remoteuser = xstrndup(request, u - request);
if (remoteuser)
remoteuser[u - request] = '\0';
return 1; /* Ok */ return 1; /* Ok */
} }
/* unauthorized */ /* unauthorized */
@ -1990,13 +1988,13 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
#endif #endif
#if ENABLE_FEATURE_HTTPD_CGI #if ENABLE_FEATURE_HTTPD_CGI
else if (STRNCASECMP(iobuf, "Cookie:") == 0) { else if (STRNCASECMP(iobuf, "Cookie:") == 0) {
cookie = strdup(skip_whitespace(iobuf + sizeof("Cookie:")-1)); cookie = xstrdup(skip_whitespace(iobuf + sizeof("Cookie:")-1));
} else if (STRNCASECMP(iobuf, "Content-Type:") == 0) { } else if (STRNCASECMP(iobuf, "Content-Type:") == 0) {
content_type = strdup(skip_whitespace(iobuf + sizeof("Content-Type:")-1)); content_type = xstrdup(skip_whitespace(iobuf + sizeof("Content-Type:")-1));
} else if (STRNCASECMP(iobuf, "Referer:") == 0) { } else if (STRNCASECMP(iobuf, "Referer:") == 0) {
referer = strdup(skip_whitespace(iobuf + sizeof("Referer:")-1)); referer = xstrdup(skip_whitespace(iobuf + sizeof("Referer:")-1));
} else if (STRNCASECMP(iobuf, "User-Agent:") == 0) { } else if (STRNCASECMP(iobuf, "User-Agent:") == 0) {
user_agent = strdup(skip_whitespace(iobuf + sizeof("User-Agent:")-1)); user_agent = xstrdup(skip_whitespace(iobuf + sizeof("User-Agent:")-1));
} }
#endif #endif
#if ENABLE_FEATURE_HTTPD_BASIC_AUTH #if ENABLE_FEATURE_HTTPD_BASIC_AUTH
@ -2377,7 +2375,7 @@ int httpd_main(int argc ATTRIBUTE_UNUSED, char **argv)
* Besides, it is also smaller. */ * Besides, it is also smaller. */
{ {
char *p = getenv("PATH"); char *p = getenv("PATH");
/* env strings themself are not freed, no need to strdup(p): */ /* env strings themself are not freed, no need to xstrdup(p): */
clearenv(); clearenv();
if (p) if (p)
putenv(p - 5); putenv(p - 5);

View File

@ -78,10 +78,10 @@ static void read_config(char **pc, int npc, char **fc, int nfc)
section = 2; section = 2;
} else { } else {
if (section == 1 && pc_ofs < npc -1) { if (section == 1 && pc_ofs < npc -1) {
pc[pc_ofs++] = strdup(buf); pc[pc_ofs++] = xstrdup(buf);
pc[pc_ofs] = NULL; pc[pc_ofs] = NULL;
} else if (section == 2 && fc_ofs < nfc - 1) { } else if (section == 2 && fc_ofs < nfc - 1) {
fc[fc_ofs++] = strdup(buf); fc[fc_ofs++] = xstrdup(buf);
fc[fc_ofs] = NULL; fc[fc_ofs] = NULL;
} }
} }