4242#define GIT_SSL_DEFAULT_CIPHERS "TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-DSS-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-DSS-WITH-AES-256-GCM-SHA384:TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256:TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256:TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA:TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA:TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384:TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384:TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA:TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-AES-256-CBC-SHA:TLS-DHE-DSS-WITH-AES-128-CBC-SHA256:TLS-DHE-DSS-WITH-AES-256-CBC-SHA256:TLS-DHE-DSS-WITH-AES-128-CBC-SHA:TLS-DHE-DSS-WITH-AES-256-CBC-SHA:TLS-RSA-WITH-AES-128-GCM-SHA256:TLS-RSA-WITH-AES-256-GCM-SHA384:TLS-RSA-WITH-AES-128-CBC-SHA256:TLS-RSA-WITH-AES-256-CBC-SHA256:TLS-RSA-WITH-AES-128-CBC-SHA:TLS-RSA-WITH-AES-256-CBC-SHA"
4343#define GIT_SSL_DEFAULT_CIPHERS_COUNT 30
4444
45- mbedtls_ssl_config * git__ssl_conf ;
45+ static mbedtls_ssl_config * git__ssl_conf ;
4646static int ciphers_list [GIT_SSL_DEFAULT_CIPHERS_COUNT ];
47- mbedtls_entropy_context * mbedtls_entropy ;
47+ static mbedtls_entropy_context * mbedtls_entropy ;
4848
4949/**
5050 * This function aims to clean-up the SSL context which
@@ -166,18 +166,16 @@ int git_mbedtls_stream_global_init(void)
166166 return -1 ;
167167}
168168
169- mbedtls_ssl_config * git__ssl_conf ;
170-
171169static int bio_read (void * b , unsigned char * buf , size_t len )
172170{
173171 git_stream * io = (git_stream * ) b ;
174- return (int ) git_stream_read (io , buf , len );
172+ return (int ) git_stream_read (io , buf , min ( len , INT_MAX ) );
175173}
176174
177175static int bio_write (void * b , const unsigned char * buf , size_t len )
178176{
179177 git_stream * io = (git_stream * ) b ;
180- return (int ) git_stream_write (io , (const char * )buf , len , 0 );
178+ return (int ) git_stream_write (io , (const char * )buf , min ( len , INT_MAX ) , 0 );
181179}
182180
183181static int ssl_set_error (mbedtls_ssl_context * ssl , int error )
@@ -246,7 +244,7 @@ typedef struct {
246244} mbedtls_stream ;
247245
248246
249- int mbedtls_connect (git_stream * stream )
247+ static int mbedtls_connect (git_stream * stream )
250248{
251249 int ret ;
252250 mbedtls_stream * st = (mbedtls_stream * ) stream ;
@@ -266,7 +264,7 @@ int mbedtls_connect(git_stream *stream)
266264 return verify_server_cert (st -> ssl );
267265}
268266
269- int mbedtls_certificate (git_cert * * out , git_stream * stream )
267+ static int mbedtls_certificate (git_cert * * out , git_stream * stream )
270268{
271269 unsigned char * encoded_cert ;
272270 mbedtls_stream * st = (mbedtls_stream * ) stream ;
@@ -303,25 +301,27 @@ static int mbedtls_set_proxy(git_stream *stream, const git_proxy_options *proxy_
303301 return git_stream_set_proxy (st -> io , proxy_options );
304302}
305303
306- ssize_t mbedtls_stream_write (git_stream * stream , const char * data , size_t data_len , int flags )
304+ static ssize_t mbedtls_stream_write (git_stream * stream , const char * data , size_t len , int flags )
307305{
308- ssize_t written = 0 , len = min (data_len , SSIZE_MAX );
309306 mbedtls_stream * st = (mbedtls_stream * ) stream ;
307+ int written ;
310308
311309 GIT_UNUSED (flags );
312310
313- do {
314- int error = mbedtls_ssl_write (st -> ssl , (const unsigned char * )data + written , len - written );
315- if (error <= 0 ) {
316- return ssl_set_error (st -> ssl , error );
317- }
318- written += error ;
319- } while (written < len );
311+ /*
312+ * `mbedtls_ssl_write` can only represent INT_MAX bytes
313+ * written via its return value. We thus need to clamp
314+ * the maximum number of bytes written.
315+ */
316+ len = min (len , INT_MAX );
317+
318+ if ((written = mbedtls_ssl_write (st -> ssl , (const unsigned char * )data , len )) <= 0 )
319+ return ssl_set_error (st -> ssl , written );
320320
321321 return written ;
322322}
323323
324- ssize_t mbedtls_stream_read (git_stream * stream , void * data , size_t len )
324+ static ssize_t mbedtls_stream_read (git_stream * stream , void * data , size_t len )
325325{
326326 mbedtls_stream * st = (mbedtls_stream * ) stream ;
327327 int ret ;
@@ -332,7 +332,7 @@ ssize_t mbedtls_stream_read(git_stream *stream, void *data, size_t len)
332332 return ret ;
333333}
334334
335- int mbedtls_stream_close (git_stream * stream )
335+ static int mbedtls_stream_close (git_stream * stream )
336336{
337337 mbedtls_stream * st = (mbedtls_stream * ) stream ;
338338 int ret = 0 ;
@@ -345,7 +345,7 @@ int mbedtls_stream_close(git_stream *stream)
345345 return st -> owned ? git_stream_close (st -> io ) : 0 ;
346346}
347347
348- void mbedtls_stream_free (git_stream * stream )
348+ static void mbedtls_stream_free (git_stream * stream )
349349{
350350 mbedtls_stream * st = (mbedtls_stream * ) stream ;
351351
0 commit comments