Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH] avformat/file: add fd protocol
@ 2022-11-18 18:48 Zhao Zhili
  2022-12-05  2:51 ` "zhilizhao(赵志立)"
  2022-12-09 14:31 ` Anton Khirnov
  0 siblings, 2 replies; 11+ messages in thread
From: Zhao Zhili @ 2022-11-18 18:48 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Zhao Zhili

From: Zhao Zhili <zhilizhao@tencent.com>

Unlike the pipe protocol, fd protocol has seek support if it
corresponding to a regular file.
---
Sometimes it's the only way to access files via file descriptor, e.g.,
requesting a shared file on Android:
https://developer.android.com/training/secure-file-sharing/request-file

 doc/protocols.texi      | 24 +++++++++++++++++++
 libavformat/Makefile    |  1 +
 libavformat/file.c      | 51 +++++++++++++++++++++++++++++++++++++++++
 libavformat/protocols.c |  1 +
 libavformat/version.h   |  4 ++--
 5 files changed, 79 insertions(+), 2 deletions(-)

diff --git a/doc/protocols.texi b/doc/protocols.texi
index 5e9198e67c..d9f2d2dec3 100644
--- a/doc/protocols.texi
+++ b/doc/protocols.texi
@@ -275,6 +275,30 @@ For example, to convert a GIF file given inline with @command{ffmpeg}:
 ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png
 @end example
 
+@section fd
+
+File descriptor access protocol.
+
+The accepted syntax is:
+@example
+fd:[@var{number}]
+@end example
+
+@var{number} is the number corresponding to a file descriptor. Unlike the pipe
+protocol, fd protocol has seek support if it corresponding to a regular file.
+If @var{number} is not specified, by default the stdout file descriptor will
+be used for writing, stdin for reading.
+
+This protocol accepts the following options:
+
+@table @option
+@item blocksize
+Set I/O operation maximum block size, in bytes. Default value is
+@code{INT_MAX}, which results in not limiting the requested block size.
+Setting this value reasonably low improves user termination request reaction
+time, which is valuable if data transmission is slow.
+@end table
+
 @section file
 
 File access protocol.
diff --git a/libavformat/Makefile b/libavformat/Makefile
index d7f198bf39..1452216e29 100644
--- a/libavformat/Makefile
+++ b/libavformat/Makefile
@@ -647,6 +647,7 @@ OBJS-$(CONFIG_DATA_PROTOCOL)             += data_uri.o
 OBJS-$(CONFIG_FFRTMPCRYPT_PROTOCOL)      += rtmpcrypt.o rtmpdigest.o rtmpdh.o
 OBJS-$(CONFIG_FFRTMPHTTP_PROTOCOL)       += rtmphttp.o
 OBJS-$(CONFIG_FILE_PROTOCOL)             += file.o
+OBJS-$(CONFIG_FD_PROTOCOL)               += file.o
 OBJS-$(CONFIG_FTP_PROTOCOL)              += ftp.o urldecode.o
 OBJS-$(CONFIG_GOPHER_PROTOCOL)           += gopher.o
 OBJS-$(CONFIG_GOPHERS_PROTOCOL)          += gopher.o
diff --git a/libavformat/file.c b/libavformat/file.c
index 6103c37b34..765ad21d67 100644
--- a/libavformat/file.c
+++ b/libavformat/file.c
@@ -109,6 +109,13 @@ static const AVClass pipe_class = {
     .version    = LIBAVUTIL_VERSION_INT,
 };
 
