Commit c4e0e744 authored by Peter Ross's avatar Peter Ross Committed by Michael Niedermayer

wtvdec: return error when filetime_to_iso8601/crazytime_to_iso8601 conversion fails

Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent d35a9864
...@@ -368,28 +368,30 @@ static int read_probe(AVProbeData *p) ...@@ -368,28 +368,30 @@ static int read_probe(AVProbeData *p)
/** /**
* Convert win32 FILETIME to ISO-8601 string * 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; time_t t = (value / 10000000LL) - 11644473600LL;
struct tm *tm = gmtime(&t); struct tm *tm = gmtime(&t);
if (tm) if (!tm)
strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", gmtime(&t)); return -1;
else strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", gmtime(&t));
buf[0] = '\0'; return 0;
} }
/** /**
* Convert crazy time (100ns since 1 Jan 0001) to ISO-8601 string * 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; time_t t = (value / 10000000LL) - 719162LL*86400LL;
struct tm *tm = gmtime(&t); struct tm *tm = gmtime(&t);
if (tm) if (!tm)
strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", gmtime(&t)); return -1;
else strftime(buf, buf_size, "%Y-%m-%d %H:%M:%S", gmtime(&t));
buf[0] = '\0'; return 0;
} }
/** /**
...@@ -460,10 +462,16 @@ static void get_tag(AVFormatContext *s, AVIOContext *pb, const char *key, int ty ...@@ -460,10 +462,16 @@ static void get_tag(AVFormatContext *s, AVIOContext *pb, const char *key, int ty
int64_t num = avio_rl64(pb); int64_t num = avio_rl64(pb);
if (!strcmp(key, "WM/EncodingTime") || if (!strcmp(key, "WM/EncodingTime") ||
!strcmp(key, "WM/MediaOriginalBroadcastDateTime")) !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") || else if (!strcmp(key, "WM/WMRVEncodeTime") ||
!strcmp(key, "WM/WMRVEndTime")) !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")) { else if (!strcmp(key, "WM/WMRVExpirationDate")) {
if (oledate_to_iso8601(buf, buf_size, num) < 0 ) { if (oledate_to_iso8601(buf, buf_size, num) < 0 ) {
av_free(buf); av_free(buf);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment