mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
r23961: Allow SWAT to operate on x86_64 machines.
On machines with a 4 byte int, and a 8 byte pointer, the ESP could would fail. The problem is that 0 != NULL. 0 is an int (4 bytes) and NULL is a pointer (8), and this matters critically to varargs functions. If a 0 was passed as the 'terminating' argument, then only 4 bytes would be written to the stack, but va_arg(ap, char *) would try and pull 8, reading uninitalised memory. Andrew Bartlett
This commit is contained in:
parent
18d2680f35
commit
72ca8e3b2a
@ -167,10 +167,10 @@ int main(int argc, char *argv[])
|
||||
i = 0;
|
||||
commandLine = 0;
|
||||
len = mprAllocStrcat(MPR_LOC_ARGS(app), &commandLine, 0, " ",
|
||||
mprGetBaseName(argv[i++]), 0);
|
||||
mprGetBaseName(argv[i++]), NULL);
|
||||
for (; i < argc; i++) {
|
||||
len = mprReallocStrcat(MPR_LOC_ARGS(app), &commandLine, 0, len,
|
||||
" ", argv[i], 0);
|
||||
" ", argv[i], NULL);
|
||||
}
|
||||
mprPrintf(app, " %s\n", commandLine);
|
||||
}
|
||||
@ -339,7 +339,7 @@ static char *readCmd(MprApp *app, FILE *input)
|
||||
line[len - 1] = '\0';
|
||||
}
|
||||
cmdLen = mprReallocStrcat(MPR_LOC_ARGS(app), &cmd, EJS_MAX_SCRIPT,
|
||||
cmdLen, 0, line, 0);
|
||||
cmdLen, 0, line, NULL);
|
||||
}
|
||||
return cmd;
|
||||
}
|
||||
@ -380,12 +380,12 @@ static int interactiveUse(MprApp *app, Ejs *ejs, FILE *input, char *fileName)
|
||||
if (line[len - 1] == '\\') {
|
||||
line[len - 1] = '\0';
|
||||
cmdLen = mprReallocStrcat(MPR_LOC_ARGS(app), &cmd, EJS_MAX_SCRIPT,
|
||||
cmdLen, 0, line, 0);
|
||||
cmdLen, 0, line, NULL);
|
||||
|
||||
} else {
|
||||
|
||||
cmdLen = mprReallocStrcat(MPR_LOC_ARGS(app), &cmd, EJS_MAX_SCRIPT,
|
||||
cmdLen, 0, line, 0);
|
||||
cmdLen, 0, line, NULL);
|
||||
|
||||
|
||||
if (traceCmds) {
|
||||
|
@ -2590,7 +2590,7 @@ EjsProperty *ejsDefineAccessors(Ejs *ep, EjsVar *vp, const char *prop,
|
||||
/* MOB -- need to encapsulate this logic */
|
||||
|
||||
if (mprAllocStrcat(MPR_LOC_ARGS(ep), &propName, EJS_MAX_ID+5, 0,
|
||||
"-set-", prop, 0) < 0) {
|
||||
"-set-", prop, NULL) < 0) {
|
||||
ejsMemoryError(ep);
|
||||
return 0;
|
||||
}
|
||||
@ -2633,7 +2633,7 @@ EjsProperty *ejsDefineCAccessors(Ejs *ep, EjsVar *vp, const char *prop,
|
||||
|
||||
/* MOB -- OPT to use SLAB */
|
||||
if (mprAllocStrcat(MPR_LOC_ARGS(ep), &propName, EJS_MAX_ID + 5, 0,
|
||||
"-set-", prop, 0) < 0) {
|
||||
"-set-", prop, NULL) < 0) {
|
||||
ejsMemoryError(ep);
|
||||
return 0;
|
||||
}
|
||||
|
@ -232,8 +232,10 @@ static int mprCoreStrcat(MPR_LOC_DEC(ctx, loc), char **destp, int destMax,
|
||||
return required - 1;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
Note that this VARARGS function must be NULL (not 0, this must be a
|
||||
pointer) terminated
|
||||
*/
|
||||
int mprStrcat(char *dest, int destMax, const char *delim, const char *src, ...)
|
||||
{
|
||||
va_list ap;
|
||||
@ -249,8 +251,10 @@ int mprStrcat(char *dest, int destMax, const char *delim, const char *src, ...)
|
||||
return rc;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
Note that this VARARGS function must be NULL (not 0, this must be a
|
||||
pointer) terminated
|
||||
*/
|
||||
int mprAllocStrcat(MPR_LOC_DEC(ctx, loc), char **destp, int destMax,
|
||||
const char *delim, const char *src, ...)
|
||||
{
|
||||
@ -268,8 +272,10 @@ int mprAllocStrcat(MPR_LOC_DEC(ctx, loc), char **destp, int destMax,
|
||||
return rc;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
Note that this VARARGS function must be NULL (not 0, this must be a
|
||||
pointer) terminated
|
||||
*/
|
||||
int mprReallocStrcat(MPR_LOC_DEC(ctx, loc), char **destp, int destMax,
|
||||
int existingLen, const char *delim, const char *src,...)
|
||||
{
|
||||
|
@ -352,7 +352,7 @@ void espError(EspRequest *ep, const char *fmt, ...)
|
||||
|
||||
va_start(args, fmt);
|
||||
mprAllocVsprintf(&buf, MPR_MAX_HEAP_SIZE, fmt, args);
|
||||
ejsSetErrorMsg(ep->eid, buf);
|
||||
ejsSetErrorMsg(ep->eid, "%s", buf);
|
||||
mprFree(buf);
|
||||
va_end(args);
|
||||
}
|
||||
@ -735,7 +735,7 @@ static int buildScript(EspRequest *ep, char **jsBuf, char *input, char **errMsg)
|
||||
|
||||
case ESP_TOK_LITERAL:
|
||||
len = mprReallocStrcat(jsBuf, maxScriptSize, len, 0,
|
||||
"write(\"", parse.token, "\");\n", 0);
|
||||
"write(\"", parse.token, "\");\n", NULL);
|
||||
break;
|
||||
|
||||
case ESP_TOK_ATAT:
|
||||
@ -744,12 +744,12 @@ static int buildScript(EspRequest *ep, char **jsBuf, char *input, char **errMsg)
|
||||
* Catenate with "" to cause toString to run.
|
||||
*/
|
||||
len = mprReallocStrcat(jsBuf, maxScriptSize, len, 0,
|
||||
"write(\"\" + ", parse.token, ");\n", 0);
|
||||
"write(\"\" + ", parse.token, ");\n", NULL);
|
||||
break;
|
||||
|
||||
case ESP_TOK_EQUALS:
|
||||
len = mprReallocStrcat(jsBuf, maxScriptSize, len, 0,
|
||||
"write(\"\" + ", parse.token, ");\n", 0);
|
||||
"write(\"\" + ", parse.token, ");\n", NULL);
|
||||
state = ESP_STATE_IN_ESP_TAG;
|
||||
break;
|
||||
|
||||
@ -759,7 +759,7 @@ static int buildScript(EspRequest *ep, char **jsBuf, char *input, char **errMsg)
|
||||
while (tid != ESP_TOK_EOF && tid != ESP_TOK_EOF &&
|
||||
tid != ESP_TOK_END_ESP && len >= 0) {
|
||||
len = mprReallocStrcat(jsBuf, maxScriptSize, len, 0,
|
||||
parse.token, 0);
|
||||
parse.token, NULL);
|
||||
tid = getEspToken(state, &parse);
|
||||
}
|
||||
state = ESP_STATE_BEGIN;
|
||||
@ -802,7 +802,7 @@ static int buildScript(EspRequest *ep, char **jsBuf, char *input, char **errMsg)
|
||||
return rc;
|
||||
}
|
||||
|
||||
len = mprReallocStrcat(jsBuf, maxScriptSize, len, 0, incBuf, 0);
|
||||
len = mprReallocStrcat(jsBuf, maxScriptSize, len, 0, incBuf, NULL);
|
||||
mprFree(incText);
|
||||
mprFree(incBuf);
|
||||
state = ESP_STATE_IN_ESP_TAG;
|
||||
|
@ -387,7 +387,10 @@ static int mprCoreStrcat(int alloc, char **destp, int destMax, int existingLen,
|
||||
return required - 1;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*****************************************************************************
|
||||
Note that this VARARGS function must be NULL (not 0, this must be a
|
||||
pointer) terminated
|
||||
*/
|
||||
|
||||
int mprReallocStrcat(char **destp, int destMax, int existingLen,
|
||||
const char *delim, const char *src,...)
|
||||
|
Loading…
Reference in New Issue
Block a user