- digest_sspi: memory leak.
- digest_sspi: free buffers on `calloc()` fail.
(not detected by clang-tidy)
- schannel_verify: avoid a `NULL` `alt_name_info`.
- schannel: fix potential `NULL` deref for `backend->cred`.
- schannel: fix uninitialized result value.
Follow-up to
7f4c358541fdadcf29ba20bcdff71c5554e5f69c #3197
- schannel: drop unused assigment.
- tool_doswin: drop unused assigment.
- testutil: fix memory leak on error.
- testutil: fix memory leak on non-error.
(not detected by clang-tidy)
Cherry-picked from #16764
Closes #16777
/* Allocate our new context handle */
digest->http_context = calloc(1, sizeof(CtxtHandle));
- if(!digest->http_context)
+ if(!digest->http_context) {
+ curlx_unicodefree(spn);
+ Curl_sspi_free_identity(p_identity);
+ free(output_token);
return CURLE_OUT_OF_MEMORY;
+ }
/* Generate our response message */
status = Curl_pSecFn->InitializeSecurityContext(&credentials, NULL,
if(!backend->cred) {
char *snihost;
result = schannel_acquire_credential_handle(cf, data);
- if(result)
+ if(result || !backend->cred)
return result;
/* schannel_acquire_credential_handle() sets backend->cred accordingly or
it returns error otherwise. */
args.data = data;
args.idx = 0;
args.certs_count = certs_count;
+ args.result = CURLE_OK;
traverse_cert_store(ccert_context, add_cert_to_certinfo, &args);
result = args.result;
}
backend->encdata_offset),
size, err);
if(*err) {
- nread = -1;
if(*err == CURLE_AGAIN)
SCH_DEV(infof(data, "schannel: recv returned CURLE_AGAIN"));
else if(*err == CURLE_RECV_ERROR)
(void)Win8_compat;
#endif
+ if(!alt_name_info)
+ return 0;
+
compute_content = host_names != NULL && length != 0;
/* Initialize default return values. */
if(clip) {
*clip = '\0';
- len = clip - target;
}
}
size_t systemdirlen = GetSystemDirectory(NULL, 0);
size_t written;
TCHAR *path;
+ HMODULE module;
if(!filenamelen || filenamelen > 32768 ||
!systemdirlen || systemdirlen > 32768)
/* if written >= systemdirlen then nothing was written */
written = GetSystemDirectory(path, (unsigned int)systemdirlen);
- if(!written || written >= systemdirlen)
+ if(!written || written >= systemdirlen) {
+ free(path);
return NULL;
+ }
if(path[written - 1] != _T('\\'))
path[written++] = _T('\\');
_tcscpy(path + written, filename);
- return LoadLibrary(path);
+ module = LoadLibrary(path);
+
+ free(path);
+
+ return module;
#endif
}
#endif