<html><body><span class="xfm_25998980">Hi,<div><br/></div><div>I have found something...</div><div>For H323ExtendedVideoCapability::AddAllCapabilities function we are using H323CodecExtendedVideoCapability::AddCapability function for extCapability->AddCapability(*r).</div><div>H323CodecExtendedVideoCapability::AddCapability function uses extCapabilities.Add(H323ExtendedVideoFactory::CreateInstance(cap)) function. The function H323ExtendedVideoFactory::CreateInstance(cap) will call "new" if any same "cap" does not is exists for now< for other case it will return the pointer to current actual Capability. But H323CodecExtendedVideoCapability::extCapabilities will delete all items in time of execution </div><div>extCapabilities.RemoveAll() function from H323CodecExtendedVideoCapability::~H323CodecExtendedVideoCapability(). In result we have "double delete" and undefined behavior (crash for worst case).<br/></div><div><br/></div><div>--------------------------------</div><div><br/></div><div><div>void H323ExtendedVideoCapability::AddAllCapabilities(</div><div>      H323Capabilities & basecapabilities, PINDEX descriptorNum,PINDEX simultaneous)</div><div>{</div><div>  H323ExtendedVideoFactory::KeyList_T extCaps = H323ExtendedVideoFactory::GetKeyList();</div><div>  if (extCaps.size() > 0) {</div><div>    H323CodecExtendedVideoCapability * capability = new H323CodecExtendedVideoCapability();</div><div>    H323ExtendedVideoFactory::KeyList_T::const_iterator r;</div><div>        PINDEX num = P_MAX_INDEX;</div><div>        for (r = extCaps.begin(); r != extCaps.end(); ++r) {</div><div>           H323CodecExtendedVideoCapability * extCapability = (H323CodecExtendedVideoCapability *)capability->Clone();</div><div>           extCapability->AddCapability(*r);</div><div>           num = basecapabilities.SetCapability(descriptorNum, simultaneous,extCapability);</div><div>           simultaneous = num;</div><div>        }</div><div>    simultaneous = P_MAX_INDEX;</div><div>    basecapabilities.SetCapability(descriptorNum, simultaneous,new H323ControlExtendedVideoCapability());</div><div>    delete capability;</div><div>  } </div><div>}</div></div><div><br/></div><div><div>void H323CodecExtendedVideoCapability::AddCapability(const PString & cap)</div><div>{</div><div>    extCapabilities.Add(H323ExtendedVideoFactory::CreateInstance(cap));</div><div>}</div></div><div><br/></div><div><br/></div><div>-------------------------------------------------</div><div><br/></div><div><div>I propose to replace the "void H323CodecExtendedVideoCapability::AddCapability(const PString & cap)" to this one:</div><div><br/></div><div><div>void H323CodecExtendedVideoCapability::AddCapability(const PString & cap)</div><div>{</div><div>    extCapabilities.Add(H323ExtendedVideoFactory::CreateInstance(cap)->clone());</div><div>}</div></div></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div>Thanks</div><div>--</div><div>Iurii Gordiienko</div></span><img src="https://mail.ukr.net/api/public/message_read?a=nKmgvdFnKHmsk7uvZLEpXibmCNUzF87lU1NGebzEIRaleUcS2srd_e9yhYiMfmjk2T54SqWV9K_Bl-5oL7JgAyrwNyxOB3505CtjaqMEzlQ=" alt="" width="1" height="1" style="visibility: hidden; width: 1px; height: 1px;"/>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       </body></html>