mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-05 20:11:17 +00:00
stransport: do not use git_stream_free
on uninitialized stransport
When failing to initialize a new stransport stream, we try to release already allocated memory by calling out to `git_stream_free`, which in turn called out to the stream's `free` function pointer. As we only initialize the function pointer later on, this leads to a `NULL` pointer exception. Furthermore, plug another memory leak when failing to create the SSL context.
This commit is contained in:
parent
97e57e8770
commit
b989514405
@ -261,6 +261,7 @@ int git_stransport_stream_new(git_stream **out, const char *host, const char *po
|
|||||||
st->ctx = SSLCreateContext(NULL, kSSLClientSide, kSSLStreamType);
|
st->ctx = SSLCreateContext(NULL, kSSLClientSide, kSSLStreamType);
|
||||||
if (!st->ctx) {
|
if (!st->ctx) {
|
||||||
giterr_set(GITERR_NET, "failed to create SSL context");
|
giterr_set(GITERR_NET, "failed to create SSL context");
|
||||||
|
git__free(st);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,7 +271,8 @@ int git_stransport_stream_new(git_stream **out, const char *host, const char *po
|
|||||||
(ret = SSLSetProtocolVersionMin(st->ctx, kTLSProtocol1)) != noErr ||
|
(ret = SSLSetProtocolVersionMin(st->ctx, kTLSProtocol1)) != noErr ||
|
||||||
(ret = SSLSetProtocolVersionMax(st->ctx, kTLSProtocol12)) != noErr ||
|
(ret = SSLSetProtocolVersionMax(st->ctx, kTLSProtocol12)) != noErr ||
|
||||||
(ret = SSLSetPeerDomainName(st->ctx, host, strlen(host))) != noErr) {
|
(ret = SSLSetPeerDomainName(st->ctx, host, strlen(host))) != noErr) {
|
||||||
git_stream_free((git_stream *)st);
|
CFRelease(st->ctx);
|
||||||
|
git__free(st);
|
||||||
return stransport_error(ret);
|
return stransport_error(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user