vlc | branch: master | Pierre Ynard <[email protected]> | Wed Nov 4 19:17:23 2020 +0100| [c20877a8b494d823fc7d8201183ad903e3f4abbb] | committer: Pierre Ynard
youtube.lua: split long line workaround into reusable helper > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c20877a8b494d823fc7d8201183ad903e3f4abbb --- share/lua/playlist/youtube.lua | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/share/lua/playlist/youtube.lua b/share/lua/playlist/youtube.lua index 7d5f31ef3d..68630e6ba0 100644 --- a/share/lua/playlist/youtube.lua +++ b/share/lua/playlist/youtube.lua @@ -62,6 +62,22 @@ function get_fmt( fmt_list ) return fmt end +-- Helper emulating vlc.readline() to work around its failure on +-- very long lines (see #24957) +function read_long_line() + local eol + local pos = 0 + local len = 32768 + repeat + len = len * 2 + local line = vlc.peek( len ) + if not line then return nil end + eol = string.find( line, "\n", pos + 1 ) + pos = len + until eol or len >= 1024 * 1024 -- No EOF detection, loop until limit + return vlc.read( eol or len ) +end + -- Buffering iterator to parse through the HTTP stream several times -- without making several HTTP requests function buf_iter( s ) @@ -319,20 +335,10 @@ function parse() if not line then break end -- The next line is the major configuration line that we need. - -- It is very long and readline() is likely to fail on it due - -- to #24957, so we need this instead. + -- It is very long so we need this workaround (see #24957). if string.match( line, '^ *<div id="player%-api">' ) then - if not vlc.peek( 1 ) then break end - local eol - local pos = 0 - local len = 32768 - repeat - len = len * 2 - line = vlc.peek( len ) - eol = string.find( line, "\n", pos + 1 ) - pos = len - until eol or len >= 1024 * 1024 - line = vlc.read( eol or len ) + line = read_long_line() + if not line then break end end if not title then _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
