summaryrefslogtreecommitdiff
path: root/source4
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2007-07-19 04:00:32 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 15:01:11 -0500
commitf8219ec5a8502975f347323900ff3245ff5222dc (patch)
treeb80a2683164ccf4c7da7188c010abc340fd5f639 /source4
parent3c097f3afb51f41abe2be6a5698dabba559b75fc (diff)
downloadsamba-f8219ec5a8502975f347323900ff3245ff5222dc.tar.gz
samba-f8219ec5a8502975f347323900ff3245ff5222dc.tar.bz2
samba-f8219ec5a8502975f347323900ff3245ff5222dc.zip
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 used to be commit 72ca8e3b2a45179b731790e6329b978b22ac1ec0)
Diffstat (limited to 'source4')
-rw-r--r--source4/lib/appweb/ejs-2.0/ejs/ejsCmd.c10
-rw-r--r--source4/lib/appweb/ejs-2.0/ejs/ejsVar.c4
-rw-r--r--source4/lib/appweb/ejs-2.0/mpr/mprString.c18
-rw-r--r--source4/lib/appweb/esp/esp.c12
-rw-r--r--source4/lib/appweb/mpr/miniMpr.c5
5 files changed, 29 insertions, 20 deletions
diff --git a/source4/lib/appweb/ejs-2.0/ejs/ejsCmd.c b/source4/lib/appweb/ejs-2.0/ejs/ejsCmd.c
index b5279c949a..74b57de4d0 100644
--- a/source4/lib/appweb/ejs-2.0/ejs/ejsCmd.c
+++ b/source4/lib/appweb/ejs-2.0/ejs/ejsCmd.c
@@ -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) {
diff --git a/source4/lib/appweb/ejs-2.0/ejs/ejsVar.c b/source4/lib/appweb/ejs-2.0/ejs/ejsVar.c
index 5067215f03..1f8e9266a3 100644
--- a/source4/lib/appweb/ejs-2.0/ejs/ejsVar.c
+++ b/source4/lib/appweb/ejs-2.0/ejs/ejsVar.c
@@ -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;
}
diff --git a/source4/lib/appweb/ejs-2.0/mpr/mprString.c b/source4/lib/appweb/ejs-2.0/mpr/mprString.c
index b688667bcc..d39fc8b746 100644
--- a/source4/lib/appweb/ejs-2.0/mpr/mprString.c
+++ b/source4/lib/appweb/ejs-2.0/mpr/mprString.c
@@ -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,...)
{
diff --git a/source4/lib/appweb/esp/esp.c b/source4/lib/appweb/esp/esp.c
index 0be7af6c1b..3e47503edf 100644
--- a/source4/lib/appweb/esp/esp.c
+++ b/source4/lib/appweb/esp/esp.c
@@ -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;
diff --git a/source4/lib/appweb/mpr/miniMpr.c b/source4/lib/appweb/mpr/miniMpr.c
index 8df1817bf1..949d64fcf1 100644
--- a/source4/lib/appweb/mpr/miniMpr.c
+++ b/source4/lib/appweb/mpr/miniMpr.c
@@ -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,...)