webmdec/tests: fix leak when file isn't read to eof
the nestegg packet was only freed by subsequent reads Change-Id: Ib687a13907861c7575830783e47a596d85169cf1
This commit is contained in:
@@ -90,8 +90,12 @@ class WebMVideoSource : public CompressedVideoSource {
|
|||||||
virtual ~WebMVideoSource() {
|
virtual ~WebMVideoSource() {
|
||||||
if (input_file_)
|
if (input_file_)
|
||||||
fclose(input_file_);
|
fclose(input_file_);
|
||||||
if (nestegg_ctx_)
|
if (nestegg_ctx_ != NULL) {
|
||||||
|
if (pkt_ != NULL) {
|
||||||
|
nestegg_free_packet(pkt_);
|
||||||
|
}
|
||||||
nestegg_destroy(nestegg_ctx_);
|
nestegg_destroy(nestegg_ctx_);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Init() {
|
virtual void Init() {
|
||||||
@@ -136,8 +140,10 @@ class WebMVideoSource : public CompressedVideoSource {
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
/* End of this packet, get another. */
|
/* End of this packet, get another. */
|
||||||
if (pkt_)
|
if (pkt_ != NULL) {
|
||||||
nestegg_free_packet(pkt_);
|
nestegg_free_packet(pkt_);
|
||||||
|
pkt_ = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int again = nestegg_read_packet(nestegg_ctx_, &pkt_);
|
int again = nestegg_read_packet(nestegg_ctx_, &pkt_);
|
||||||
ASSERT_GE(again, 0) << "nestegg_read_packet failed";
|
ASSERT_GE(again, 0) << "nestegg_read_packet failed";
|
||||||
|
@@ -117,8 +117,10 @@ int webm_read_frame(struct WebmInputContext *webm_ctx,
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
/* End of this packet, get another. */
|
/* End of this packet, get another. */
|
||||||
if (webm_ctx->pkt)
|
if (webm_ctx->pkt) {
|
||||||
nestegg_free_packet(webm_ctx->pkt);
|
nestegg_free_packet(webm_ctx->pkt);
|
||||||
|
webm_ctx->pkt = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (nestegg_read_packet(webm_ctx->nestegg_ctx, &webm_ctx->pkt) <= 0 ||
|
if (nestegg_read_packet(webm_ctx->nestegg_ctx, &webm_ctx->pkt) <= 0 ||
|
||||||
nestegg_packet_track(webm_ctx->pkt, &track)) {
|
nestegg_packet_track(webm_ctx->pkt, &track)) {
|
||||||
@@ -188,6 +190,9 @@ int webm_guess_framerate(struct WebmInputContext *webm_ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void webm_free(struct WebmInputContext *webm_ctx) {
|
void webm_free(struct WebmInputContext *webm_ctx) {
|
||||||
if (webm_ctx && webm_ctx->nestegg_ctx)
|
if (webm_ctx && webm_ctx->nestegg_ctx) {
|
||||||
|
if (webm_ctx->pkt)
|
||||||
|
nestegg_free_packet(webm_ctx->pkt);
|
||||||
nestegg_destroy(webm_ctx->nestegg_ctx);
|
nestegg_destroy(webm_ctx->nestegg_ctx);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user