[Libreoffice] Question about Possible null pointer dereference in SpellDialog.cxx (cui one)

julien2412 serval2412 at yahoo.fr
Fri Sep 16 16:29:57 PDT 2011


Hello,

cppcheck detected this on core/cui/source/dialogs/SpellDialog.cxx
1534	nullPointer	error	Possible null pointer dereference: pNewError
1538	nullPointer	error	Possible null pointer dereference: pNewError
1555	nullPointer	error	Possible null pointer dereference: pNewError
1559	nullPointer	error	Possible null pointer dereference: pNewError
1570	nullPointer	error	Possible null pointer dereference: pNewBack
1595	nullPointer	error	Possible null pointer dereference: pNewError
1751	nullPointer	error	Possible null pointer dereference: pNewBackground

I tried to understand with the first one :
 1530           TextAttrib* pNewError =  NULL;
                    sal_uInt16 nStart = pErrorAttrLeft->GetStart();
                    sal_uInt16 nEnd = pErrorAttrLeft->GetEnd();
                    pTextEngine->RemoveAttrib( 0, *pErrorAttrLeft );
  1534          SetAttrib( *pNewError, 0, nStart, ++nEnd );

Then i went there :
   1825 void SentenceEditWindow_Impl::SetAttrib( const TextAttrib& rAttr,
sal_uLong nPara, sal_uInt16 nStart, sal_uInt16 nEnd )
   1826 {
   1827     GetTextEngine()->SetAttrib(rAttr, nPara, nStart, nEnd);
   1828 }

Then here :
void TextEngine::SetAttrib( const TextAttrib& rAttr, sal_uLong nPara,
sal_uInt16 nStart, sal_uInt16 nEnd, sal_Bool bIdleFormatAndUpdate )
   2775 {
   2776     // Es wird hier erstmal nicht geprueft, ob sich Attribute
ueberlappen!
   2777     // Diese Methode ist erstmal nur fuer einen Editor, der fuer
eine Zeile
   2778     // _schnell_ das Syntax-Highlight einstellen will.
   2779 
   2780     // Da die TextEngine z.Zt fuer Editoren gedacht ist gibt es auch
kein
   2781     // Undo fuer Attribute!
   2782 
   2783     if ( nPara < mpDoc->GetNodes().Count() )
   2784     {
   2785         TextNode* pNode = mpDoc->GetNodes().GetObject( nPara );
   2786         TEParaPortion* pTEParaPortion = mpTEParaPortions->GetObject(
nPara );
   2787 
   2788         sal_uInt16 nMax = pNode->GetText().Len();
   2789         if ( nStart > nMax )
   2790             nStart = nMax;
   2791         if ( nEnd > nMax )
   2792             nEnd = nMax;
   2793 
   2794         pNode->GetCharAttribs().InsertAttrib( new TextCharAttrib(
rAttr, nStart, nEnd ) );

     56 TextCharAttrib::TextCharAttrib( const TextAttrib& rAttr, sal_uInt16
nStart, sal_uInt16 nEnd )
     57 {
     58     mpAttr = rAttr.Clone();
     59     mnStart = nStart,
     60     mnEnd = nEnd;
     61 }


I found that before the commit  d54c3ad1518e32938117c7e529dda375d4110888,
most (all?) of these variables were initialized. For example like this :
TextAttrib* pNewError =  pErrorAttrib->GetAttr().Clone();

I supposed there was certainly a good reason, but I don't know how can it
works now. Of course, I wouldn't have noticed this without cppcheck report.

Julien.



--
View this message in context: http://nabble.documentfoundation.org/Question-about-Possible-null-pointer-dereference-in-SpellDialog-cxx-cui-one-tp3343305p3343305.html
Sent from the Dev mailing list archive at Nabble.com.


More information about the LibreOffice mailing list