Skip to content

Commit e5c479c

Browse files
authored
Merge pull request #61183 from nextcloud/backport/60916/stable33
[stable33] fix(previews): ffprobe hangs
2 parents d404f58 + b507204 commit e5c479c

2 files changed

Lines changed: 6 additions & 1 deletion

File tree

AUTHORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
- Andreas Pflug <dev@admin4.org>
3333
- Andrew Brown <andrew@casabrown.com>
3434
- Andrey Borysenko <andrey.borysenko@nextcloud.com>
35+
- Andrey Dyakov <adduxa@gmail.com>
3536
- André Gaul <gaul@web-yard.de>
3637
- Andy Xheli <axheli@axtsolutions.com>
3738
- Anna Larch <anna@nextcloud.com>

lib/private/Preview/Movie.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,8 +285,10 @@ private function useHdr(string $absPath): bool {
285285
if ($test_hdr_proc === false) {
286286
return false;
287287
}
288-
$test_hdr_stdout = trim(stream_get_contents($test_hdr_pipes[1]));
288+
// Read stderr before stdout: ffprobe's stderr can exceed 64KB (OS pipe buffer) for certain
289+
// files, causing a deadlock if stdout is read first. stdout is always a short string.
289290
$test_hdr_stderr = trim(stream_get_contents($test_hdr_pipes[2]));
291+
$test_hdr_stdout = trim(stream_get_contents($test_hdr_pipes[1]));
290292
proc_close($test_hdr_proc);
291293
// search build options for libzimg (provides zscale filter)
292294
$ffmpeg_libzimg_installed = strpos($test_hdr_stderr, '--enable-libzimg');
@@ -337,6 +339,8 @@ private function generateThumbNail(int $maxX, int $maxY, string $absPath, int $s
337339
$returnCode = -1;
338340
$output = '';
339341
if (is_resource($proc)) {
342+
// Read stderr before stdout: ffmpeg's stderr can exceed 64KB (OS pipe buffer) for certain
343+
// files, causing a deadlock if stdout is read first. stdout is always empty.
340344
$stderr = trim(stream_get_contents($pipes[2]));
341345
$stdout = trim(stream_get_contents($pipes[1]));
342346
$returnCode = proc_close($proc);

0 commit comments

Comments
 (0)