Damjan Jovanovic damjan.jov@gmail.com wrote:
+SECURITY_STATUS schan_imp_get_unique_channel_binding(schan_imp_session session,
SecPkgContext_Bindings *bindings)+{
- static const char prefix[] = "tls-unique:";
- gnutls_datum_t datum;
- int rc;
- SECURITY_STATUS ret;
- char *p;
- gnutls_session_t s = (gnutls_session_t)session;
- rc = pgnutls_session_channel_binding(s, GNUTLS_CB_TLS_UNIQUE, &datum);
- if (rc)
- {
pgnutls_perror(rc);ret = SEC_E_INTERNAL_ERROR;- }
- else
- {
bindings->BindingsLength = sizeof(SEC_CHANNEL_BINDINGS) + sizeof(prefix)-1 + datum.size;bindings->Bindings = heap_alloc_zero(bindings->BindingsLength);if (!bindings->Bindings)ret = SEC_E_INSUFFICIENT_MEMORY;else{bindings->Bindings->cbApplicationDataLength = sizeof(prefix)-1 + datum.size;bindings->Bindings->dwApplicationDataOffset = sizeof(SEC_CHANNEL_BINDINGS);p = (char*)(bindings->Bindings+1);memcpy(p, prefix, sizeof(prefix)-1);p += sizeof(prefix)-1;memcpy(p, datum.data, datum.size);ret = SEC_E_OK;}- }
- (*pgnutls_free)(datum.data);
- return ret;
+}
Does it make sense to call gnutls_free() if gnutls_session_channel_binding() fails? If not, then the indentation could be simplified to return right after the initial failure.