The MSVCRT version of strftime calls the invalid parameter handler
if the struct values in struct tm are invalid. In case no invalid
parameter handler is set for the process, the process is aborted.
This fixes fate failures on MSVC builds since 570af382.
Based on a patch by Hendrik Leppkes.
---
Added checking of the other struct values as well, and limiting the
upper end of the values as well - tested each of them individually
to find the actual limit.
Luckily, it doesn't check to make sure the day of the month is
within the actual number of days of that month during that year,
limiting it to 1-31 seems to work regardless of the actual month.
---
libavformat/mxfdec.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index 27f996f..d6e2155 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -1669,6 +1669,15 @@ static int mxf_timestamp_to_str(uint64_t timestamp, char
**str)
time.tm_min = (timestamp >> 16 & 0xFF);
time.tm_sec = (timestamp >> 8 & 0xFF);
+ /* msvcrt versions of strftime calls the invalid parameter handler
+ * (aborting the process if one isn't set) if the parameters are out
+ * of range. */
+ time.tm_mon = av_clip(time.tm_mon, 0, 11);
+ time.tm_mday = av_clip(time.tm_mday, 1, 31);
+ time.tm_hour = av_clip(time.tm_hour, 0, 23);
+ time.tm_min = av_clip(time.tm_min, 0, 59);
+ time.tm_sec = av_clip(time.tm_sec, 0, 59);
+
*str = av_mallocz(32);
if (!*str)
return AVERROR(ENOMEM);
--
1.8.3.4 (Apple Git-47)
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel