vpxenc: die on realloc failures
authorJohn Koleszar <jkoleszar@google.com>
Wed, 30 Mar 2011 01:44:19 +0000 (21:44 -0400)
committerJohn Koleszar <jkoleszar@google.com>
Wed, 30 Mar 2011 10:37:02 +0000 (06:37 -0400)
Identified as a possible cause of issue #308, the code was silently
ignoring realloc failures, which would lead to corruption, memory
leaks, and likely a crash. The best we can do in this case is die
gracefully.

Change-Id: Ie5f6a853d367015be5b9712bd742778f3baeefd9

vpxenc.c

index 6c13cd1..39256b6 100755 (executable)
--- a/vpxenc.c
+++ b/vpxenc.c
@@ -236,7 +236,13 @@ void stats_write(stats_io_t *stats, const void *pkt, size_t len)
                 stats->buf_ptr = new_ptr + (stats->buf_ptr - (char *)stats->buf.buf);
                 stats->buf.buf = new_ptr;
                 stats->buf_alloc_sz = new_sz;
-            } /* else ... */
+            }
+            else
+            {
+                fprintf(stderr,
+                        "\nFailed to realloc firstpass stats buffer.\n");
+                exit(EXIT_FAILURE);
+            }
         }
 
         memcpy(stats->buf_ptr, pkt, len);
@@ -698,10 +704,18 @@ write_webm_block(EbmlGlobal                *glob,
         /* Save a cue point if this is a keyframe. */
         if(is_keyframe)
         {
-            struct cue_entry *cue;
+            struct cue_entry *cue, *new_cue_list;
+
+            new_cue_list = realloc(glob->cue_list,
+                                   (glob->cues+1) * sizeof(struct cue_entry));
+            if(new_cue_list)
+                glob->cue_list = new_cue_list;
+            else
+            {
+                fprintf(stderr, "\nFailed to realloc cue list.\n");
+                exit(EXIT_FAILURE);
+            }
 
-            glob->cue_list = realloc(glob->cue_list,
-                                     (glob->cues+1) * sizeof(struct cue_entry));
             cue = &glob->cue_list[glob->cues];
             cue->time = glob->cluster_timecode;
             cue->loc = glob->cluster_pos;