[FFmpeg-devel] [PATCH] Add tests for functions in hash.c
James Almer
jamrial at gmail.com
Mon Mar 7 06:45:06 CET 2016
On 3/7/2016 12:26 AM, NagaChaitanya Vellanki wrote:
> ---
> libavutil/Makefile | 1 +
> libavutil/hash.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
> tests/fate/libavutil.mak | 4 ++++
> tests/ref/fate/hash | 45 +++++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 95 insertions(+)
> create mode 100644 tests/ref/fate/hash
>
> diff --git a/libavutil/Makefile b/libavutil/Makefile
> index 934564f..58df75a 100644
> --- a/libavutil/Makefile
> +++ b/libavutil/Makefile
> @@ -186,6 +186,7 @@ TESTPROGS = adler32 \
> file \
> fifo \
> float_dsp \
> + hash \
> hmac \
> lfg \
> lls \
> diff --git a/libavutil/hash.c b/libavutil/hash.c
> index 7037b0d..ac35e88 100644
> --- a/libavutil/hash.c
> +++ b/libavutil/hash.c
> @@ -237,3 +237,48 @@ void av_hash_freep(AVHashContext **ctx)
> av_freep(&(*ctx)->ctx);
> av_freep(ctx);
> }
> +
> +#ifdef TEST
> +// LCOV_EXCL_START
> +#define SRC_BUF_SIZE 64
> +#define DST_BUF_SIZE 512
You should use AV_HASH_MAX_SIZE for dst. If someone goes and adds a new algorithm
with a digest bigger than 64 bytes that value will change and the dst buffer here
may not be enough anymore.
AV_HASH_MAX_SIZE*4 should do it i think.
> +
> +int main(void)
> +{
> + struct AVHashContext *ctx = NULL;
> + int i, j;
> + static const uint8_t src[SRC_BUF_SIZE] = { 0 };
> + uint8_t dst[DST_BUF_SIZE];
> + for(i = 0; i < NUM_HASHES; i++) {
Nit: Space after for.
> + if(av_hash_alloc(&ctx, av_hash_names(i)) < 0) {
Nit: Space after if, and no need for brackets.
> + return 1;
> + }
> +
> + av_hash_init(ctx);
> + av_hash_update(ctx, src, SRC_BUF_SIZE);
> + memset(dst, 0, DST_BUF_SIZE);
memset (or even zero initializing dst) is probably not needed at all.
hash.h doxy says hex and b64 digests are always 0-terminated, and you never
read more than av_hash_get_size(ctx) for the binary digest.
> + av_hash_final_hex(ctx, dst, DST_BUF_SIZE);
> + printf("%s hex: %s\n", av_hash_get_name(ctx), dst);
> +
> + av_hash_init(ctx);
> + av_hash_update(ctx, src, SRC_BUF_SIZE);
> + memset(dst, 0, DST_BUF_SIZE);
> + av_hash_final_bin(ctx, dst, DST_BUF_SIZE);
> + printf("%s bin: ", av_hash_get_name(ctx));
> + for(j = 0; j < av_hash_get_size(ctx); j++) {
Nit: Space after for.
> + printf("%#x ", dst[j]);
Indentation should be four spaces.
> + }
> + printf("\n");
> +
> + av_hash_init(ctx);
> + av_hash_update(ctx, src, SRC_BUF_SIZE);
> + memset(dst, 0, DST_BUF_SIZE);
> + av_hash_final_b64(ctx, dst, DST_BUF_SIZE);
> + printf("%s b64: %s\n", av_hash_get_name(ctx), dst);
> + av_hash_freep(&ctx);
> + }
> + return 0;
> +}
> +
> +// LCOV_EXCL_STOP
> +#endif
More information about the ffmpeg-devel
mailing list