History

avutil/hmac: avoid calling functions through pointer of invalid type

Add type removed function wrappers to resolve UB of calling function through pointer to incorrect function type.

Kacper Michajłow committed 1 year ago

Commit ce048771 parent 6f88b901 file · +41 −27Browse files

Unified · Split

libavutil/hmac.c+41−27
@@ -47,23 +47,37 @@ struct AVHMAC { · 46 unmodified lines
47 int keylen;47 int keylen;
48};48};
49 49
50#define DEFINE_SHA(bits) \50#define DEFINE_ALGO_BITS_INIT(prefix, bits) \
51static av_cold void sha ## bits ##_init(void *ctx) \51static av_cold void prefix##bits##_init(void *ctx) \
52{ \52{ \
53 av_sha_init(ctx, bits); \53 av_##prefix##_init(ctx, bits); \
54}54}
55 55
56#define DEFINE_SHA512(bits) \56#define DEFINE_ALGO_INIT(prefix) \
57static av_cold void sha ## bits ##_init(void *ctx) \57static av_cold void prefix##_init(void *ctx) \
58{ \58{ \
59 av_sha512_init(ctx, bits); \59 av_##prefix##_init(ctx); \
60}
61
62#define DEFINE_ALGO(prefix) \
63static void prefix##_update(void *ctx, const uint8_t *src, size_t len) \
64{ \
65 av_##prefix##_update(ctx, src, len); \
66} \
67static void prefix##_final(void *ctx, uint8_t *dst) \
68{ \
69 av_##prefix##_final(ctx, dst); \
60}70}
61 71
62DEFINE_SHA(160)72DEFINE_ALGO_INIT(md5)
63DEFINE_SHA(224)73DEFINE_ALGO_BITS_INIT(sha, 160)
64DEFINE_SHA(256)74DEFINE_ALGO_BITS_INIT(sha, 224)
65DEFINE_SHA512(384)75DEFINE_ALGO_BITS_INIT(sha, 256)
66DEFINE_SHA512(512)76DEFINE_ALGO_BITS_INIT(sha512, 384)
77DEFINE_ALGO_BITS_INIT(sha512, 512)
78DEFINE_ALGO(md5)
79DEFINE_ALGO(sha)
80DEFINE_ALGO(sha512)
67 81
68AVHMAC *av_hmac_alloc(enum AVHMACType type)82AVHMAC *av_hmac_alloc(enum AVHMACType type)
69{83{
@@ -74,49 +88,49 @@ AVHMAC *av_hmac_alloc(enum AVHMACType type) · 4 unmodified lines
74 case AV_HMAC_MD5:88 case AV_HMAC_MD5:
75 c->blocklen = 64;89 c->blocklen = 64;
76 c->hashlen = 16;90 c->hashlen = 16;
77 c->init = (hmac_init) av_md5_init;91 c->init = md5_init;
78 c->update = (hmac_update) av_md5_update;92 c->update = md5_update;
79 c->final = (hmac_final) av_md5_final;93 c->final = md5_final;
80 c->hash = av_md5_alloc();94 c->hash = av_md5_alloc();
81 break;95 break;
82 case AV_HMAC_SHA1:96 case AV_HMAC_SHA1:
83 c->blocklen = 64;97 c->blocklen = 64;
84 c->hashlen = 20;98 c->hashlen = 20;
85 c->init = sha160_init;99 c->init = sha160_init;
86 c->update = (hmac_update) av_sha_update;100 c->update = sha_update;
87 c->final = (hmac_final) av_sha_final;101 c->final = sha_final;
88 c->hash = av_sha_alloc();102 c->hash = av_sha_alloc();
89 break;103 break;
90 case AV_HMAC_SHA224:104 case AV_HMAC_SHA224:
91 c->blocklen = 64;105 c->blocklen = 64;
92 c->hashlen = 28;106 c->hashlen = 28;
93 c->init = sha224_init;107 c->init = sha224_init;
94 c->update = (hmac_update) av_sha_update;108 c->update = sha_update;
95 c->final = (hmac_final) av_sha_final;109 c->final = sha_final;
96 c->hash = av_sha_alloc();110 c->hash = av_sha_alloc();
97 break;111 break;
98 case AV_HMAC_SHA256:112 case AV_HMAC_SHA256:
99 c->blocklen = 64;113 c->blocklen = 64;
100 c->hashlen = 32;114 c->hashlen = 32;
101 c->init = sha256_init;115 c->init = sha256_init;
102 c->update = (hmac_update) av_sha_update;116 c->update = sha_update;
103 c->final = (hmac_final) av_sha_final;117 c->final = sha_final;
104 c->hash = av_sha_alloc();118 c->hash = av_sha_alloc();
105 break;119 break;
106 case AV_HMAC_SHA384:120 case AV_HMAC_SHA384:
107 c->blocklen = 128;121 c->blocklen = 128;
108 c->hashlen = 48;122 c->hashlen = 48;
109 c->init = sha384_init;123 c->init = sha512384_init;
110 c->update = (hmac_update) av_sha512_update;124 c->update = sha512_update;
111 c->final = (hmac_final) av_sha512_final;125 c->final = sha512_final;
112 c->hash = av_sha512_alloc();126 c->hash = av_sha512_alloc();
113 break;127 break;
114 case AV_HMAC_SHA512:128 case AV_HMAC_SHA512:
115 c->blocklen = 128;129 c->blocklen = 128;
116 c->hashlen = 64;130 c->hashlen = 64;
117 c->init = sha512_init;131 c->init = sha512512_init;
118 c->update = (hmac_update) av_sha512_update;132 c->update = sha512_update;
119 c->final = (hmac_final) av_sha512_final;133 c->final = sha512_final;
120 c->hash = av_sha512_alloc();134 c->hash = av_sha512_alloc();
121 break;135 break;
122 default:136 default:

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t