From ea7e8fd39a05df05b7746c94b197d524c9f3f325 Mon Sep 17 00:00:00 2001 From: "bienvenu%nventure.com" Date: Tue, 7 Mar 2006 02:38:31 +0000 Subject: [PATCH] fix crash doing sspi auth, patch by schlichting@tu-harburg.de, r=cneberg@gmail.com, sr=bienvenu git-svn-id: svn://10.0.0.236/trunk@191871 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/extensions/auth/nsAuthSSPI.cpp | 28 +++++++++++++++----------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/mozilla/extensions/auth/nsAuthSSPI.cpp b/mozilla/extensions/auth/nsAuthSSPI.cpp index 08a173de00f..ca70729e7c5 100644 --- a/mozilla/extensions/auth/nsAuthSSPI.cpp +++ b/mozilla/extensions/auth/nsAuthSSPI.cpp @@ -357,6 +357,10 @@ nsAuthSSPI::GetNextToken(const void *inToken, &ctxAttr, &ignored); if (rc == SEC_I_CONTINUE_NEEDED || rc == SEC_E_OK) { + if (!ob.cbBuffer) { + nsMemory::Free(ob.pvBuffer); + ob.pvBuffer = NULL; + } *outToken = ob.pvBuffer; *outTokenLen = ob.cbBuffer; @@ -501,21 +505,21 @@ nsAuthSSPI::Wrap(const void *inToken, if (SEC_SUCCESS(rc)) { int len = bufs.ib[0].cbBuffer + bufs.ib[1].cbBuffer + bufs.ib[2].cbBuffer; + char *p = (char *) nsMemory::Alloc(len); - *outToken = nsMemory::Alloc(len); - - if (!*outToken) + if (!p) return NS_ERROR_OUT_OF_MEMORY; - - memcpy(outToken, bufs.ib[0].pvBuffer, bufs.ib[0].cbBuffer); - - memcpy(outToken + bufs.ib[0].cbBuffer, - bufs.ib[1].pvBuffer, bufs.ib[1].cbBuffer); - - memcpy(outToken + bufs.ib[0].cbBuffer + bufs.ib[1].cbBuffer, - bufs.ib[2].pvBuffer, bufs.ib[2].cbBuffer); - + + *outToken = (void *) p; *outTokenLen = len; + + memcpy(p, bufs.ib[0].pvBuffer, bufs.ib[0].cbBuffer); + p += bufs.ib[0].cbBuffer; + + memcpy(p,bufs.ib[1].pvBuffer, bufs.ib[1].cbBuffer); + p += bufs.ib[1].cbBuffer; + + memcpy(p,bufs.ib[2].pvBuffer, bufs.ib[2].cbBuffer); return NS_OK; }