From 45627548d6081e34b36c6905375f94e0d37bfcd7 Mon Sep 17 00:00:00 2001 From: Karl Blomster Date: Sat, 2 May 2009 19:40:55 +0000 Subject: [PATCH] Don't let the MKV parser crash on certain MKV's for which it cannot determine the filesize by itself. (Adaption of Myrsloik's similar fix for FFMS2.) Originally committed to SVN as r2891. --- aegisub/src/mkv_wrap.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/aegisub/src/mkv_wrap.cpp b/aegisub/src/mkv_wrap.cpp index 8fc6e4c8a..71957b720 100644 --- a/aegisub/src/mkv_wrap.cpp +++ b/aegisub/src/mkv_wrap.cpp @@ -568,6 +568,16 @@ int StdIoProgress(InputStream *_st, ulonglong cur, ulonglong max) { return 1; } +longlong StdIoGetFileSize(InputStream *_st) { + MkvStdIO *st = (MkvStdIO *) _st; + longlong epos = 0; + longlong cpos = _ftelli64(st->fp); + _fseeki64(st->fp, 0, SEEK_END); + epos = _ftelli64(st->fp); + _fseeki64(st->fp, cpos, SEEK_SET); + return epos; +} + MkvStdIO::MkvStdIO(wxString filename) { read = StdIoRead; scan = StdIoScan; @@ -577,6 +587,7 @@ MkvStdIO::MkvStdIO(wxString filename) { memrealloc = StdIoRealloc; memfree = StdIoFree; progress = StdIoProgress; + getfilesize = StdIoGetFileSize; wxFileName fname(filename); fp = fopen(fname.GetShortPath().mb_str(wxConvUTF8),"rb"); if (fp) {