diff options
author | Peter Ross <pross@xvid.org> | 2012-07-02 10:28:31 +1000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-07-02 03:55:02 +0200 |
commit | c4e0e74438e497fa4f5fec6c186ffb33152c4898 (patch) | |
tree | 53199778e088d099c095bc1d537f9bc0399ebdbd | |
parent | d35a986404e7022c1ddbb1bf599635f7a1bd3c45 (diff) | |
download | ffmpeg-c4e0e74438e497fa4f5fec6c186ffb33152c4898.tar.gz |
wtvdec: return error when filetime_to_iso8601/crazytime_to_iso8601 conversion fails
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/wtvdec.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/libavformat/wtvdec.c b/libavformat/wtvdec.c index 338eff8bfb..eb312500c0 100644 --- a/libavformat/wtvdec.c +++ b/libavformat/wtvdec.c @@ -368,28 +368,30 @@ static int read_probe(AVProbeData *p) /** * Convert win32 FILETIME to ISO-8601 string + * @return <0 on error */ -static void filetime_to_iso8601(char *buf, int buf_size, int64_t value) +static int filetime_to_iso8601(char *buf, int buf_size, int64_t value) { time_t t = (value / 10000000LL) - 11644473600LL; struct tm *tm = gmtime(&t); - if (tm) - strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", gmtime(&t)); - else - buf[0] = '\0'; + if (!tm) + return -1; + strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", gmtime(&t)); + return 0; } /** * Convert crazy time (100ns since 1 Jan 0001) to ISO-8601 string + * @return <0 on error */ -static void crazytime_to_iso8601(char *buf, int buf_size, int64_t value) +static int crazytime_to_iso8601(char *buf, int buf_size, int64_t value) { time_t t = (value / 10000000LL) - 719162LL*86400LL; struct tm *tm = gmtime(&t); - if (tm) - strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", gmtime(&t)); - else - buf[0] = '\0'; + if (!tm) + return -1; + strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", gmtime(&t)); + return 0; } /** @@ -460,10 +462,16 @@ static void get_tag(AVFormatContext *s, AVIOContext *pb, const char *key, int ty int64_t num = avio_rl64(pb); if (!strcmp(key, "WM/EncodingTime") || !strcmp(key, "WM/MediaOriginalBroadcastDateTime")) - filetime_to_iso8601(buf, buf_size, num); + if (filetime_to_iso8601(buf, buf_size, num) < 0) { + av_free(buf); + return; + } else if (!strcmp(key, "WM/WMRVEncodeTime") || !strcmp(key, "WM/WMRVEndTime")) - crazytime_to_iso8601(buf, buf_size, num); + if (crazytime_to_iso8601(buf, buf_size, num) < 0) { + av_free(buf); + return; + } else if (!strcmp(key, "WM/WMRVExpirationDate")) { if (oledate_to_iso8601(buf, buf_size, num) < 0 ) { av_free(buf); |