mkvparser: Segment::AppendCluster asserts to error checks.
Change-Id: Id6bb378b22a7c6397e3d950c2fdd84396279e881
This commit is contained in:
		@@ -1277,16 +1277,16 @@ long Segment::DoLoadClusterUnknownSize(long long& pos, long& len) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool Segment::AppendCluster(Cluster* pCluster) {
 | 
					bool Segment::AppendCluster(Cluster* pCluster) {
 | 
				
			||||||
  assert(pCluster);
 | 
					  if (pCluster == NULL || pCluster->m_index < 0)
 | 
				
			||||||
  assert(pCluster->m_index >= 0);
 | 
					    return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const long count = m_clusterCount + m_clusterPreloadCount;
 | 
					  const long count = m_clusterCount + m_clusterPreloadCount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  long& size = m_clusterSize;
 | 
					  long& size = m_clusterSize;
 | 
				
			||||||
  assert(size >= count);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  const long idx = pCluster->m_index;
 | 
					  const long idx = pCluster->m_index;
 | 
				
			||||||
  assert(idx == m_clusterCount);
 | 
					
 | 
				
			||||||
 | 
					  if (size < count || idx != m_clusterCount)
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (count >= size) {
 | 
					  if (count >= size) {
 | 
				
			||||||
    const long n = (size <= 0) ? 2048 : 2 * size;
 | 
					    const long n = (size <= 0) ? 2048 : 2 * size;
 | 
				
			||||||
@@ -1294,8 +1294,8 @@ bool Segment::AppendCluster(Cluster* pCluster) {
 | 
				
			|||||||
    Cluster** const qq = new (std::nothrow) Cluster*[n];
 | 
					    Cluster** const qq = new (std::nothrow) Cluster*[n];
 | 
				
			||||||
    if (qq == NULL)
 | 
					    if (qq == NULL)
 | 
				
			||||||
      return false;
 | 
					      return false;
 | 
				
			||||||
    Cluster** q = qq;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Cluster** q = qq;
 | 
				
			||||||
    Cluster** p = m_clusters;
 | 
					    Cluster** p = m_clusters;
 | 
				
			||||||
    Cluster** const pp = p + count;
 | 
					    Cluster** const pp = p + count;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1309,18 +1309,18 @@ bool Segment::AppendCluster(Cluster* pCluster) {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (m_clusterPreloadCount > 0) {
 | 
					  if (m_clusterPreloadCount > 0) {
 | 
				
			||||||
    assert(m_clusters);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    Cluster** const p = m_clusters + m_clusterCount;
 | 
					    Cluster** const p = m_clusters + m_clusterCount;
 | 
				
			||||||
    assert(*p);
 | 
					    if (*p == NULL || (*p)->m_index >= 0)
 | 
				
			||||||
    assert((*p)->m_index < 0);
 | 
					      return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Cluster** q = p + m_clusterPreloadCount;
 | 
					    Cluster** q = p + m_clusterPreloadCount;
 | 
				
			||||||
    assert(q < (m_clusters + size));
 | 
					    if (q >= (m_clusters + size))
 | 
				
			||||||
 | 
					      return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (;;) {
 | 
					    for (;;) {
 | 
				
			||||||
      Cluster** const qq = q - 1;
 | 
					      Cluster** const qq = q - 1;
 | 
				
			||||||
      assert((*qq)->m_index < 0);
 | 
					      if ((*qq)->m_index >= 0)
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      *q = *qq;
 | 
					      *q = *qq;
 | 
				
			||||||
      q = qq;
 | 
					      q = qq;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user