Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
8a6d673e
Commit
8a6d673e
authored
Jul 29, 2012
by
Paul B Mahol
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
flacdec: fix memleaks
While here refactor code. Signed-off-by:
Paul B Mahol
<
onemda@gmail.com
>
parent
753a1b09
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
19 additions
and
20 deletions
+19
-20
flacdec.c
libavformat/flacdec.c
+19
-20
No files found.
libavformat/flacdec.c
View file @
8a6d673e
...
@@ -28,6 +28,8 @@
...
@@ -28,6 +28,8 @@
#include "vorbiscomment.h"
#include "vorbiscomment.h"
#include "libavcodec/bytestream.h"
#include "libavcodec/bytestream.h"
#define RETURN_ERROR(code) do { ret = (code); goto fail; } while (0)
static
int
parse_picture
(
AVFormatContext
*
s
,
uint8_t
*
buf
,
int
buf_size
)
static
int
parse_picture
(
AVFormatContext
*
s
,
uint8_t
*
buf
,
int
buf_size
)
{
{
const
CodecMime
*
mime
=
ff_id3v2_mime_tags
;
const
CodecMime
*
mime
=
ff_id3v2_mime_tags
;
...
@@ -47,8 +49,7 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
...
@@ -47,8 +49,7 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
if
(
type
>=
FF_ARRAY_ELEMS
(
ff_id3v2_picture_types
)
||
type
<
0
)
{
if
(
type
>=
FF_ARRAY_ELEMS
(
ff_id3v2_picture_types
)
||
type
<
0
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Invalid picture type: %d.
\n
"
,
type
);
av_log
(
s
,
AV_LOG_ERROR
,
"Invalid picture type: %d.
\n
"
,
type
);
if
(
s
->
error_recognition
&
AV_EF_EXPLODE
)
{
if
(
s
->
error_recognition
&
AV_EF_EXPLODE
)
{
ret
=
AVERROR_INVALIDDATA
;
RETURN_ERROR
(
AVERROR_INVALIDDATA
);
goto
fail
;
}
}
type
=
0
;
type
=
0
;
}
}
...
@@ -84,8 +85,7 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
...
@@ -84,8 +85,7 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
len
=
avio_rb32
(
pb
);
len
=
avio_rb32
(
pb
);
if
(
len
>
0
)
{
if
(
len
>
0
)
{
if
(
!
(
desc
=
av_malloc
(
len
+
1
)))
{
if
(
!
(
desc
=
av_malloc
(
len
+
1
)))
{
ret
=
AVERROR
(
ENOMEM
);
RETURN_ERROR
(
AVERROR
(
ENOMEM
));
goto
fail
;
}
}
if
(
avio_read
(
pb
,
desc
,
len
)
!=
len
)
{
if
(
avio_read
(
pb
,
desc
,
len
)
!=
len
)
{
...
@@ -111,8 +111,7 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
...
@@ -111,8 +111,7 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
goto
fail
;
goto
fail
;
}
}
if
(
!
(
data
=
av_malloc
(
len
)))
{
if
(
!
(
data
=
av_malloc
(
len
)))
{
ret
=
AVERROR
(
ENOMEM
);
RETURN_ERROR
(
AVERROR
(
ENOMEM
));
goto
fail
;
}
}
if
(
avio_read
(
pb
,
data
,
len
)
!=
len
)
{
if
(
avio_read
(
pb
,
data
,
len
)
!=
len
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"Error reading attached picture data.
\n
"
);
av_log
(
s
,
AV_LOG_ERROR
,
"Error reading attached picture data.
\n
"
);
...
@@ -123,8 +122,7 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
...
@@ -123,8 +122,7 @@ static int parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size)
st
=
avformat_new_stream
(
s
,
NULL
);
st
=
avformat_new_stream
(
s
,
NULL
);
if
(
!
st
)
{
if
(
!
st
)
{
ret
=
AVERROR
(
ENOMEM
);
RETURN_ERROR
(
AVERROR
(
ENOMEM
));
goto
fail
;
}
}
av_init_packet
(
&
st
->
attached_pic
);
av_init_packet
(
&
st
->
attached_pic
);
...
@@ -190,8 +188,7 @@ static int flac_read_header(AVFormatContext *s)
...
@@ -190,8 +188,7 @@ static int flac_read_header(AVFormatContext *s)
return
AVERROR
(
ENOMEM
);
return
AVERROR
(
ENOMEM
);
}
}
if
(
avio_read
(
s
->
pb
,
buffer
,
metadata_size
)
!=
metadata_size
)
{
if
(
avio_read
(
s
->
pb
,
buffer
,
metadata_size
)
!=
metadata_size
)
{
av_freep
(
&
buffer
);
RETURN_ERROR
(
AVERROR
(
EIO
));
return
AVERROR
(
EIO
);
}
}
break
;
break
;
/* skip metadata block for unsupported types */
/* skip metadata block for unsupported types */
...
@@ -205,12 +202,10 @@ static int flac_read_header(AVFormatContext *s)
...
@@ -205,12 +202,10 @@ static int flac_read_header(AVFormatContext *s)
FLACStreaminfo
si
;
FLACStreaminfo
si
;
/* STREAMINFO can only occur once */
/* STREAMINFO can only occur once */
if
(
found_streaminfo
)
{
if
(
found_streaminfo
)
{
av_freep
(
&
buffer
);
RETURN_ERROR
(
AVERROR_INVALIDDATA
);
return
AVERROR_INVALIDDATA
;
}
}
if
(
metadata_size
!=
FLAC_STREAMINFO_SIZE
)
{
if
(
metadata_size
!=
FLAC_STREAMINFO_SIZE
)
{
av_freep
(
&
buffer
);
RETURN_ERROR
(
AVERROR_INVALIDDATA
);
return
AVERROR_INVALIDDATA
;
}
}
found_streaminfo
=
1
;
found_streaminfo
=
1
;
st
->
codec
->
extradata
=
buffer
;
st
->
codec
->
extradata
=
buffer
;
...
@@ -232,24 +227,25 @@ static int flac_read_header(AVFormatContext *s)
...
@@ -232,24 +227,25 @@ static int flac_read_header(AVFormatContext *s)
const
uint8_t
*
offset
;
const
uint8_t
*
offset
;
int
i
,
chapters
,
track
,
ti
;
int
i
,
chapters
,
track
,
ti
;
if
(
metadata_size
<
431
)
if
(
metadata_size
<
431
)
return
AVERROR_INVALIDDATA
;
RETURN_ERROR
(
AVERROR_INVALIDDATA
)
;
offset
=
buffer
+
395
;
offset
=
buffer
+
395
;
chapters
=
bytestream_get_byte
(
&
offset
)
-
1
;
chapters
=
bytestream_get_byte
(
&
offset
)
-
1
;
if
(
chapters
<=
0
)
if
(
chapters
<=
0
)
return
AVERROR_INVALIDDATA
;
RETURN_ERROR
(
AVERROR_INVALIDDATA
)
;
for
(
i
=
0
;
i
<
chapters
;
i
++
)
{
for
(
i
=
0
;
i
<
chapters
;
i
++
)
{
if
(
offset
+
36
-
buffer
>
metadata_size
)
if
(
offset
+
36
-
buffer
>
metadata_size
)
return
AVERROR_INVALIDDATA
;
RETURN_ERROR
(
AVERROR_INVALIDDATA
)
;
start
=
bytestream_get_be64
(
&
offset
);
start
=
bytestream_get_be64
(
&
offset
);
track
=
bytestream_get_byte
(
&
offset
);
track
=
bytestream_get_byte
(
&
offset
);
bytestream_get_buffer
(
&
offset
,
isrc
,
12
);
bytestream_get_buffer
(
&
offset
,
isrc
,
12
);
isrc
[
12
]
=
0
;
isrc
[
12
]
=
0
;
offset
+=
14
;
offset
+=
14
;
ti
=
bytestream_get_byte
(
&
offset
);
ti
=
bytestream_get_byte
(
&
offset
);
if
(
ti
<=
0
)
return
AVERROR_INVALIDDATA
;
if
(
ti
<=
0
)
RETURN_ERROR
(
AVERROR_INVALIDDATA
)
;
offset
+=
ti
*
12
;
offset
+=
ti
*
12
;
avpriv_new_chapter
(
s
,
track
,
st
->
time_base
,
start
,
AV_NOPTS_VALUE
,
isrc
);
avpriv_new_chapter
(
s
,
track
,
st
->
time_base
,
start
,
AV_NOPTS_VALUE
,
isrc
);
}
}
av_freep
(
&
buffer
);
}
else
if
(
metadata_type
==
FLAC_METADATA_TYPE_PICTURE
)
{
}
else
if
(
metadata_type
==
FLAC_METADATA_TYPE_PICTURE
)
{
ret
=
parse_picture
(
s
,
buffer
,
metadata_size
);
ret
=
parse_picture
(
s
,
buffer
,
metadata_size
);
av_freep
(
&
buffer
);
av_freep
(
&
buffer
);
...
@@ -260,8 +256,7 @@ static int flac_read_header(AVFormatContext *s)
...
@@ -260,8 +256,7 @@ static int flac_read_header(AVFormatContext *s)
}
else
{
}
else
{
/* STREAMINFO must be the first block */
/* STREAMINFO must be the first block */
if
(
!
found_streaminfo
)
{
if
(
!
found_streaminfo
)
{
av_freep
(
&
buffer
);
RETURN_ERROR
(
AVERROR_INVALIDDATA
);
return
AVERROR_INVALIDDATA
;
}
}
/* process supported blocks other than STREAMINFO */
/* process supported blocks other than STREAMINFO */
if
(
metadata_type
==
FLAC_METADATA_TYPE_VORBIS_COMMENT
)
{
if
(
metadata_type
==
FLAC_METADATA_TYPE_VORBIS_COMMENT
)
{
...
@@ -274,6 +269,10 @@ static int flac_read_header(AVFormatContext *s)
...
@@ -274,6 +269,10 @@ static int flac_read_header(AVFormatContext *s)
}
}
return
0
;
return
0
;
fail:
av_free
(
buffer
);
return
ret
;
}
}
static
int
flac_probe
(
AVProbeData
*
p
)
static
int
flac_probe
(
AVProbeData
*
p
)
...
...
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