+static const AVClass fd_class = {
+    .class_name = "fd",
+    .item_name  = av_default_item_name,
+    .option     = pipe_options,
+    .version    = LIBAVUTIL_VERSION_INT,
+};
+
 static int file_read(URLContext *h, unsigned char *buf, int size)
 {
     FileContext *c = h->priv_data;
@@ -412,3 +419,47 @@ const URLProtocol ff_pipe_protocol = {
 };
 
 #endif /* CONFIG_PIPE_PROTOCOL */
+
+#if CONFIG_FD_PROTOCOL
+
+static int fd_open(URLContext *h, const char *filename, int flags)
+{
+    FileContext *c = h->priv_data;
+    int fd;
+    char *final;
+    struct stat st;
+
+    av_strstart(filename, "fd:", &filename);
+
+    fd = strtol(filename, &final, 10);
+    if((filename == final) || *final ) {/* No digits found, or something like 10ab */
+        if (flags & AVIO_FLAG_WRITE) {
+            fd = 1;
+        } else {
+            fd = 0;
+        }
+    }
+#if HAVE_SETMODE
+    setmode(fd, O_BINARY);
+#endif
+    if (fstat(fd, &st) < 0)
+        return AVERROR(errno);
+    h->is_streamed = !(S_ISREG(st.st_mode) || S_ISBLK(st.st_mode));
+    c->fd = fd;
+    return 0;
+}
+
+const URLProtocol ff_fd_protocol = {
+    .name                = "fd",
+    .url_open            = fd_open,
+    .url_read            = file_read,
+    .url_write           = file_write,
+    .url_seek            = file_seek,
+    .url_get_file_handle = file_get_handle,
+    .url_check           = file_check,
+    .priv_data_size      = sizeof(FileContext),
+    .priv_data_class     = &fd_class,
+    .default_whitelist   = "crypto,data"
+};
+
+#endif /* CONFIG_FD_PROTOCOL */
diff --git a/libavformat/protocols.c b/libavformat/protocols.c
index 8b7d1b940f..82cb1033e4 100644
--- a/libavformat/protocols.c
+++ b/libavformat/protocols.c
@@ -29,6 +29,7 @@ extern const URLProtocol ff_concat_protocol;
 extern const URLProtocol ff_concatf_protocol;
 extern const URLProtocol ff_crypto_protocol;
 extern const URLProtocol ff_data_protocol;
+extern const URLProtocol ff_fd_protocol;
 extern const URLProtocol ff_ffrtmpcrypt_protocol;
 extern const URLProtocol ff_ffrtmphttp_protocol;
 extern const URLProtocol ff_file_protocol;
diff --git a/libavformat/version.h b/libavformat/version.h
index 7c9d50b7b3..f5a7f579b3 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -31,8 +31,8 @@
 
 #include "version_major.h"
 
-#define LIBAVFORMAT_VERSION_MINOR  34
-#define LIBAVFORMAT_VERSION_MICRO 101
+#define LIBAVFORMAT_VERSION_MINOR  35
+#define LIBAVFORMAT_VERSION_MICRO 100
 
 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
                                                LIBAVFORMAT_VERSION_MINOR, \
-- 
2.25.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [FFmpeg-devel] [PATCH] avformat/file: add fd protocol
  2022-11-18 18:48 [FFmpeg-devel] [PATCH] avformat/file: add fd protocol Zhao Zhili
@ 2022-12-05  2:51 ` "zhilizhao(赵志立)"
  2022-12-08 15:11   ` Zhao Zhili
  2022-12-12 16:31   ` Rémi Denis-Courmont
  2022-12-09 14:31 ` Anton Khirnov
  1 sibling, 2 replies; 11+ messages in thread
From: "zhilizhao(赵志立)" @ 2022-12-05  2:51 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



> On Nov 19, 2022, at 02:48, Zhao Zhili <quinkblack@foxmail.com> wrote:
> 
> From: Zhao Zhili <zhilizhao@tencent.com>
> 
> Unlike the pipe protocol, fd protocol has seek support if it
> corresponding to a regular file.
> ---
> Sometimes it's the only way to access files via file descriptor, e.g.,
> requesting a shared file on Android:
> https://developer.android.com/training/secure-file-sharing/request-file
> 
> doc/protocols.texi      | 24 +++++++++++++++++++
> libavformat/Makefile    |  1 +
> libavformat/file.c      | 51 +++++++++++++++++++++++++++++++++++++++++
> libavformat/protocols.c |  1 +
> libavformat/version.h   |  4 ++--
> 5 files changed, 79 insertions(+), 2 deletions(-)
> 
> 

Ping for review.

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [FFmpeg-devel] [PATCH] avformat/file: add fd protocol
  2022-12-05  2:51 ` "zhilizhao(赵志立)"
@ 2022-12-08 15:11   ` Zhao Zhili
  2022-12-08 15:16     ` Marvin Scholz
  2022-12-12 16:31   ` Rémi Denis-Courmont
  1 sibling, 1 reply; 11+ messages in thread
From: Zhao Zhili @ 2022-12-08 15:11 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

On Mon, 2022-12-05 at 10:51 +0800, zhilizhao(赵志立) wrote:
> > On Nov 19, 2022, at 02:48, Zhao Zhili <quinkblack@foxmail.com>
> > wrote:
> > 
> > From: Zhao Zhili <zhilizhao@tencent.com>
> > 
> > Unlike the pipe protocol, fd protocol has seek support if it
> > corresponding to a regular file.
> > ---
> > Sometimes it's the only way to access files via file descriptor,
> > e.g.,
> > requesting a shared file on Android:
> > https://developer.android.com/training/secure-file-sharing/request-file
> > 
> > doc/protocols.texi      | 24 +++++++++++++++++++
> > libavformat/Makefile    |  1 +
> > libavformat/file.c      | 51
> > +++++++++++++++++++++++++++++++++++++++++
> > libavformat/protocols.c |  1 +
> > libavformat/version.h   |  4 ++--
> > 5 files changed, 79 insertions(+), 2 deletions(-)
> > 
> > 
> 
> Ping for review.
> 

Will apply tomorrow unless there are objections.

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [FFmpeg-devel] [PATCH] avformat/file: add fd protocol
  2022-12-08 15:11   ` Zhao Zhili
@ 2022-12-08 15:16     ` Marvin Scholz
  2022-12-08 15:28       ` Andreas Rheinhardt
  0 siblings, 1 reply; 11+ messages in thread
From: Marvin Scholz @ 2022-12-08 15:16 UTC (permalink / raw)
  To: FFmpeg development discussions and patches



On 8 Dec 2022, at 16:11, Zhao Zhili wrote:

> On Mon, 2022-12-05 at 10:51 +0800, zhilizhao(赵志立) wrote:
>>> On Nov 19, 2022, at 02:48, Zhao Zhili <quinkblack@foxmail.com>
>>> wrote:
>>>
>>> From: Zhao Zhili <zhilizhao@tencent.com>
>>>
>>> Unlike the pipe protocol, fd protocol has seek support if it
>>> corresponding to a regular file.
>>> ---
>>> Sometimes it's the only way to access files via file descriptor,
>>> e.g.,
>>> requesting a shared file on Android:
>>> https://developer.android.com/training/secure-file-sharing/request-file
>>>
>>> doc/protocols.texi      | 24 +++++++++++++++++++
>>> libavformat/Makefile    |  1 +
>>> libavformat/file.c      | 51
>>> +++++++++++++++++++++++++++++++++++++++++
>>> libavformat/protocols.c |  1 +
>>> libavformat/version.h   |  4 ++--
>>> 5 files changed, 79 insertions(+), 2 deletions(-)
>>>
>>>
>>
>> Ping for review.
>>
>
> Will apply tomorrow unless there are objections.
>

Maybe I overlooked something but where does the CONFIG_FD_PROTOCOL
define comes from?

> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [FFmpeg-devel] [PATCH] avformat/file: add fd protocol
  2022-12-08 15:16     ` Marvin Scholz
@ 2022-12-08 15:28       ` Andreas Rheinhardt
  2022-12-08 16:16         ` Zhao Zhili
  0 siblings, 1 reply; 11+ messages in thread
From: Andreas Rheinhardt @ 2022-12-08 15:28 UTC (permalink / raw)
  To: ffmpeg-devel

Marvin Scholz:
> 
> 
> On 8 Dec 2022, at 16:11, Zhao Zhili wrote:
> 
>> On Mon, 2022-12-05 at 10:51 +0800, zhilizhao(赵志立) wrote:
>>>> On Nov 19, 2022, at 02:48, Zhao Zhili <quinkblack@foxmail.com>
>>>> wrote:
>>>>
>>>> From: Zhao Zhili <zhilizhao@tencent.com>
>>>>
>>>> Unlike the pipe protocol, fd protocol has seek support if it
>>>> corresponding to a regular file.
>>>> ---
>>>> Sometimes it's the only way to access files via file descriptor,
>>>> e.g.,
>>>> requesting a shared file on Android:
>>>> https://developer.android.com/training/secure-file-sharing/request-file
>>>>
>>>> doc/protocols.texi      | 24 +++++++++++++++++++
>>>> libavformat/Makefile    |  1 +
>>>> libavformat/file.c      | 51
>>>> +++++++++++++++++++++++++++++++++++++++++
>>>> libavformat/protocols.c |  1 +
>>>> libavformat/version.h   |  4 ++--
>>>> 5 files changed, 79 insertions(+), 2 deletions(-)
>>>>
>>>>
>>>
>>> Ping for review.
>>>
>>
>> Will apply tomorrow unless there are objections.
>>
> 
> Maybe I overlooked something but where does the CONFIG_FD_PROTOCOL
> define comes from?
> 

It is autogenerated by configure due to the entry in lavf/protocols.c
(and this change will trigger a request to rerun configure when compiling).
(I haven't looked at the patch at all.)

- Andreas

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [FFmpeg-devel] [PATCH] avformat/file: add fd protocol
  2022-12-08 15:28       ` Andreas Rheinhardt
@ 2022-12-08 16:16         ` Zhao Zhili
  0 siblings, 0 replies; 11+ messages in thread
From: Zhao Zhili @ 2022-12-08 16:16 UTC (permalink / raw)
  To: ffmpeg-devel

On Thu, 2022-12-08 at 16:28 +0100, Andreas Rheinhardt wrote:
> Marvin Scholz:
> > 
> > On 8 Dec 2022, at 16:11, Zhao Zhili wrote:
> > 
> > > On Mon, 2022-12-05 at 10:51 +0800, zhilizhao(赵志立) wrote:
> > > > > On Nov 19, 2022, at 02:48, Zhao Zhili <quinkblack@foxmail.com
> > > > > >
> > > > > wrote:
> > > > > 
> > > > > From: Zhao Zhili <zhilizhao@tencent.com>
> > > > > 
> > > > > Unlike the pipe protocol, fd protocol has seek support if it
> > > > > corresponding to a regular file.
> > > > > ---
> > > > > Sometimes it's the only way to access files via file
> > > > > descriptor,
> > > > > e.g.,
> > > > > requesting a shared file on Android:
> > > > > https://developer.android.com/training/secure-file-sharing/request-file
> > > > > 
> > > > > doc/protocols.texi      | 24 +++++++++++++++++++
> > > > > libavformat/Makefile    |  1 +
> > > > > libavformat/file.c      | 51
> > > > > +++++++++++++++++++++++++++++++++++++++++
> > > > > libavformat/protocols.c |  1 +
> > > > > libavformat/version.h   |  4 ++--
> > > > > 5 files changed, 79 insertions(+), 2 deletions(-)
> > > > > 
> > > > > 
> > > > 
> > > > Ping for review.
> > > > 
> > > 
> > > Will apply tomorrow unless there are objections.
> > > 
> > 
> > Maybe I overlooked something but where does the CONFIG_FD_PROTOCOL
> > define comes from?
> > 
> 
> It is autogenerated by configure due to the entry in lavf/protocols.c
> (and this change will trigger a request to rerun configure when
> compiling).
> (I haven't looked at the patch at all.)
> 
> - Andreas

Yes, it was automatically generated by configure and included in
config_components.

For the patch itself, make pipe protocol is easy, but it doesn't sound
right (a seekable pipe). So I chose to add a new one, which is
supported by VLC too (URl is little different).

A quick test case for this patch is:

$ ./ffplay fd:0 < ~/video/cctv.mp4

You can seek back and forth.

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [FFmpeg-devel] [PATCH] avformat/file: add fd protocol
  2022-11-18 18:48 [FFmpeg-devel] [PATCH] avformat/file: add fd protocol Zhao Zhili
  2022-12-05  2:51 ` "zhilizhao(赵志立)"
@ 2022-12-09 14:31 ` Anton Khirnov
  2022-12-10 13:45   ` Zhao Zhili
  1 sibling, 1 reply; 11+ messages in thread
From: Anton Khirnov @ 2022-12-09 14:31 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Zhao Zhili

Quoting Zhao Zhili (2022-11-18 19:48:02)
> From: Zhao Zhili <zhilizhao@tencent.com>
> 
> Unlike the pipe protocol, fd protocol has seek support if it
> corresponding to a regular file.
> ---
> Sometimes it's the only way to access files via file descriptor, e.g.,
> requesting a shared file on Android:
> https://developer.android.com/training/secure-file-sharing/request-file
> 

Wouldn't dup()ing the file descriptor be safer?

-- 
Anton Khirnov
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [FFmpeg-devel] [PATCH] avformat/file: add fd protocol
  2022-12-09 14:31 ` Anton Khirnov
@ 2022-12-10 13:45   ` Zhao Zhili
  0 siblings, 0 replies; 11+ messages in thread
From: Zhao Zhili @ 2022-12-10 13:45 UTC (permalink / raw)
  To: 'FFmpeg development discussions and patches'


> From: ffmpeg-devel <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of Anton Khirnov
> Sent: 2022年12月9日 22:32
> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
> Cc: Zhao Zhili <zhilizhao@tencent.com>
> Subject: Re: [FFmpeg-devel] [PATCH] avformat/file: add fd protocol
> 
> Quoting Zhao Zhili (2022-11-18 19:48:02)
> > From: Zhao Zhili <zhilizhao@tencent.com>
> >
> > Unlike the pipe protocol, fd protocol has seek support if it
> > corresponding to a regular file.
> > ---
> > Sometimes it's the only way to access files via file descriptor, e.g.,
> > requesting a shared file on Android:
> > https://developer.android.com/training/secure-file-sharing/request-file
> >
> 
> Wouldn't dup()ing the file descriptor be safer?

Yes, I have thought that. The question is why pipe protocol doesn't do that.
If there is no reason, I can update the patch then improve the pipe protocol.

> 
> --
> Anton Khirnov
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [FFmpeg-devel] [PATCH] avformat/file: add fd protocol
  2022-12-05  2:51 ` "zhilizhao(赵志立)"
  2022-12-08 15:11   ` Zhao Zhili
@ 2022-12-12 16:31   ` Rémi Denis-Courmont
  2022-12-12 17:23     ` Zhao Zhili
  1 sibling, 1 reply; 11+ messages in thread
From: Rémi Denis-Courmont @ 2022-12-12 16:31 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Le maanantaina 5. joulukuuta 2022, 4.51.34 EET zhilizhao(赵志立) a écrit :
> > On Nov 19, 2022, at 02:48, Zhao Zhili <quinkblack@foxmail.com> wrote:
> > 
> > From: Zhao Zhili <zhilizhao@tencent.com>
> > 
> > Unlike the pipe protocol, fd protocol has seek support if it
> > corresponding to a regular file.
> > ---
> > Sometimes it's the only way to access files via file descriptor, e.g.,
> > requesting a shared file on Android:
> > https://developer.android.com/training/secure-file-sharing/request-file
> > 
> > doc/protocols.texi      | 24 +++++++++++++++++++
> > libavformat/Makefile    |  1 +
> > libavformat/file.c      | 51 +++++++++++++++++++++++++++++++++++++++++
> > libavformat/protocols.c |  1 +
> > libavformat/version.h   |  4 ++--
> > 5 files changed, 79 insertions(+), 2 deletions(-)
> 
> Ping for review.

VLC does this (with a slightly different syntax, i.e. fd://$NUM) and in 
hindsight, I think that it was a big mistake.

It should not be possible to refer to an opaque handle from within the URL. 
This leads to all sorts of mischief, bordering on security issue, in the 
common case that the URL string is untrusted.

To support this use case, IMO, the file descriptor should be passed explicitly 
via a trusted channel, *not* the URL.

-- 
Реми Дёни-Курмон
http://www.remlab.net/



_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [FFmpeg-devel] [PATCH] avformat/file: add fd protocol
  2022-12-12 16:31   ` Rémi Denis-Courmont
@ 2022-12-12 17:23     ` Zhao Zhili
  2022-12-13 16:27       ` Rémi Denis-Courmont
  0 siblings, 1 reply; 11+ messages in thread
From: Zhao Zhili @ 2022-12-12 17:23 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Rémi Denis-Courmont

On Mon, 2022-12-12 at 18:31 +0200, Rémi Denis-Courmont wrote:
> Le maanantaina 5. joulukuuta 2022, 4.51.34 EET zhilizhao(赵志立) a écrit
> :
> > > On Nov 19, 2022, at 02:48, Zhao Zhili <quinkblack@foxmail.com>
> > > wrote:
> > > 
> > > From: Zhao Zhili <zhilizhao@tencent.com>
> > > 
> > > Unlike the pipe protocol, fd protocol has seek support if it
> > > corresponding to a regular file.
> > > ---
> > > Sometimes it's the only way to access files via file descriptor,
> > > e.g.,
> > > requesting a shared file on Android:
> > > https://developer.android.com/training/secure-file-sharing/request-file
> > > 
> > > doc/protocols.texi      | 24 +++++++++++++++++++
> > > libavformat/Makefile    |  1 +
> > > libavformat/file.c      | 51
> > > +++++++++++++++++++++++++++++++++++++++++
> > > libavformat/protocols.c |  1 +
> > > libavformat/version.h   |  4 ++--
> > > 5 files changed, 79 insertions(+), 2 deletions(-)
> > 
> > Ping for review.
> 
> VLC does this (with a slightly different syntax, i.e. fd://$NUM) and
> in 
> hindsight, I think that it was a big mistake.
> 
> It should not be possible to refer to an opaque handle from within
> the URL. 
> This leads to all sorts of mischief, bordering on security issue, in
> the 
> common case that the URL string is untrusted.

Could you elaborate on the security issue?

> 
> To support this use case, IMO, the file descriptor should be passed
> explicitly 
> via a trusted channel, *not* the URL.

Does an explicit option works here?

 static const AVOption pipe_options[] = {
     { "blocksize", "set I/O operation maximum block size",
offsetof(FileContext, blocksize), AV_OPT_TYPE_INT, { .i64 = INT_MAX },
1, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM },
+    { "fd", "set file descriptor", offsetof(FileContext, fd),
AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM
},
     { NULL }
 };

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [FFmpeg-devel] [PATCH] avformat/file: add fd protocol
  2022-12-12 17:23     ` Zhao Zhili
@ 2022-12-13 16:27       ` Rémi Denis-Courmont
  0 siblings, 0 replies; 11+ messages in thread
From: Rémi Denis-Courmont @ 2022-12-13 16:27 UTC (permalink / raw)
  To: FFmpeg development discussions and patches

Le maanantaina 12. joulukuuta 2022, 19.23.52 EET Zhao Zhili a écrit :
> On Mon, 2022-12-12 at 18:31 +0200, Rémi Denis-Courmont wrote:
> > Le maanantaina 5. joulukuuta 2022, 4.51.34 EET zhilizhao(赵志立) a écrit
> > 
> > > > On Nov 19, 2022, at 02:48, Zhao Zhili <quinkblack@foxmail.com>
> > > > wrote:
> > > > 
> > > > From: Zhao Zhili <zhilizhao@tencent.com>
> > > > 
> > > > Unlike the pipe protocol, fd protocol has seek support if it
> > > > corresponding to a regular file.
> > > > ---
> > > > Sometimes it's the only way to access files via file descriptor,
> > > > e.g.,
> > > > requesting a shared file on Android:
> > > > https://developer.android.com/training/secure-file-sharing/request-fil
> > > > e
> > > > 
> > > > doc/protocols.texi      | 24 +++++++++++++++++++
> > > > libavformat/Makefile    |  1 +
> > > > libavformat/file.c      | 51
> > > > +++++++++++++++++++++++++++++++++++++++++
> > > > libavformat/protocols.c |  1 +
> > > > libavformat/version.h   |  4 ++--
> > > > 5 files changed, 79 insertions(+), 2 deletions(-)
> > > 
> > > Ping for review.
> > 
> > VLC does this (with a slightly different syntax, i.e. fd://$NUM) and
> > in
> > hindsight, I think that it was a big mistake.
> > 
> > It should not be possible to refer to an opaque handle from within
> > the URL.
> > This leads to all sorts of mischief, bordering on security issue, in
> > the
> > common case that the URL string is untrusted.
> 
> Could you elaborate on the security issue?

Just guess the FD of some critical process resource (.e.g D-Bus, X11 or 
Wayland connection), , and you can easily cause a DoS. It gets potentially 
worse if you can guess the FD that is used to carry sensitive data, such as 
another clients connection if FFmpeg runs inside some kind of network service.

> > To support this use case, IMO, the file descriptor should be passed
> > explicitly
> > via a trusted channel, *not* the URL.
> 
> Does an explicit option works here?
> 
>  static const AVOption pipe_options[] = {
>      { "blocksize", "set I/O operation maximum block size",
> offsetof(FileContext, blocksize), AV_OPT_TYPE_INT, { .i64 = INT_MAX },
> 1, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM },
> +    { "fd", "set file descriptor", offsetof(FileContext, fd),
> AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM
> },
>      { NULL }
>  };

That seems more reasonable, so I cannot comment on the specifics of AVOption 
usage.


-- 
Реми Дёни-Курмон
http://www.remlab.net/



_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2022-12-13 16:28 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-18 18:48 [FFmpeg-devel] [PATCH] avformat/file: add fd protocol Zhao Zhili
2022-12-05  2:51 ` "zhilizhao(赵志立)"
2022-12-08 15:11   ` Zhao Zhili
2022-12-08 15:16     ` Marvin Scholz
2022-12-08 15:28       ` Andreas Rheinhardt
2022-12-08 16:16         ` Zhao Zhili
2022-12-12 16:31   ` Rémi Denis-Courmont
2022-12-12 17:23     ` Zhao Zhili
2022-12-13 16:27       ` Rémi Denis-Courmont
2022-12-09 14:31 ` Anton Khirnov
2022-12-10 13:45   ` Zhao Zhili

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git