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:
James Zern
2013-12-13 19:03:08 -08:00
parent 64cf398713
commit c5aaf923d8
2 changed files with 15 additions and 4 deletions

View File

@@ -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";

View File

@@ -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);
}
} }