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