Index: media/webm/webm_stream_parser.cc |
diff --git a/media/webm/webm_stream_parser.cc b/media/webm/webm_stream_parser.cc |
index d141bfdd1525cb24cc7a232c62c5487e8d1750f8..e9c8233e281e05be5ca53384c2394fab671d5d82 100644 |
--- a/media/webm/webm_stream_parser.cc |
+++ b/media/webm/webm_stream_parser.cc |
@@ -235,7 +235,8 @@ bool WebMStreamParser::Parse(const uint8* buf, int size) { |
int cur_size = 0; |
byte_queue_.Peek(&cur, &cur_size); |
- do { |
+ while (cur_size > 0) { |
+ State oldState = state_; |
switch (state_) { |
case kParsingHeaders: |
result = ParseInfoAndTracks(cur, cur_size); |
@@ -255,10 +256,14 @@ bool WebMStreamParser::Parse(const uint8* buf, int size) { |
return false; |
} |
+ if (state_ == oldState && result == 0) |
+ break; |
+ |
+ DCHECK_GE(result, 0); |
cur += result; |
cur_size -= result; |
bytes_parsed += result; |
- } while (result > 0 && cur_size > 0); |
+ } |
byte_queue_.Pop(bytes_parsed); |
return true; |