Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
7056f711
Commit
7056f711
authored
Feb 28, 2010
by
Rémi Denis-Courmont
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
FTP: handle
ftp://HOST
correctly
This should fix LP#465560 - segmentation fault in strstr()
parent
16114c73
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
16 additions
and
9 deletions
+16
-9
modules/access/ftp.c
modules/access/ftp.c
+16
-9
No files found.
modules/access/ftp.c
View file @
7056f711
...
@@ -306,8 +306,8 @@ static int parseURL( vlc_url_t *url, const char *path )
...
@@ -306,8 +306,8 @@ static int parseURL( vlc_url_t *url, const char *path )
/* FTP URLs are relative to user's default directory (RFC1738 §3.2)
/* FTP URLs are relative to user's default directory (RFC1738 §3.2)
For absolute path use ftp://foo.bar//usr/local/etc/filename */
For absolute path use ftp://foo.bar//usr/local/etc/filename */
/* FIXME: we should issue a series of CWD, one per slash */
/* FIXME: we should issue a series of CWD, one per slash */
if
(
url
->
psz_path
&&
*
url
->
psz_path
==
'/'
)
if
(
url
->
psz_path
==
NULL
)
url
->
psz_path
++
;
return
VLC_SUCCESS
;
char
*
type
=
strstr
(
url
->
psz_path
,
";type="
);
char
*
type
=
strstr
(
url
->
psz_path
,
";type="
);
if
(
type
)
if
(
type
)
...
@@ -345,15 +345,16 @@ static int InOpen( vlc_object_t *p_this )
...
@@ -345,15 +345,16 @@ static int InOpen( vlc_object_t *p_this )
goto
exit_error
;
goto
exit_error
;
/* get size */
/* get size */
if
(
ftp_SendCommand
(
p_this
,
p_sys
,
"SIZE %s"
,
p_sys
->
url
.
psz_path
if
(
p_sys
->
url
.
psz_path
==
NULL
)
?
p_sys
->
url
.
psz_path
:
""
)
<
0
p_sys
->
directory
=
true
;
else
if
(
ftp_SendCommand
(
p_this
,
p_sys
,
"SIZE %s"
,
p_sys
->
url
.
psz_path
)
<
0
||
ftp_ReadCommand
(
p_this
,
p_sys
,
NULL
,
&
psz_arg
)
!=
2
)
||
ftp_ReadCommand
(
p_this
,
p_sys
,
NULL
,
&
psz_arg
)
!=
2
)
{
{
msg_Dbg
(
p_access
,
"cannot get file size"
);
msg_Dbg
(
p_access
,
"cannot get file size"
);
msg_Dbg
(
p_access
,
"will try to get directory contents"
);
msg_Dbg
(
p_access
,
"will try to get directory contents"
);
if
(
ftp_SendCommand
(
p_this
,
p_sys
,
"CWD %s"
,
p_sys
->
url
.
psz_path
if
(
ftp_SendCommand
(
p_this
,
p_sys
,
"CWD %s"
,
p_sys
->
url
.
psz_path
)
<
0
?
p_sys
->
url
.
psz_path
:
""
)
<
0
||
||
ftp_ReadCommand
(
p_this
,
p_sys
,
NULL
,
&
psz_arg
)
!=
2
)
ftp_ReadCommand
(
p_this
,
p_sys
,
NULL
,
&
psz_arg
)
!=
2
)
{
{
msg_Err
(
p_access
,
"file or directory doesn't exist"
);
msg_Err
(
p_access
,
"file or directory doesn't exist"
);
net_Close
(
p_sys
->
fd_cmd
);
net_Close
(
p_sys
->
fd_cmd
);
...
@@ -402,6 +403,11 @@ static int OutOpen( vlc_object_t *p_this )
...
@@ -402,6 +403,11 @@ static int OutOpen( vlc_object_t *p_this )
if
(
parseURL
(
&
p_sys
->
url
,
p_access
->
psz_path
)
)
if
(
parseURL
(
&
p_sys
->
url
,
p_access
->
psz_path
)
)
goto
exit_error
;
goto
exit_error
;
if
(
p_sys
->
url
.
psz_path
==
NULL
)
{
msg_Err
(
p_this
,
"no filename specified"
);
goto
exit_error
;
}
if
(
Connect
(
p_this
,
p_sys
)
)
if
(
Connect
(
p_this
,
p_sys
)
)
goto
exit_error
;
goto
exit_error
;
...
@@ -514,7 +520,7 @@ static ssize_t Read( access_t *p_access, uint8_t *p_buffer, size_t i_len )
...
@@ -514,7 +520,7 @@ static ssize_t Read( access_t *p_access, uint8_t *p_buffer, size_t i_len )
}
}
else
else
{
{
snprintf
(
(
char
*
)
p_buffer
,
i_len
,
"ftp://%s:%d
/
%s/%s
\n
"
,
snprintf
(
(
char
*
)
p_buffer
,
i_len
,
"ftp://%s:%d%s/%s
\n
"
,
p_sys
->
url
.
psz_host
,
p_sys
->
url
.
i_port
,
p_sys
->
url
.
psz_host
,
p_sys
->
url
.
i_port
,
p_sys
->
url
.
psz_path
,
psz_line
);
p_sys
->
url
.
psz_path
,
psz_line
);
free
(
psz_line
);
free
(
psz_line
);
...
@@ -806,9 +812,10 @@ static int ftp_StartStream( vlc_object_t *p_access, access_sys_t *p_sys,
...
@@ -806,9 +812,10 @@ static int ftp_StartStream( vlc_object_t *p_access, access_sys_t *p_sys,
else
else
{
{
/* "1xx" message */
/* "1xx" message */
assert
(
p_sys
->
url
.
psz_path
);
if
(
ftp_SendCommand
(
p_access
,
p_sys
,
"%s %s"
,
if
(
ftp_SendCommand
(
p_access
,
p_sys
,
"%s %s"
,
p_sys
->
out
?
"STOR"
:
"RETR"
,
p_sys
->
out
?
"STOR"
:
"RETR"
,
p_sys
->
url
.
psz_path
?
p_sys
->
url
.
psz_path
:
""
)
<
0
p_sys
->
url
.
psz_path
)
<
0
||
ftp_ReadCommand
(
p_access
,
p_sys
,
&
i_answer
,
NULL
)
>
2
)
||
ftp_ReadCommand
(
p_access
,
p_sys
,
&
i_answer
,
NULL
)
>
2
)
{
{
msg_Err
(
p_access
,
"cannot retrieve file"
);
msg_Err
(
p_access
,
"cannot retrieve file"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment