Bug Summary

File:home/maarten/src/libreoffice/core/lotuswordpro/source/filter/utlist.hxx
Warning:line 76, column 37
Use of memory after it is freed

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name utlist.cxx -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=cplusplus -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -mframe-pointer=all -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib64/clang/11.0.0 -D BOOST_ERROR_CODE_HEADER_ONLY -D BOOST_SYSTEM_NO_DEPRECATED -D CPPU_ENV=gcc3 -D LINUX -D OSL_DEBUG_LEVEL=1 -D SAL_LOG_INFO -D SAL_LOG_WARN -D UNIX -D UNX -D X86_64 -D _PTHREADS -D _REENTRANT -D EXCEPTIONS_ON -D LIBO_INTERNAL_ONLY -I /home/maarten/src/libreoffice/core/workdir/UnpackedTarball/icu/source -I /home/maarten/src/libreoffice/core/workdir/UnpackedTarball/icu/source/i18n -I /home/maarten/src/libreoffice/core/workdir/UnpackedTarball/icu/source/common -I /home/maarten/src/libreoffice/core/external/boost/include -I /home/maarten/src/libreoffice/core/workdir/UnpackedTarball/boost -I /home/maarten/src/libreoffice/core/include -I /usr/lib/jvm/java-11-openjdk-11.0.9.10-0.0.ea.fc33.x86_64/include -I /usr/lib/jvm/java-11-openjdk-11.0.9.10-0.0.ea.fc33.x86_64/include/linux -I /home/maarten/src/libreoffice/core/config_host -I /home/maarten/src/libreoffice/core/workdir/UnoApiHeadersTarget/udkapi/normal -I /home/maarten/src/libreoffice/core/workdir/UnoApiHeadersTarget/offapi/normal -I /home/maarten/src/libreoffice/core/lotuswordpro/inc -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10 -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/x86_64-redhat-linux -internal-isystem /usr/bin/../lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/backward -internal-isystem /usr/local/include -internal-isystem /usr/lib64/clang/11.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -O0 -Wno-missing-braces -std=c++17 -fdeprecated-macro -fdebug-compilation-dir /home/maarten/src/libreoffice/core -ferror-limit 19 -fvisibility hidden -fvisibility-inlines-hidden -stack-protector 2 -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -debug-info-kind=constructor -analyzer-output=html -faddrsig -o /home/maarten/tmp/wis/scan-build-libreoffice/output/report/2020-10-07-141433-9725-1 -x c++ /home/maarten/src/libreoffice/core/lotuswordpro/source/filter/utlist.cxx

/home/maarten/src/libreoffice/core/lotuswordpro/source/filter/utlist.cxx

1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*************************************************************************
3 *
4 * The Contents of this file are made available subject to the terms of
5 * either of the following licenses
6 *
7 * - GNU Lesser General Public License Version 2.1
8 * - Sun Industry Standards Source License Version 1.1
9 *
10 * Sun Microsystems Inc., October, 2000
11 *
12 * GNU Lesser General Public License Version 2.1
13 * =============================================
14 * Copyright 2000 by Sun Microsystems, Inc.
15 * 901 San Antonio Road, Palo Alto, CA 94303, USA
16 *
17 * This library is free software; you can redistribute it and/or
18 * modify it under the terms of the GNU Lesser General Public
19 * License version 2.1, as published by the Free Software Foundation.
20 *
21 * This library is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 * Lesser General Public License for more details.
25 *
26 * You should have received a copy of the GNU Lesser General Public
27 * License along with this library; if not, write to the Free Software
28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
29 * MA 02111-1307 USA
30 *
31 *
32 * Sun Industry Standards Source License Version 1.1
33 * =================================================
34 * The contents of this file are subject to the Sun Industry Standards
35 * Source License Version 1.1 (the "License"); You may not use this file
36 * except in compliance with the License. You may obtain a copy of the
37 * License at http://www.openoffice.org/license.html.
38 *
39 * Software provided under this License is provided on an "AS IS" basis,
40 * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
41 * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
42 * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
43 * See the License for the specific provisions governing your rights and
44 * obligations concerning the Software.
45 *
46 * The Initial Developer of the Original Code is: IBM Corporation
47 *
48 * Copyright: 2008 by IBM Corporation
49 *
50 * All Rights Reserved.
51 *
52 * Contributor(s): _______________________________________
53 *
54 *
55 ************************************************************************/
56#include "utlist.hxx"
57namespace OpenStormBento
58{
59
60CUtListElmt::CUtListElmt(CUtList * pList)
61 : cpNext(nullptr)
62 , cpPrev(nullptr)
63{
64 if (pList != nullptr)
65 InsertAfter(pList->GetLast());
66}
67
68CUtListElmt::~CUtListElmt()
69{
70 if (cpNext != nullptr)
71 {
72 cpPrev->cpNext = cpNext;
73 cpNext->cpPrev = cpPrev;
74 }
75}
76
77CUtList::~CUtList()
78{
79 CUtListElmt& rTerminating = GetTerminating();
80 for (CUtListElmt * pCurr = GetFirst(); pCurr != &rTerminating; )
7
Calling 'CUtList::GetFirst'
81 {
82 CUtListElmt * pNext = pCurr->GetNext();
83 pCurr->MakeNotOnList();
84 pCurr = pNext;
85 }
86 rTerminating.SetPrev(&rTerminating);
87 rTerminating.SetNext(&rTerminating);
88}
89
90// If pCurr is NULL, returns first item in list. Otherwise, returns item
91// in list after pCurr or NULL if no more items in list. Terminating item
92// is never returned
93CUtListElmt *
94CUtList::GetNextOrNULL(CUtListElmt const * pCurr)
95{
96 CUtListElmt * pNext;
97
98 if (pCurr == nullptr)
99 pNext = GetFirst();
100 else pNext = pCurr->GetNext();
101 if (pNext == &GetTerminating())
102 pNext = nullptr;
103 return pNext;
104}
105
106void
107CUtList::Destroy()
108{
109 CUtListElmt& rTerminating = GetTerminating();
110 for (CUtListElmt * pCurr = GetFirst(); pCurr != &rTerminating; )
2
Loop condition is true. Entering loop body
4
Loop condition is false. Execution continues on line 110
111 {
112 CUtListElmt * pNext = pCurr->GetNext();
113 delete pCurr;
3
Memory is released
114 pCurr = pNext;
115 }
116}
117
118CUtOwningList::~CUtOwningList()
119{
120 Destroy();
1
Calling 'CUtList::Destroy'
5
Returning; memory was released
121}
6
Calling '~CUtList'
122}//end namespace OpenStormBento
123
124/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

/home/maarten/src/libreoffice/core/lotuswordpro/source/filter/utlist.hxx

1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*************************************************************************
3 *
4 * The Contents of this file are made available subject to the terms of
5 * either of the following licenses
6 *
7 * - GNU Lesser General Public License Version 2.1
8 * - Sun Industry Standards Source License Version 1.1
9 *
10 * Sun Microsystems Inc., October, 2000
11 *
12 * GNU Lesser General Public License Version 2.1
13 * =============================================
14 * Copyright 2000 by Sun Microsystems, Inc.
15 * 901 San Antonio Road, Palo Alto, CA 94303, USA
16 *
17 * This library is free software; you can redistribute it and/or
18 * modify it under the terms of the GNU Lesser General Public
19 * License version 2.1, as published by the Free Software Foundation.
20 *
21 * This library is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 * Lesser General Public License for more details.
25 *
26 * You should have received a copy of the GNU Lesser General Public
27 * License along with this library; if not, write to the Free Software
28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
29 * MA 02111-1307 USA
30 *
31 *
32 * Sun Industry Standards Source License Version 1.1
33 * =================================================
34 * The contents of this file are subject to the Sun Industry Standards
35 * Source License Version 1.1 (the "License"); You may not use this file
36 * except in compliance with the License. You may obtain a copy of the
37 * License at http://www.openoffice.org/license.html.
38 *
39 * Software provided under this License is provided on an "AS IS" basis,
40 * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
41 * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
42 * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
43 * See the License for the specific provisions governing your rights and
44 * obligations concerning the Software.
45 *
46 * The Initial Developer of the Original Code is: IBM Corporation
47 *
48 * Copyright: 2008 by IBM Corporation
49 *
50 * All Rights Reserved.
51 *
52 * Contributor(s): _______________________________________
53 *
54 *
55 ************************************************************************/
56#ifndef INCLUDED_LOTUSWORDPRO_SOURCE_FILTER_UTLIST_HXX
57#define INCLUDED_LOTUSWORDPRO_SOURCE_FILTER_UTLIST_HXX
58
59namespace OpenStormBento
60{
61
62class CUtList;
63
64class CUtListElmt
65{
66public: // Methods
67 CUtListElmt()
68 : cpNext(nullptr)
69 , cpPrev(nullptr)
70 {}
71 explicit CUtListElmt(CUtListElmt * pPrev) { InsertAfter(pPrev); }
72 explicit CUtListElmt(CUtList * pList);
73 virtual ~CUtListElmt();
74 void MakeNotOnList() { cpNext = nullptr; } // Same as Remove but doesn't
75 // patch up list
76 CUtListElmt * GetNext() const { return cpNext; }
9
Use of memory after it is freed
77 void SetNext(CUtListElmt * pNext) { cpNext = pNext; }
78 CUtListElmt * GetPrev() const { return cpPrev; }
79 void SetPrev(CUtListElmt * pPrev) { cpPrev = pPrev; }
80 void InsertAfter(CUtListElmt * pPrev)
81 {
82 cpNext = pPrev->cpNext;
83 cpPrev = pPrev;
84 cpNext->cpPrev = this;
85 pPrev->cpNext = this;
86 }
87
88private: // Data
89 CUtListElmt * cpNext;
90 CUtListElmt * cpPrev;
91};
92
93class CUtList
94{
95public: // Methods
96 CUtList() {
97 cDummyElmt.SetNext(&cDummyElmt);
98 cDummyElmt.SetPrev(&cDummyElmt);
99 }
100 virtual ~CUtList();
101 CUtListElmt * GetFirst() { return cDummyElmt.GetNext(); }
8
Calling 'CUtListElmt::GetNext'
102 CUtListElmt * GetLast() { return cDummyElmt.GetPrev(); }
103 CUtListElmt& GetTerminating() { return cDummyElmt; }
104 CUtListElmt * GetNextOrNULL(CUtListElmt const * pCurr);
105
106 void Destroy();
107
108private: // Data
109 CUtListElmt cDummyElmt;
110};
111
112class CUtOwningList : public CUtList
113{
114public: // Methods
115 virtual ~CUtOwningList() override;
116};
117}//end namespace OpenStormBento
118#endif
119
120/* vim:set shiftwidth=4 softtabstop=4 expandtab: */