Add type removed function wrappers to resolve UB of calling function through pointer to incorrect function type.
Unified · Split
| @@ -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) \ |
| 51 | static av_cold void sha ## bits ##_init(void *ctx) \ | 51 | static 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) \ |
| 57 | static av_cold void sha ## bits ##_init(void *ctx) \ | 57 | static 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) \ | ||
| 63 | static void prefix##_update(void *ctx, const uint8_t *src, size_t len) \ | ||
| 64 | { \ | ||
| 65 | av_##prefix##_update(ctx, src, len); \ | ||
| 66 | } \ | ||
| 67 | static void prefix##_final(void *ctx, uint8_t *dst) \ | ||
| 68 | { \ | ||
| 69 | av_##prefix##_final(ctx, dst); \ | ||
| 60 | } | 70 | } |
| 61 | 71 | ||
| 62 | DEFINE_SHA(160) | 72 | DEFINE_ALGO_INIT(md5) |
| 63 | DEFINE_SHA(224) | 73 | DEFINE_ALGO_BITS_INIT(sha, 160) |
| 64 | DEFINE_SHA(256) | 74 | DEFINE_ALGO_BITS_INIT(sha, 224) |
| 65 | DEFINE_SHA512(384) | 75 | DEFINE_ALGO_BITS_INIT(sha, 256) |
| 66 | DEFINE_SHA512(512) | 76 | DEFINE_ALGO_BITS_INIT(sha512, 384) |
| 77 | DEFINE_ALGO_BITS_INIT(sha512, 512) | ||
| 78 | DEFINE_ALGO(md5) | ||
| 79 | DEFINE_ALGO(sha) | ||
| 80 | DEFINE_ALGO(sha512) | ||
| 67 | 81 | ||
| 68 | AVHMAC *av_hmac_alloc(enum AVHMACType type) | 82 | AVHMAC *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: |