[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