Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
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-1.1
Commits
d2dc7007
Commit
d2dc7007
authored
Oct 16, 2005
by
Jean-Paul Saman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix several segmentation faults
parent
907f220a
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
52 additions
and
44 deletions
+52
-44
src/input/subtitles.c
src/input/subtitles.c
+52
-44
No files found.
src/input/subtitles.c
View file @
d2dc7007
...
@@ -27,7 +27,6 @@
...
@@ -27,7 +27,6 @@
* This file contains functions to dectect subtitle files.
* This file contains functions to dectect subtitle files.
*/
*/
#include <stdlib.h>
#include <stdlib.h>
#include <vlc/vlc.h>
#include <vlc/vlc.h>
#include <vlc/input.h>
#include <vlc/input.h>
...
@@ -65,7 +64,6 @@ static const char * sub_exts[] = { "utf", "utf8", "utf-8", "sub", "srt", "smi",
...
@@ -65,7 +64,6 @@ static const char * sub_exts[] = { "utf", "utf8", "utf-8", "sub", "srt", "smi",
/* extensions from unsupported types */
/* extensions from unsupported types */
/* rt, aqt, jss, js, ass */
/* rt, aqt, jss, js, ass */
static
void
strcpy_trim
(
char
*
d
,
char
*
s
)
static
void
strcpy_trim
(
char
*
d
,
char
*
s
)
{
{
/* skip leading whitespace */
/* skip leading whitespace */
...
@@ -96,7 +94,8 @@ static void strcpy_trim( char *d, char *s )
...
@@ -96,7 +94,8 @@ static void strcpy_trim( char *d, char *s )
static
void
strcpy_strip_ext
(
char
*
d
,
char
*
s
)
static
void
strcpy_strip_ext
(
char
*
d
,
char
*
s
)
{
{
char
*
tmp
=
strrchr
(
s
,
'.'
);
char
*
tmp
=
strrchr
(
s
,
'.'
);
if
(
!
tmp
)
{
if
(
!
tmp
)
{
strcpy
(
d
,
s
);
strcpy
(
d
,
s
);
return
;
return
;
}
}
...
@@ -162,7 +161,7 @@ static int compare_sub_priority( const void *a, const void *b )
...
@@ -162,7 +161,7 @@ static int compare_sub_priority( const void *a, const void *b )
static
int
Filter
(
const
struct
dirent
*
p_dir_content
)
static
int
Filter
(
const
struct
dirent
*
p_dir_content
)
{
{
int
i
;
int
i
;
char
*
tmp
;
char
*
tmp
=
NULL
;
if
(
p_dir_content
==
NULL
||
p_dir_content
->
d_name
==
NULL
)
return
VLC_FALSE
;
if
(
p_dir_content
==
NULL
||
p_dir_content
->
d_name
==
NULL
)
return
VLC_FALSE
;
/* does it end with a subtitle extension? */
/* does it end with a subtitle extension? */
...
@@ -193,6 +192,9 @@ static char **paths_to_list( char *psz_dir, char *psz_path )
...
@@ -193,6 +192,9 @@ static char **paths_to_list( char *psz_dir, char *psz_path )
unsigned
int
i
,
k
,
i_nb_subdirs
;
unsigned
int
i
,
k
,
i_nb_subdirs
;
char
**
subdirs
;
/* list of subdirectories to look in */
char
**
subdirs
;
/* list of subdirectories to look in */
if
(
!
psz_dir
)
return
NULL
;
if
(
!
psz_path
)
return
NULL
;
i_nb_subdirs
=
1
;
i_nb_subdirs
=
1
;
for
(
k
=
0
;
k
<
strlen
(
psz_path
);
k
++
)
for
(
k
=
0
;
k
<
strlen
(
psz_path
);
k
++
)
{
{
...
@@ -204,7 +206,7 @@ static char **paths_to_list( char *psz_dir, char *psz_path )
...
@@ -204,7 +206,7 @@ static char **paths_to_list( char *psz_dir, char *psz_path )
if
(
i_nb_subdirs
>
0
)
if
(
i_nb_subdirs
>
0
)
{
{
char
*
psz_parser
,
*
psz_temp
;
char
*
psz_parser
=
NULL
,
*
psz_temp
=
NULL
;
subdirs
=
(
char
**
)
malloc
(
sizeof
(
char
*
)
*
(
i_nb_subdirs
+
1
)
);
subdirs
=
(
char
**
)
malloc
(
sizeof
(
char
*
)
*
(
i_nb_subdirs
+
1
)
);
memset
(
subdirs
,
0
,
sizeof
(
char
*
)
*
(
i_nb_subdirs
+
1
)
);
memset
(
subdirs
,
0
,
sizeof
(
char
*
)
*
(
i_nb_subdirs
+
1
)
);
...
@@ -270,8 +272,8 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
...
@@ -270,8 +272,8 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
{
{
vlc_value_t
fuzzy
;
vlc_value_t
fuzzy
;
int
j
,
i_result2
,
i_dir_content
,
i_sub_count
=
0
,
i_fname_len
=
0
;
int
j
,
i_result2
,
i_dir_content
,
i_sub_count
=
0
,
i_fname_len
=
0
;
char
*
f_dir
,
*
f_fname
,
*
f_fname_noext
,
*
f_fname_trim
;
char
*
f_dir
=
NULL
,
*
f_fname
=
NULL
,
*
f_fname_noext
=
NULL
,
*
f_fname_trim
=
NULL
;
char
*
tmp
;
char
*
tmp
=
NULL
;
char
tmp_fname_noext
[
PATH_MAX
];
char
tmp_fname_noext
[
PATH_MAX
];
char
tmp_fname_trim
[
PATH_MAX
];
char
tmp_fname_trim
[
PATH_MAX
];
...
@@ -280,7 +282,7 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
...
@@ -280,7 +282,7 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
struct
dirent
**
pp_dir_content
;
struct
dirent
**
pp_dir_content
;
char
**
tmp_subdirs
,
**
subdirs
;
/* list of subdirectories to look in */
char
**
tmp_subdirs
,
**
subdirs
;
/* list of subdirectories to look in */
subfn
*
result
;
/* unsorted results */
subfn
*
result
=
NULL
;
/* unsorted results */
char
**
result2
;
/* sorted results */
char
**
result2
;
/* sorted results */
char
*
psz_fname_original
=
strdup
(
psz_name
);
char
*
psz_fname_original
=
strdup
(
psz_name
);
...
@@ -295,13 +297,18 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
...
@@ -295,13 +297,18 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
tmp
=
strrchr
(
psz_fname
,
DIRECTORY_SEPARATOR
);
tmp
=
strrchr
(
psz_fname
,
DIRECTORY_SEPARATOR
);
if
(
tmp
)
if
(
tmp
)
{
{
int
dirlen
;
int
dirlen
=
0
;
f_fname
=
malloc
(
strlen
(
tmp
)
);
f_fname
=
malloc
(
strlen
(
tmp
)
);
if
(
f_fname
)
strcpy
(
f_fname
,
tmp
+
1
);
// we skip the seperator, so it will still fit in the allocated space
strcpy
(
f_fname
,
tmp
+
1
);
// we skip the seperator, so it will still fit in the allocated space
dirlen
=
strlen
(
psz_fname
)
-
strlen
(
tmp
);
dirlen
=
strlen
(
psz_fname
)
-
strlen
(
tmp
);
f_dir
=
malloc
(
dirlen
+
1
);
f_dir
=
malloc
(
dirlen
+
1
);
if
(
f_dir
)
{
strncpy
(
f_dir
,
psz_fname
,
dirlen
+
1
);
strncpy
(
f_dir
,
psz_fname
,
dirlen
+
1
);
f_dir
[
dirlen
+
1
]
=
0
;
f_dir
[
dirlen
]
=
0
;
}
}
}
else
else
{
{
...
@@ -316,6 +323,7 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
...
@@ -316,6 +323,7 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
strcpy_trim
(
f_fname_trim
,
f_fname_noext
);
strcpy_trim
(
f_fname_trim
,
f_fname_noext
);
result
=
(
subfn
*
)
malloc
(
sizeof
(
subfn
)
*
MAX_SUBTITLE_FILES
);
result
=
(
subfn
*
)
malloc
(
sizeof
(
subfn
)
*
MAX_SUBTITLE_FILES
);
if
(
result
)
memset
(
result
,
0
,
sizeof
(
subfn
)
*
MAX_SUBTITLE_FILES
);
memset
(
result
,
0
,
sizeof
(
subfn
)
*
MAX_SUBTITLE_FILES
);
var_Get
(
p_this
,
"sub-autodetect-fuzzy"
,
&
fuzzy
);
var_Get
(
p_this
,
"sub-autodetect-fuzzy"
,
&
fuzzy
);
...
@@ -323,7 +331,7 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
...
@@ -323,7 +331,7 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
tmp_subdirs
=
paths_to_list
(
f_dir
,
psz_path
);
tmp_subdirs
=
paths_to_list
(
f_dir
,
psz_path
);
subdirs
=
tmp_subdirs
;
subdirs
=
tmp_subdirs
;
for
(
j
=
-
1
;
j
==
-
1
||
(
j
>=
0
&&
subdirs
!=
NULL
&&
*
subdirs
!=
NULL
);
for
(
j
=
-
1
;
(
j
==
-
1
)
||
(
(
j
>=
0
)
&&
(
subdirs
!=
NULL
)
&&
(
*
subdirs
!=
NULL
)
);
j
++
)
j
++
)
{
{
pp_dir_content
=
NULL
;
pp_dir_content
=
NULL
;
...
@@ -334,8 +342,8 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
...
@@ -334,8 +342,8 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
NULL
)
)
!=
-
1
)
NULL
)
)
!=
-
1
)
{
{
int
a
;
int
a
;
msg_Dbg
(
p_this
,
"looking for a subtitle file in %s"
,
j
<
0
?
f_dir
:
*
subdirs
);
msg_Dbg
(
p_this
,
"looking for a subtitle file in %s"
,
j
<
0
?
f_dir
:
*
subdirs
);
for
(
a
=
0
;
a
<
i_dir_content
;
a
++
)
for
(
a
=
0
;
a
<
i_dir_content
;
a
++
)
{
{
int
i_prio
=
0
;
int
i_prio
=
0
;
...
@@ -400,15 +408,16 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
...
@@ -400,15 +408,16 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
if
(
j
>=
0
)
free
(
*
subdirs
++
);
if
(
j
>=
0
)
free
(
*
subdirs
++
);
}
}
if
(
tmp_subdirs
)
free
(
tmp_subdirs
);
if
(
tmp_subdirs
)
free
(
tmp_subdirs
);
if
(
f_fname_trim
)
free
(
f_fname_trim
);
if
(
f_fname_trim
)
free
(
f_fname_trim
);
if
(
f_fname_noext
)
free
(
f_fname_noext
);
if
(
f_fname_noext
)
free
(
f_fname_noext
);
if
(
f_fname
)
free
(
f_fname
);
if
(
f_fname
)
free
(
f_fname
);
if
(
f_dir
)
free
(
f_dir
);
if
(
f_dir
)
free
(
f_dir
);
qsort
(
result
,
i_sub_count
,
sizeof
(
subfn
),
compare_sub_priority
);
qsort
(
result
,
i_sub_count
,
sizeof
(
subfn
),
compare_sub_priority
);
result2
=
(
char
**
)
malloc
(
sizeof
(
char
*
)
*
(
i_sub_count
+
1
)
);
result2
=
(
char
**
)
malloc
(
sizeof
(
char
*
)
*
(
i_sub_count
+
1
)
);
if
(
result2
)
memset
(
result2
,
0
,
sizeof
(
char
*
)
*
(
i_sub_count
+
1
)
);
memset
(
result2
,
0
,
sizeof
(
char
*
)
*
(
i_sub_count
+
1
)
);
i_result2
=
0
;
i_result2
=
0
;
...
@@ -423,7 +432,6 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
...
@@ -423,7 +432,6 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
!
strncasecmp
(
result
[
j
].
psz_fname
,
result
[
i
].
psz_fname
,
sizeof
(
result
[
j
].
psz_fname
)
-
4
)
&&
!
strncasecmp
(
result
[
j
].
psz_fname
,
result
[
i
].
psz_fname
,
sizeof
(
result
[
j
].
psz_fname
)
-
4
)
&&
!
strcasecmp
(
result
[
i
].
psz_ext
,
"idx"
)
)
!
strcasecmp
(
result
[
i
].
psz_ext
,
"idx"
)
)
break
;
break
;
}
}
if
(
i
>=
i_sub_count
)
if
(
i
>=
i_sub_count
)
{
{
...
@@ -438,7 +446,7 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
...
@@ -438,7 +446,7 @@ char **subtitles_Detect( input_thread_t *p_this, char *psz_path,
}
}
}
}
free
(
psz_fname_original
);
if
(
psz_fname_original
)
free
(
psz_fname_original
);
free
(
result
);
if
(
result
)
free
(
result
);
return
result2
;
return
result2
;
}
}
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