svn commit: r1930987 - subversion/trunk/subversion/libsvn_subr

[email protected]
Newsgroups gmane.comp.version-control.subversion.svn
Message-ID <176711538683.993414.11584399642737608416@svn02-us-east.apache.org>
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;
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.