summaryrefslogtreecommitdiffstats
path: root/net/miax/patches/034-iax-md5-drop-ancient-ifdef-for-uint32-and-use-uint32.patch
blob: 68c93f9be5b224453ca0f0bca200e792abbf1245 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
From f2570e2b81d295f52bc5cc6c30fa69fa565c7e42 Mon Sep 17 00:00:00 2001
From: Christian Marangi <ansuelsmth@gmail.com>
Date: Thu, 20 Nov 2025 11:32:02 +0100
Subject: [PATCH 3/3] iax: md5: drop ancient ifdef for uint32 and use uint32_t

Drop an ancient ifdef to handle different size of uint32 on alpha system
and use uinit32_t everywhere.

This was used back in ancient times to handle case where uinit32_t
wasn't 4 bytes.

This now actually cause errors on 64bit system where unsigned long is
actually 8 bytes producing wrong MD5 calculation.

This was spotted by compilation warning:

iax/md5.c: In function 'MD5Update':
iax/md5.c:107:9: warning: 'MD5Transform' reading 128 bytes from a region of size 64 [-Wstringop-overread]
  107 |         MD5Transform(ctx->buf, (uint32 *) ctx->in);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

that pointed out that we were reading 128 bytes from a region of 64
bytes (the .in value is unsigned char of 64 bytes and MD5Transform
expected 16 entry of 4 bytes).

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
---
 iax/md5.c | 26 +++++++++++++-------------
 iax/md5.h | 12 +++---------
 2 files changed, 16 insertions(+), 22 deletions(-)

--- a/iax/md5.c
+++ b/iax/md5.c
@@ -49,11 +49,11 @@ void byteReverse(unsigned char *buf, uns
  */
 void byteReverse(unsigned char *buf, unsigned longs)
 {
-    uint32 t;
+    uint32_t t;
     do {
-	t = (uint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
+	t = (uint32_t) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
 	    ((unsigned) buf[1] << 8 | buf[0]);
-	*(uint32 *) buf = t;
+	*(uint32_t *) buf = t;
 	buf += 4;
     } while (--longs);
 }
@@ -81,12 +81,12 @@ void MD5Init(struct MD5Context *ctx)
  */
 void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
 {
-    uint32 t;
+    uint32_t t;
 
     /* Update bitcount */
 
     t = ctx->bits[0];
-    if ((ctx->bits[0] = t + ((uint32) len << 3)) < t)
+    if ((ctx->bits[0] = t + ((uint32_t) len << 3)) < t)
 	ctx->bits[1]++;		/* Carry from low to high */
     ctx->bits[1] += len >> 29;
 
@@ -104,7 +104,7 @@ void MD5Update(struct MD5Context *ctx, u
 	}
 	memcpy(p, buf, t);
 	byteReverse(ctx->in, 16);
-	MD5Transform(ctx->buf, (uint32 *) ctx->in);
+	MD5Transform(ctx->buf, (uint32_t *) ctx->in);
 	buf += t;
 	len -= t;
     }
@@ -113,7 +113,7 @@ void MD5Update(struct MD5Context *ctx, u
     while (len >= 64) {
 	memcpy(ctx->in, buf, 64);
 	byteReverse(ctx->in, 16);
-	MD5Transform(ctx->buf, (uint32 *) ctx->in);
+	MD5Transform(ctx->buf, (uint32_t *) ctx->in);
 	buf += 64;
 	len -= 64;
     }
@@ -148,7 +148,7 @@ void MD5Final(unsigned char digest[16],
 	/* Two lots of padding:  Pad the first block to 64 bytes */
 	memset(p, 0, count);
 	byteReverse(ctx->in, 16);
-	MD5Transform(ctx->buf, (uint32 *) ctx->in);
+	MD5Transform(ctx->buf, (uint32_t *) ctx->in);
 
 	/* Now fill the next block with 56 bytes */
 	memset(ctx->in, 0, 56);
@@ -159,10 +159,10 @@ void MD5Final(unsigned char digest[16],
     byteReverse(ctx->in, 14);
 
     /* Append length in bits and transform */
-    ((uint32 *) ctx->in)[14] = ctx->bits[0];
-    ((uint32 *) ctx->in)[15] = ctx->bits[1];
+    ((uint32_t *) ctx->in)[14] = ctx->bits[0];
+    ((uint32_t *) ctx->in)[15] = ctx->bits[1];
 
-    MD5Transform(ctx->buf, (uint32 *) ctx->in);
+    MD5Transform(ctx->buf, (uint32_t *) ctx->in);
     byteReverse((unsigned char *) ctx->buf, 4);
     memcpy(digest, ctx->buf, 16);
     memset(ctx, 0, sizeof(ctx));	/* In case it's sensitive */
@@ -187,9 +187,9 @@ void MD5Final(unsigned char digest[16],
  * reflect the addition of 16 longwords of new data.  MD5Update blocks
  * the data and converts bytes into longwords for this routine.
  */
-void MD5Transform(uint32 buf[4], uint32 const in[16])
+void MD5Transform(uint32_t buf[4], uint32_t const in[16])
 {
-    register uint32 a, b, c, d;
+    register uint32_t a, b, c, d;
 
     a = buf[0];
     b = buf[1];
--- a/iax/md5.h
+++ b/iax/md5.h
@@ -1,15 +1,9 @@
 #ifndef MD5_H
 #define MD5_H
 
-#ifdef __alpha
-typedef unsigned int uint32;
-#else
-typedef unsigned long uint32;
-#endif
-
 struct MD5Context {
-	uint32 buf[4];
-	uint32 bits[2];
+	uint32_t buf[4];
+	uint32_t bits[2];
 	unsigned char in[64];
 };
 
@@ -17,7 +11,7 @@ void MD5Init(struct MD5Context *context)
 void MD5Update(struct MD5Context *context, unsigned char const *buf,
 	       unsigned len);
 void MD5Final(unsigned char digest[16], struct MD5Context *context);
-void MD5Transform(uint32 buf[4], uint32 const in[16]);
+void MD5Transform(uint32_t buf[4], uint32_t const in[16]);
 
 /*
  * This is needed to make RSAREF happy on some MS-DOS compilers.