r23961: Allow SWAT to operate on x86_64 machines.
authorAndrew Bartlett <abartlet@samba.org>
Thu, 19 Jul 2007 04:00:32 +0000 (04:00 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 20:01:11 +0000 (15:01 -0500)
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

source/lib/appweb/ejs-2.0/ejs/ejsCmd.c
source/lib/appweb/ejs-2.0/ejs/ejsVar.c
source/lib/appweb/ejs-2.0/mpr/mprString.c
source/lib/appweb/esp/esp.c
source/lib/appweb/mpr/miniMpr.c

index b5279c949a72909dd97a5dbbdd35f1db2900d2a0..74b57de4d02777efd8c391c092e154e65b434650 100644 (file)
@@ -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) {
index 5067215f0337087fa329b0dcaa1ec235322157a8..1f8e9266a3e92f01f4a45584e4fd374aeea2ff4a 100644 (file)
@@ -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;
        }
index b688667bccec735f84c391a64513b2b9bafd6b1f..d39fc8b7467be03c788e3630de8cadd2154fdd80 100644 (file)
@@ -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,...)
 {
index 0be7af6c1b33615c309061ce3f9d4e2894640491..3e47503edfc79dc14962d53f1c145f86196cd861 100644 (file)
@@ -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;
index 8df1817bf1296fbdff43365363c067b7604f1b1a..949d64fcf11f0ed3751e7d01d3c19fecff0e9138 100644 (file)
@@ -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,...)