Author: rinrab
Date: Tue Dec 30 17:23:05 2025
New Revision: 1930987
Log:
Bound checksum contexts of APR and OpenSSL into redeclared
svn_checksum__md5_ctx_t and svn_checksum__sha1_ctx_t structures to prevent
casting contexts.
This should not change the layout as they are stored in memory.
* subversion/libsvn_subr/checksum_apr.c
* subversion/libsvn_subr/checksum_openssl.c
(svn_checksum__md5_ctx_t, svn_checksum__sha1_ctx_t): Declare structs.
(svn_checksum__md5_ctx_create, svn_checksum__sha1_ctx_create): Allocate
contexts directly and remove cast.
(svn_checksum__md5_ctx_reset, svn_checksum__md5_ctx_update,
svn_checksum__md5_ctx_final, svn_checksum__sha1_ctx_reset,
svn_checksum__sha1_ctx_update, svn_checksum__sha1_ctx_final): Take
implementation-specific context from a field as a reference.
Modified:
subversion/trunk/subversion/libsvn_subr/checksum_apr.c
subversion/trunk/subversion/libsvn_subr/checksum_openssl.c
Modified: subversion/trunk/subversion/libsvn_subr/checksum_apr.c
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/checksum_apr.c Tue Dec 30
17:03:47 2025 (r1930986)
+++ subversion/trunk/subversion/libsvn_subr/checksum_apr.c Tue Dec 30
17:23:05 2025 (r1930987)
@@ -43,20 +43,24 @@ svn_checksum__md5(unsigned char *digest,
return SVN_NO_ERROR;
}
+struct svn_checksum__md5_ctx_t
+{
+ apr_md5_ctx_t apr_ctx;
+};
+
svn_checksum__md5_ctx_t *
svn_checksum__md5_ctx_create(apr_pool_t *pool)
{
- apr_md5_ctx_t *result = apr_palloc(pool, sizeof(*result));
- apr_md5_init(result);
- return (svn_checksum__md5_ctx_t *)result;
+ svn_checksum__md5_ctx_t *result = apr_palloc(pool, sizeof(*result));
+ apr_md5_init(&result->apr_ctx);
+ return result;
}
svn_error_t *
svn_checksum__md5_ctx_reset(svn_checksum__md5_ctx_t *ctx)
{
- apr_md5_ctx_t *apr_ctx = (apr_md5_ctx_t *)ctx;
- memset(apr_ctx, 0, sizeof(*apr_ctx));
- apr_md5_init(apr_ctx);
+ memset(ctx, 0, sizeof(*ctx));
+ apr_md5_init(&ctx->apr_ctx);
return SVN_NO_ERROR;
}
@@ -65,8 +69,7 @@ svn_checksum__md5_ctx_update(svn_checksu
const void *data,
apr_size_t len)
{
- apr_md5_ctx_t *apr_ctx = (apr_md5_ctx_t *)ctx;
- apr_md5_update(apr_ctx, data, len);
+ apr_md5_update(&ctx->apr_ctx, data, len);
return SVN_NO_ERROR;
}
@@ -74,9 +77,7 @@ svn_error_t *
svn_checksum__md5_ctx_final(unsigned char *digest,
svn_checksum__md5_ctx_t *ctx)
{
-
- apr_md5_ctx_t *apr_ctx = (apr_md5_ctx_t *)ctx;
- apr_md5_final(digest, apr_ctx);
+ apr_md5_final(digest, &ctx->apr_ctx);
return SVN_NO_ERROR;
}
@@ -94,20 +95,24 @@ svn_checksum__sha1(unsigned char *digest
return SVN_NO_ERROR;
}
+struct svn_checksum__sha1_ctx_t
+{
+ apr_sha1_ctx_t apr_ctx;
+};
+
svn_checksum__sha1_ctx_t *
svn_checksum__sha1_ctx_create(apr_pool_t *pool)
{
- apr_sha1_ctx_t *result = apr_palloc(pool, sizeof(*result));
- apr_sha1_init(result);
+ svn_checksum__sha1_ctx_t *result = apr_palloc(pool, sizeof(*result));
+ apr_sha1_init(&result->apr_ctx);
return (svn_checksum__sha1_ctx_t *)result;
}
svn_error_t *
svn_checksum__sha1_ctx_reset(svn_checksum__sha1_ctx_t *ctx)
{
- apr_sha1_ctx_t *apr_ctx = (apr_sha1_ctx_t *)ctx;
- memset(apr_ctx, 0, sizeof(*apr_ctx));
- apr_sha1_init(apr_ctx);
+ memset(ctx, 0, sizeof(*ctx));
+ apr_sha1_init(&ctx->apr_ctx);
return SVN_NO_ERROR;
}
@@ -116,8 +121,7 @@ svn_checksum__sha1_ctx_update(svn_checks
const void *data,
apr_size_t len)
{
- apr_sha1_ctx_t *apr_ctx = (apr_sha1_ctx_t *)ctx;
- apr_sha1_update(apr_ctx, data, len);
+ apr_sha1_update(&ctx->apr_ctx, data, len);
return SVN_NO_ERROR;
}
@@ -126,8 +130,7 @@ svn_checksum__sha1_ctx_final(unsigned ch
svn_checksum__sha1_ctx_t *ctx)
{
- apr_sha1_ctx_t *apr_ctx = (apr_sha1_ctx_t *)ctx;
- apr_sha1_final(digest, apr_ctx);
+ apr_sha1_final(digest, &ctx->apr_ctx);
return SVN_NO_ERROR;
}
Modified: subversion/trunk/subversion/libsvn_subr/checksum_openssl.c
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/checksum_openssl.c Tue Dec 30
17:03:47 2025 (r1930986)
+++ subversion/trunk/subversion/libsvn_subr/checksum_openssl.c Tue Dec 30
17:23:05 2025 (r1930987)
@@ -66,20 +66,24 @@ svn_checksum__md5(unsigned char *digest,
return SVN_NO_ERROR;
}
+struct svn_checksum__md5_ctx_t
+{
+ MD5_CTX md5_ctx;
+};
+
svn_checksum__md5_ctx_t *
svn_checksum__md5_ctx_create(apr_pool_t *pool)
{
- MD5_CTX *result = apr_palloc(pool, sizeof(*result));
- MD5_Init(result);
- return (svn_checksum__md5_ctx_t *)result;
+ svn_checksum__md5_ctx_t *result = apr_palloc(pool, sizeof(*result));
+ MD5_Init(&result->md5_ctx);
+ return result;
}
svn_error_t *
svn_checksum__md5_ctx_reset(svn_checksum__md5_ctx_t *ctx)
{
- MD5_CTX *md5_ctx = (MD5_CTX *)ctx;
- memset(md5_ctx, 0, sizeof(*md5_ctx));
- MD5_Init(md5_ctx);
+ memset(ctx, 0, sizeof(*ctx));
+ MD5_Init(&ctx->md5_ctx);
return SVN_NO_ERROR;
}
@@ -88,8 +92,7 @@ svn_checksum__md5_ctx_update(svn_checksu
const void *data,
apr_size_t len)
{
- MD5_CTX *md5_ctx = (MD5_CTX *)ctx;
- MD5_Update(md5_ctx, data, len);
+ MD5_Update(&ctx->md5_ctx, data, len);
return SVN_NO_ERROR;
}
@@ -97,8 +100,7 @@ svn_error_t *
svn_checksum__md5_ctx_final(unsigned char *digest,
svn_checksum__md5_ctx_t *ctx)
{
- MD5_CTX *md5_ctx = (MD5_CTX *)ctx;
- MD5_Final(digest, md5_ctx);
+ MD5_Final(digest, &ctx->md5_ctx);
return SVN_NO_ERROR;
}
@@ -118,20 +120,24 @@ svn_checksum__sha1(unsigned char *digest
return SVN_NO_ERROR;
}
+struct svn_checksum__sha1_ctx_t
+{
+ SHA_CTX sha_ctx;
+};
+
svn_checksum__sha1_ctx_t *
svn_checksum__sha1_ctx_create(apr_pool_t *pool)
{
- SHA_CTX *result = apr_palloc(pool, sizeof(*result));
- SHA1_Init(result);
- return (svn_checksum__sha1_ctx_t *)result;
+ svn_checksum__sha1_ctx_t *result = apr_palloc(pool, sizeof(*result));
+ SHA1_Init(&result->sha_ctx);
+ return result;
}
svn_error_t *
svn_checksum__sha1_ctx_reset(svn_checksum__sha1_ctx_t *ctx)
{
- SHA_CTX *sha_ctx = (SHA_CTX *)ctx;
- memset(sha_ctx, 0, sizeof(*sha_ctx));
- SHA1_Init(sha_ctx);
+ memset(ctx, 0, sizeof(*ctx));
+ SHA1_Init(&ctx->sha_ctx);
return SVN_NO_ERROR;
}
@@ -140,8 +146,7 @@ svn_checksum__sha1_ctx_update(svn_checks
const void *data,
apr_size_t len)
{
- SHA_CTX *sha_ctx = (SHA_CTX *)ctx;
- SHA1_Update(sha_ctx, data, len);
+ SHA1_Update(&ctx->sha_ctx, data, len);
return SVN_NO_ERROR;
}
@@ -150,8 +155,7 @@ svn_checksum__sha1_ctx_final(unsigned ch
svn_checksum__sha1_ctx_t *ctx)
{
- SHA_CTX *sha_ctx = (SHA_CTX *)ctx;
- SHA1_Final(digest, sha_ctx);
+ SHA1_Final(digest, &ctx->sha_ctx);
return SVN_NO_ERROR;
}