Author: brane
Date: Sun Jul 6 09:52:17 2025
New Revision: 1926988
URL: http://svn.apache.org/viewvc?rev=1926988&view=rev
Log:
Fix some more narrowing, unreachable-code and shadowing warnings.
* CMakeLists.txt, SConstruct: Add -Wshadow to the default warning options.
== Narrowing conversions ==
* buckets/ssl_buckets.c
(bio_bucket_read): ### Safe cast apr_size_t -> int
(bio_file_read): ### Safe cast apr_size_t -> int
(bio_file_write): ### Safe cast apr_size_t -> int
(serf_ssl_negotiate_protocol): ### Safe cast apr_size_t -> int
(ocsp_callback): Make 'len' a long, which is the type of the return value
from SSL_get_tlsext_status_ocsp_resp().
(ssl_decrypt): Add an int 'ssl_bufsize' with a checked conversion from
the apr_size_t 'bufsize', whos type can not be changed because it's a
callback type parameter.
(ssl_encrypt): The 'interim_len' is initializef from an int, so it may
as well be an int, too.
(serf_ssl_ocsp_request_t): Change 'der_request_size' to an int. It is
initialized from an int and never changed, and used in contexts that
expect an int.
(serf_ssl_ocsp_request_imp): Change 'der_request_size' and 'der_id_size'
to int, for similar reasons. The apr_base64 code uses int sizes, not
apr_size_t sizes.
== Unreachable code ==
* buckets/ssl_buckets.c
(serf_ssl_set_hostname): Return APR_ENOTIMPL from an #else branch of the
#ifdef. While not strictly necessary, it avoids confusion.
(serf_ssl_check_cert_status_request): Likewise.
(serf_ssl_use_compression): Likewise. Before this change it returned
APR_EGENERAL, but APR_ENOTIMPL is more appropriate.
== Variable shadowing ==
* buckets/ssl_buckets.c
(ssl_need_client_cert): Rename 'c' to 'x509'. It was shadowed by another
'c' of the same type, at line 1706. This was not actually a bug, since
'x509' is only initialized after 'c' goes out of scope, but it's still
confusing. Also shows why one shouldn't write 1000-line functions.
* test/serf_get.c (main),
test/serf_httpd.c (main): Remove second declarations of 'status'.
Modified:
serf/trunk/CMakeLists.txt
serf/trunk/SConstruct
serf/trunk/buckets/ssl_buckets.c
serf/trunk/test/serf_get.c
serf/trunk/test/serf_httpd.c
Modified: serf/trunk/CMakeLists.txt
URL:
http://svn.apache.org/viewvc/serf/trunk/CMakeLists.txt?rev=1926988&r1=1926987&r2=1926988&view=diff
==============================================================================
--- serf/trunk/CMakeLists.txt (original)
+++ serf/trunk/CMakeLists.txt Sun Jul 6 09:52:17 2025
@@ -365,6 +365,7 @@ if(NOT MSVC)
list(APPEND SERF_C_WARNINGS "-Wall")
list(APPEND SERF_C_WARNINGS "-Wdeclaration-after-statement")
list(APPEND SERF_C_WARNINGS "-Wmissing-prototypes")
+ list(APPEND SERF_C_WARNINGS "-Wshadow")
string(APPEND CMAKE_C_FLAGS_DEBUG " -O0")
Modified: serf/trunk/SConstruct
URL:
http://svn.apache.org/viewvc/serf/trunk/SConstruct?rev=1926988&r1=1926987&r2=1926988&view=diff
==============================================================================
--- serf/trunk/SConstruct (original)
+++ serf/trunk/SConstruct Sun Jul 6 09:52:17 2025
@@ -361,6 +361,7 @@ if sys.platform != 'win32':
env.SerfAppendIf(['CFLAGS'], r'-(ansi|std=c\d+)', CFLAGS=['-std=c89'])
env.Append(CCFLAGS=['-Wdeclaration-after-statement',
'-Wmissing-prototypes',
+ '-Wshadow',
'-Wall'])
if debug:
Modified: serf/trunk/buckets/ssl_buckets.c
URL:
http://svn.apache.org/viewvc/serf/trunk/buckets/ssl_buckets.c?rev=1926988&r1=1926987&r2=1926988&view=diff
==============================================================================
--- serf/trunk/buckets/ssl_buckets.c (original)
+++ serf/trunk/buckets/ssl_buckets.c Sun Jul 6 09:52:17 2025
@@ -430,7 +430,9 @@ static int bio_bucket_read(BIO *bio, cha
"bio_bucket_read received %"APR_SIZE_T_FMT" bytes (%d)\n", len,
status);
memcpy(in, data, len);
- return len;
+
+ /* Safe cast: len <= inlen */
+ return (int)len;
}
/* Returns the amount written. */
@@ -476,7 +478,8 @@ static int bio_file_read(BIO *bio, char
if (APR_STATUS_IS_EOF(status)) {
return -1;
} else {
- return len;
+ /* Safe cast: len <= inlen */
+ return (int)len;
}
}
@@ -494,7 +497,8 @@ static int bio_file_write(BIO *bio, cons
nbytes = inl;
apr_file_write(file, in, &nbytes);
- return nbytes;
+ /* Safe cast: nbytes <= inlen */
+ return (int)nbytes;
}
static int bio_file_gets(BIO *bio, char *in, int inlen)
@@ -694,7 +698,7 @@ static int ocsp_callback(SSL *ssl, void
serf_ssl_context_t *ctx = (serf_ssl_context_t*)baton;
OCSP_RESPONSE *response;
const unsigned char *resp_der;
- int len;
+ long len;
int failures = 0;
int cert_valid = 0;
@@ -1154,7 +1158,7 @@ static apr_status_t ssl_decrypt(void *ba
{
serf_ssl_context_t *ctx = baton;
apr_status_t status;
- int ssl_len;
+ int ssl_len, ssl_bufsize;
if (ctx->fatal_err)
return ctx->fatal_err;
@@ -1171,8 +1175,9 @@ static apr_status_t ssl_decrypt(void *ba
}
}
+ SERF__POSITIVE_TO_INT(ssl_bufsize, apr_size_t, bufsize);
serf__log(LOGLVL_DEBUG, LOGCOMP_SSL, __FILE__, ctx->config,
- "ssl_decrypt: begin %" APR_SIZE_T_FMT "\n", bufsize);
+ "ssl_decrypt: begin %d\n", ssl_bufsize);
ctx->want_read = FALSE; /* Reading now */
ctx->crypt_status = APR_SUCCESS; /* Clear before calling SSL */
@@ -1184,7 +1189,7 @@ static apr_status_t ssl_decrypt(void *ba
Luckily we can assume that we are called from the databuffer
implementation */
/* Is there some data waiting to be read? */
- ssl_len = SSL_read(ctx->ssl, buf, bufsize);
+ ssl_len = SSL_read(ctx->ssl, buf, ssl_bufsize);
if (ssl_len < 0) {
*len = 0;
@@ -1218,7 +1223,7 @@ static apr_status_t ssl_decrypt(void *ba
*len = ssl_len;
status = ctx->crypt_status;
serf__log(LOGLVL_DEBUG, LOGCOMP_SSLMSG, __FILE__, ctx->config,
- "---\n%.*s\n-(%"APR_SIZE_T_FMT")-\n", (int)*len, buf, *len);
+ "---\n%.*s\n-(%"APR_SIZE_T_FMT")-\n", ssl_len, buf, *len);
}
@@ -1315,7 +1320,7 @@ static apr_status_t ssl_encrypt(void *ba
/* Oh well, read from our stream now. */
interim_bufsize = bufsize;
do {
- apr_size_t interim_len;
+ int interim_len;
if (!ctx->want_read) {
struct iovec vecs[SERF__STD_IOV_COUNT];
@@ -1351,7 +1356,7 @@ static apr_status_t ssl_encrypt(void *ba
interim_len = vecs_data_len;
serf__log(LOGLVL_DEBUG, LOGCOMP_SSL, __FILE__, ctx->config,
- "ssl_encrypt: bucket read %"APR_SIZE_T_FMT" bytes; "\
+ "ssl_encrypt: bucket read %d bytes; "\
"status %d\n", interim_len, status);
/* When an SSL_write() operation has to be repeated because of
@@ -1386,8 +1391,8 @@ static apr_status_t ssl_encrypt(void *ba
serf_bucket_mem_free(ctx->allocator, vecs_data);
serf__log(LOGLVL_DEBUG, LOGCOMP_SSL, __FILE__, ctx->config,
- "---\n%.*s\n-(%"APR_SIZE_T_FMT")-\n",
- (int)interim_len, vecs_data, interim_len);
+ "---\n%.*s\n-(%d)-\n",
+ interim_len, vecs_data, interim_len);
}
}
@@ -1641,7 +1646,7 @@ static int ssl_need_client_cert(SSL *ssl
const char *cert_uri = NULL;
OSSL_STORE_CTX *store = NULL;
OSSL_STORE_INFO *info;
- X509 *c;
+ X509 *x509;
STACK_OF(X509_NAME) *requested;
int type;
@@ -1747,7 +1752,7 @@ static int ssl_need_client_cert(SSL *ssl
/* walk the leaf certificates, choose the best one */
- while ((c = sk_X509_pop(leaves))) {
+ while ((x509 = sk_X509_pop(leaves))) {
EVP_PKEY *k = NULL;
int i, n, found = 0;
@@ -1756,7 +1761,7 @@ static int ssl_need_client_cert(SSL *ssl
n = sk_EVP_PKEY_num(keys);
for (i = 0; i < n; ++i) {
k = sk_EVP_PKEY_value(keys, i);
- if (X509_check_private_key(c, k)) {
+ if (X509_check_private_key(x509, k)) {
found = 1;
break;
}
@@ -1767,10 +1772,10 @@ static int ssl_need_client_cert(SSL *ssl
/* CAs requested? if so, skip non matches, if not, accept all */
if (sk_X509_NAME_num(requested) &&
- !X509_get_ex_data(c, ssl_x509_ex_data_idx)) {
+ !X509_get_ex_data(x509, ssl_x509_ex_data_idx)) {
STACK_OF(X509) *chain;
- chain = X509_build_chain(c, intermediates, requests, 0, NULL,
+ chain = X509_build_chain(x509, intermediates, requests, 0,
NULL,
NULL);
if (!chain) {
@@ -1783,23 +1788,23 @@ static int ssl_need_client_cert(SSL *ssl
/* no best candidate yet? we're in first place */
if (!*cert) {
EVP_PKEY_up_ref(k);
- *cert = c; /* don't dup, we're returning this */
+ *cert = x509; /* don't dup, we're returning this */
*pkey = k;
continue;
}
/* were we issued after the previous best? */
if (ASN1_TIME_compare(X509_get0_notBefore(*cert),
- X509_get0_notBefore(c)) < 0) {
+ X509_get0_notBefore(x509)) < 0) {
X509_free(*cert);
EVP_PKEY_free(*pkey);
EVP_PKEY_up_ref(k);
- *cert = c; /* don't dup, we're returning this */
+ *cert = x509; /* don't dup, we're returning this */
*pkey = k;
continue;
}
- X509_free(c);
+ X509_free(x509);
}
break;
@@ -2243,8 +2248,9 @@ apr_status_t serf_ssl_set_hostname(serf_
ERR_clear_error();
}
return APR_SUCCESS;
-#endif
+#else
return APR_ENOTIMPL;
+#endif
}
apr_status_t serf_ssl_negotiate_protocol(serf_ssl_context_t *context,
@@ -2297,7 +2303,8 @@ apr_status_t serf_ssl_negotiate_protocol
at += len;
#ifdef SERF_HAVE_OPENSSL_ALPN
- if (SSL_set_alpn_protos(context->ssl, raw_header, raw_len)) {
+ /* Safe cast: raw_len < 65536 therefore raw_len <= INT_MAX */
+ if (SSL_set_alpn_protos(context->ssl, raw_header, (int)raw_len)) {
ERR_clear_error();
}
apr_pool_destroy(subpool);
@@ -2482,8 +2489,9 @@ serf_ssl_check_cert_status_request(serf_
SSL_CTX_set_tlsext_status_arg(ssl_ctx->ctx, ssl_ctx);
SSL_set_tlsext_status_type(ssl_ctx->ssl, TLSEXT_STATUSTYPE_ocsp);
return APR_SUCCESS;
-#endif
+#else
return APR_ENOTIMPL;
+#endif
}
serf_bucket_t *serf_bucket_ssl_decrypt_create(
@@ -2848,19 +2856,17 @@ static void disable_compression(serf_ssl
apr_status_t serf_ssl_use_compression(serf_ssl_context_t *ssl_ctx, int enabled)
{
- if (enabled) {
#ifdef SSL_OP_NO_COMPRESSION
+ if (enabled) {
SSL_clear_options(ssl_ctx->ssl, SSL_OP_NO_COMPRESSION);
return APR_SUCCESS;
-#endif
} else {
-#ifdef SSL_OP_NO_COMPRESSION
SSL_set_options(ssl_ctx->ssl, SSL_OP_NO_COMPRESSION);
return APR_SUCCESS;
-#endif
}
-
- return APR_EGENERAL;
+#else
+ return APR_ENOTIMPL;
+#endif
}
static void serf_ssl_destroy_and_data(serf_bucket_t *bucket)
@@ -3033,7 +3039,7 @@ struct serf_ssl_ocsp_request_t {
/* DER-encoded request and size. */
const void *der_request;
- apr_size_t der_request_size;
+ int der_request_size;
};
static apr_status_t free_ocsp_request(void *data)
@@ -3216,8 +3222,8 @@ serf_ssl_ocsp_request_t *serf_ssl_ocsp_r
const char *base64_request = apr_pstrmemdup(
scratch_pool, encoded_ocsp_request,
end_request - encoded_ocsp_request);
- long der_request_size = apr_base64_decode_len(base64_request);
- long der_id_size = apr_base64_decode_len(base64_id);
+ int der_request_size = apr_base64_decode_len(base64_request);
+ int der_id_size = apr_base64_decode_len(base64_id);
OCSP_REQUEST *ocsp_req;
OCSP_CERTID *cert_id;
Modified: serf/trunk/test/serf_get.c
URL:
http://svn.apache.org/viewvc/serf/trunk/test/serf_get.c?rev=1926988&r1=1926987&r2=1926988&view=diff
==============================================================================
--- serf/trunk/test/serf_get.c (original)
+++ serf/trunk/test/serf_get.c Sun Jul 6 09:52:17 2025
@@ -231,8 +231,8 @@ static apr_status_t conn_setup(apr_socke
if (!conn_ctx->ssl_ctx) {
conn_ctx->ssl_ctx = serf_bucket_ssl_decrypt_context_get(c);
}
- serf_ssl_server_cert_chain_callback_set(conn_ctx->ssl_ctx,
- ignore_all_cert_errors,
+ serf_ssl_server_cert_chain_callback_set(conn_ctx->ssl_ctx,
+ ignore_all_cert_errors,
print_certs, NULL);
serf_ssl_set_hostname(conn_ctx->ssl_ctx, ctx->hostname);
@@ -407,7 +407,7 @@ static apr_status_t setup_request(serf_r
*acceptor_baton = ctx->acceptor_baton;
*handler = ctx->handler;
*handler_baton = ctx;
-
+
return APR_SUCCESS;
}
@@ -816,7 +816,6 @@ int main(int argc, const char **argv)
if (debug)
{
serf_log_output_t *output;
- apr_status_t status;
status = serf_logging_create_stream_output(&output,
context,
Modified: serf/trunk/test/serf_httpd.c
URL:
http://svn.apache.org/viewvc/serf/trunk/test/serf_httpd.c?rev=1926988&r1=1926987&r2=1926988&view=diff
==============================================================================
--- serf/trunk/test/serf_httpd.c (original)
+++ serf/trunk/test/serf_httpd.c Sun Jul 6 09:52:17 2025
@@ -461,7 +461,6 @@ int main(int argc, const char **argv)
/* Setup debug logging */
if (verbose) {
serf_log_output_t *output;
- apr_status_t status;
apr_uint32_t level;
level = SERF_LOG_WARNING;