|
| 1 | +From 0f869da21f79bd15435418f32fa51f3f7ca86743 Mon Sep 17 00:00:00 2001 |
| 2 | +From: Daniel McCarney <daniel@binaryparadox.net> |
| 3 | +Date: Thu, 6 Feb 2025 10:59:39 -0500 |
| 4 | +Subject: [PATCH] tls_cache: fix implicit conversion err on i386/i686 |
| 5 | + |
| 6 | +Previously on arch's where `apr_ssize_t` is an `int` (e.g. i386) the |
| 7 | +`tls_cache_get()` function produced an implicit conversion error of the |
| 8 | +form: |
| 9 | +
|
| 10 | +``` |
| 11 | +error: implicit conversion changes signedness: 'unsigned int' to 'apr_ssize_t' (aka 'int') |
| 12 | +``` |
| 13 | + |
| 14 | +This commit resolves this error by: |
| 15 | + |
| 16 | +1. Checking the two casts performed by this function are within the |
| 17 | + range of the types being cast to. |
| 18 | +2. Making the cast to `apr_ssize_t` explicit. |
| 19 | +--- |
| 20 | + src/tls_cache.c | 6 +++++- |
| 21 | + 1 file changed, 5 insertions(+), 1 deletion(-) |
| 22 | + |
| 23 | +diff --git a/src/tls_cache.c b/src/tls_cache.c |
| 24 | +index 5fc874f..428a59e 100644 |
| 25 | +--- src/tls_cache.c.orig |
| 26 | ++++ src/tls_cache.c |
| 27 | +@@ -231,6 +231,10 @@ static rustls_result tls_cache_get( |
| 28 | + unsigned int vlen, klen; |
| 29 | + const unsigned char *kdata; |
| 30 | + |
| 31 | ++ if (key->len > UINT_MAX || key->len > SSIZE_MAX) { |
| 32 | ++ return RUSTLS_RESULT_INVALID_PARAMETER; |
| 33 | ++ } |
| 34 | ++ |
| 35 | + if (!sc->global->session_cache) goto not_found; |
| 36 | + tls_cache_lock(sc->global); |
| 37 | + |
| 38 | +@@ -241,7 +245,7 @@ static rustls_result tls_cache_get( |
| 39 | + sc->global->session_cache, cc->server, kdata, klen, buf, &vlen, c->pool); |
| 40 | + |
| 41 | + if (APLOGctrace4(c)) { |
| 42 | +- apr_ssize_t n = klen; |
| 43 | ++ apr_ssize_t n = (apr_ssize_t) klen; |
| 44 | + ap_log_cerror(APLOG_MARK, APLOG_TRACE4, rv, c, "retrieve key %d[%8x], found %d val", |
| 45 | + klen, apr_hashfunc_default((const char*)kdata, &n), vlen); |
| 46 | + } |
0 commit comments