diff options
author | Vesselin Bontchev <vesselin.bontchev@yandex.com> | 2015-08-25 12:37:02 +0000 |
---|---|---|
committer | Vesselin Bontchev <vesselin.bontchev@yandex.com> | 2015-08-25 12:44:20 +0000 |
commit | 4cd1d2314beec9ab6f96a1c820be62d642e99298 (patch) | |
tree | ff05d6c9aaf4114a8cbe8b5cf28ab79fcf8b5f7a /libavformat/aadec.c | |
parent | 83a508cda5115c61b456aeb227bf770d61010961 (diff) |
avformat/aa: use correct format specifier in sscanf
This demuxer was broken on a large number of platforms due to usage of wrong
format specifier in sscanf. This patch fixes the problem, and also adds some
debug logging to reduce future debugging pain.
Diffstat (limited to 'libavformat/aadec.c')
-rw-r--r-- | libavformat/aadec.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/libavformat/aadec.c b/libavformat/aadec.c index 8e6140e189..ba700d5168 100644 --- a/libavformat/aadec.c +++ b/libavformat/aadec.c @@ -112,16 +112,23 @@ static int aa_read_header(AVFormatContext *s) avio_read(pb, val, nval); // value string } if (!strcmp(key, "codec")) { + av_log(s, AV_LOG_DEBUG, "Codec is <%s>\n", val); strncpy(codec_name, val, sizeof(codec_name) - 1); } if (!strcmp(key, "HeaderSeed")) { + av_log(s, AV_LOG_DEBUG, "HeaderSeed is <%s>\n", val); header_seed = atoi(val); } if (!strcmp(key, "HeaderKey")) { // this looks like "1234567890 1234567890 1234567890 1234567890" - sscanf(val, "%d%d%d%d", &header_key_part[0], &header_key_part[1], &header_key_part[2], &header_key_part[3]); + av_log(s, AV_LOG_DEBUG, "HeaderKey is <%s>\n", val); + sscanf(val, "%u%u%u%u", &header_key_part[0], &header_key_part[1], &header_key_part[2], &header_key_part[3]); for (idx = 0; idx < 4; idx++) { AV_WB32(&header_key[idx * 4], header_key_part[idx]); // convert each part to BE! } + av_log(s, AV_LOG_DEBUG, "Processed HeaderKey is "); + for (i = 0; i < 16; i++) + av_log(s, AV_LOG_DEBUG, "%02x", header_key[i]); + av_log(s, AV_LOG_DEBUG, "\n"); } } @@ -143,7 +150,7 @@ static int aa_read_header(AVFormatContext *s) return AVERROR(ENOMEM); av_tea_init(c->tea_ctx, c->aa_fixed_key, 16); output[0] = output[1] = 0; // purely for padding purposes - memcpy(output + 2, &header_key, 16); + memcpy(output + 2, header_key, 16); idx = 0; for (i = 0; i < 3; i++) { // TEA CBC with weird mixed endianness AV_WB32(src, header_seed); @@ -155,6 +162,10 @@ static int aa_read_header(AVFormatContext *s) } } memcpy(c->file_key, output + 2, 16); // skip first 2 bytes of output + av_log(s, AV_LOG_DEBUG, "File key is "); + for (i = 0; i < 16; i++) + av_log(s, AV_LOG_DEBUG, "%02x", c->file_key[i]); + av_log(s, AV_LOG_DEBUG, "\n"); /* decoder setup */ st = avformat_new_stream(s, NULL); |