secur32: On error set output buffer size to zero

André Hentschel nerv at dawncrow.de
Thu Aug 29 17:30:53 CDT 2013


---
 dlls/secur32/schannel.c       | 4 ++++
 dlls/secur32/tests/schannel.c | 3 ++-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/dlls/secur32/schannel.c b/dlls/secur32/schannel.c
index 240062f..2c08bd1 100644
--- a/dlls/secur32/schannel.c
+++ b/dlls/secur32/schannel.c
@@ -784,6 +784,7 @@ static SECURITY_STATUS SEC_ENTRY schan_InitializeSecurityContextW(
     struct schan_transport transport;
     SIZE_T expected_size = ~0UL;
     SECURITY_STATUS ret;
+    int i;
 
     TRACE("%p %p %s 0x%08x %d %d %p %d %p %p %p %p\n", phCredential, phContext,
      debugstr_w(pszTargetName), fContextReq, Reserved1, TargetDataRep, pInput,
@@ -891,6 +892,9 @@ static SECURITY_STATUS SEC_ENTRY schan_InitializeSecurityContextW(
 
     /* Perform the TLS handshake */
     ret = schan_imp_handshake(ctx->session);
+    if (ret != SEC_E_OK)
+        for (i = 0; i < pOutput->cBuffers; i++)
+            pOutput->pBuffers[i].cbBuffer = 0;
 
     if(transport.in.offset && transport.in.offset != pInput->pBuffers[0].cbBuffer) {
         if(pInput->cBuffers<2 || pInput->pBuffers[1].BufferType!=SECBUFFER_EMPTY)
diff --git a/dlls/secur32/tests/schannel.c b/dlls/secur32/tests/schannel.c
index e0d550c..b9718fd 100644
--- a/dlls/secur32/tests/schannel.c
+++ b/dlls/secur32/tests/schannel.c
@@ -699,8 +699,9 @@ static void test_communication(void)
             ISC_REQ_CONFIDENTIALITY|ISC_REQ_STREAM,
             0, 0, &buffers[1], 0, NULL, &buffers[0], &attrs, NULL);
     ok(status == SEC_E_INVALID_TOKEN, "Expected SEC_E_INVALID_TOKEN, got %08x\n", status);
-todo_wine
     ok(buffers[0].pBuffers[0].cbBuffer == 0, "Output buffer size was not set to 0.\n");
+    ok(buffers[0].pBuffers[0].pvBuffer != NULL, "Output buffer was set to NULL.\n");
+    ok(buffers[0].pBuffers[0].BufferType == SECBUFFER_TOKEN, "Output buffertype was set to %u\n", buffers[0].pBuffers[0].BufferType);
 
     status = pInitializeSecurityContextA(&cred_handle, &context, (SEC_CHAR *)"localhost",
             ISC_REQ_CONFIDENTIALITY|ISC_REQ_STREAM,
-- 
1.8.1.2



More information about the wine-patches mailing list