Bug Summary

File:cppu/source/typelib/static_types.cxx
Location:line 409, column 25
Description:Access to field 'nSize' results in a dereference of a null pointer (loaded from variable 'pTD')

Annotated Source Code

1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include "sal/config.h"
21
22#include <algorithm>
23#include <cassert>
24#include <stdarg.h>
25
26#include <osl/mutex.hxx>
27#include <osl/interlck.h>
28#include <rtl/ustring.hxx>
29#include <rtl/ustrbuf.hxx>
30#include <rtl/memory.h>
31#include <rtl/instance.hxx>
32
33#include <typelib/typedescription.h>
34
35
36using namespace osl;
37
38using ::rtl::OUString;
39using ::rtl::OUStringBuffer;
40
41extern "C"
42{
43
44//------------------------------------------------------------------------
45sal_Int32 SAL_CALL typelib_typedescription_getAlignedUnoSize(
46 const typelib_TypeDescription * pTypeDescription,
47 sal_Int32 nOffset,
48 sal_Int32 & rMaxIntegralTypeSize )
49 SAL_THROW_EXTERN_C()throw ();
50//------------------------------------------------------------------------
51void SAL_CALL typelib_typedescription_newEmpty(
52 typelib_TypeDescription ** ppRet,
53 typelib_TypeClass eTypeClass,
54 rtl_uString * pTypeName )
55 SAL_THROW_EXTERN_C()throw ();
56//-----------------------------------------------------------------------------
57void SAL_CALL typelib_typedescriptionreference_getByName(
58 typelib_TypeDescriptionReference ** ppRet,
59 rtl_uString * pName )
60 SAL_THROW_EXTERN_C()throw ();
61
62#ifdef SAL_W32
63#pragma pack(push, 8)
64#endif
65
66/**
67 * The double member determin the alignment.
68 * Under Os2 and MS-Windows the Alignment is min( 8, sizeof( type ) ).
69 * The aligment of a strukture is min( 8, sizeof( max basic type ) ), the greatest basic type
70 * determine the aligment.
71 */
72struct AlignSize_Impl
73{
74 sal_Int16 nInt16;
75#ifdef AIX
76 //double: doubleword aligned if -qalign=natural/-malign=natural
77 //which isn't the default ABI. Otherwise word aligned, While a long long int
78 //is always doubleword aligned, so use that instead.
79 sal_Int64 dDouble;
80#else
81 double dDouble;
82#endif
83};
84
85#ifdef SAL_W32
86#pragma pack(pop)
87#endif
88
89// the value of the maximal alignment
90static sal_Int32 nMaxAlignment = (sal_Int32)( (sal_Size)(&((AlignSize_Impl *) 16)->dDouble) - 16);
91
92static inline sal_Int32 adjustAlignment( sal_Int32 nRequestedAlignment )
93 SAL_THROW(())
94{
95 if( nRequestedAlignment > nMaxAlignment )
96 nRequestedAlignment = nMaxAlignment;
97 return nRequestedAlignment;
98}
99
100/**
101 * Calculate the new size of the struktur.
102 */
103static inline sal_Int32 newAlignedSize(
104 sal_Int32 OldSize, sal_Int32 ElementSize, sal_Int32 NeededAlignment )
105 SAL_THROW(())
106{
107 NeededAlignment = adjustAlignment( NeededAlignment );
108 return (OldSize + NeededAlignment -1) / NeededAlignment * NeededAlignment + ElementSize;
109}
110
111//--------------------------------------------------------------------------------------------------
112
113namespace
114{
115 struct typelib_StaticInitMutex : public rtl::Static< Mutex, typelib_StaticInitMutex > {};
116}
117
118// !for NOT REALLY WEAK TYPES only!
119static inline typelib_TypeDescriptionReference * igetTypeByName( rtl_uString * pTypeName )
120 SAL_THROW(())
121{
122 typelib_TypeDescriptionReference * pRef = 0;
123 ::typelib_typedescriptionreference_getByName( &pRef, pTypeName );
124 if (pRef && pRef->pType && pRef->pType->pWeakRef) // found initialized td
125 {
126 return pRef;
127 }
128 else
129 {
130 return 0;
131 }
132}
133
134extern "C"
135{
136//##################################################################################################
137CPPU_DLLPUBLIC__attribute__ ((visibility("default"))) typelib_TypeDescriptionReference ** SAL_CALL typelib_static_type_getByTypeClass(
138 typelib_TypeClass eTypeClass )
139 SAL_THROW_EXTERN_C()throw ()
140{
141 static typelib_TypeDescriptionReference * s_aTypes[] = {
142 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
143 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
144 0, 0, 0 };
145
146 if (! s_aTypes[eTypeClass])
147 {
148 MutexGuard aGuard( typelib_StaticInitMutex::get() );
149 if (! s_aTypes[eTypeClass])
150 {
151 static const char * s_aTypeNames[] = {
152 "void", "char", "boolean", "byte",
153 "short", "unsigned short", "long", "unsigned long",
154 "hyper", "unsigned hyper", "float", "double",
155 "string", "type", "any" };
156
157 switch (eTypeClass)
158 {
159 case typelib_TypeClass_EXCEPTION:
160 case typelib_TypeClass_INTERFACE:
161 {
162 // type
163 if (! s_aTypes[typelib_TypeClass_TYPE])
164 {
165 OUString sTypeName( RTL_CONSTASCII_USTRINGPARAM("type")(&("type")[0]), ((sal_Int32)((sizeof ("type") / sizeof ((
"type")[0]))-1)), (((rtl_TextEncoding) 11))
);
166 ::typelib_typedescriptionreference_new(
167 &s_aTypes[typelib_TypeClass_TYPE], typelib_TypeClass_TYPE, sTypeName.pData );
168 // another static ref:
169 ++s_aTypes[typelib_TypeClass_TYPE]->nStaticRefCount;
170 }
171 // any
172 if (! s_aTypes[typelib_TypeClass_ANY])
173 {
174 OUString sTypeName( RTL_CONSTASCII_USTRINGPARAM("any")(&("any")[0]), ((sal_Int32)((sizeof ("any") / sizeof (("any"
)[0]))-1)), (((rtl_TextEncoding) 11))
);
175 ::typelib_typedescriptionreference_new(
176 &s_aTypes[typelib_TypeClass_ANY], typelib_TypeClass_ANY, sTypeName.pData );
177 // another static ref:
178 ++s_aTypes[typelib_TypeClass_ANY]->nStaticRefCount;
179 }
180 // string
181 if (! s_aTypes[typelib_TypeClass_STRING])
182 {
183 OUString sTypeName( RTL_CONSTASCII_USTRINGPARAM("string")(&("string")[0]), ((sal_Int32)((sizeof ("string") / sizeof
(("string")[0]))-1)), (((rtl_TextEncoding) 11))
);
184 ::typelib_typedescriptionreference_new(
185 &s_aTypes[typelib_TypeClass_STRING], typelib_TypeClass_STRING, sTypeName.pData );
186 // another static ref:
187 ++s_aTypes[typelib_TypeClass_STRING]->nStaticRefCount;
188 }
189 // XInterface
190 if (! s_aTypes[typelib_TypeClass_INTERFACE])
191 {
192 OUString sTypeName( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.XInterface")(&("com.sun.star.uno.XInterface")[0]), ((sal_Int32)((sizeof
("com.sun.star.uno.XInterface") / sizeof (("com.sun.star.uno.XInterface"
)[0]))-1)), (((rtl_TextEncoding) 11))
);
193
194 typelib_InterfaceTypeDescription * pTD = 0;
195
196 typelib_TypeDescriptionReference * pMembers[3] = { 0,0,0 };
197 OUString sMethodName0( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.XInterface::queryInterface")(&("com.sun.star.uno.XInterface::queryInterface")[0]), ((
sal_Int32)((sizeof ("com.sun.star.uno.XInterface::queryInterface"
) / sizeof (("com.sun.star.uno.XInterface::queryInterface")[0
]))-1)), (((rtl_TextEncoding) 11))
);
198 ::typelib_typedescriptionreference_new(
199 &pMembers[0], typelib_TypeClass_INTERFACE_METHOD, sMethodName0.pData );
200 OUString sMethodName1( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.XInterface::acquire")(&("com.sun.star.uno.XInterface::acquire")[0]), ((sal_Int32
)((sizeof ("com.sun.star.uno.XInterface::acquire") / sizeof (
("com.sun.star.uno.XInterface::acquire")[0]))-1)), (((rtl_TextEncoding
) 11))
);
201 ::typelib_typedescriptionreference_new(
202 &pMembers[1], typelib_TypeClass_INTERFACE_METHOD, sMethodName1.pData );
203 OUString sMethodName2( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.XInterface::release")(&("com.sun.star.uno.XInterface::release")[0]), ((sal_Int32
)((sizeof ("com.sun.star.uno.XInterface::release") / sizeof (
("com.sun.star.uno.XInterface::release")[0]))-1)), (((rtl_TextEncoding
) 11))
);
204 ::typelib_typedescriptionreference_new(
205 &pMembers[2], typelib_TypeClass_INTERFACE_METHOD, sMethodName2.pData );
206
207 ::typelib_typedescription_newInterface(
208 &pTD, sTypeName.pData, 0xe227a391, 0x33d6, 0x11d1, 0xaabe00a0, 0x249d5590,
209 0, 3, pMembers );
210
211 ::typelib_typedescription_register( (typelib_TypeDescription **)&pTD );
212 ::typelib_typedescriptionreference_acquire(
213 s_aTypes[typelib_TypeClass_INTERFACE] = ((typelib_TypeDescription *)pTD)->pWeakRef );
214 // another static ref:
215 ++s_aTypes[typelib_TypeClass_INTERFACE]->nStaticRefCount;
216 ::typelib_typedescription_release( (typelib_TypeDescription*)pTD );
217
218 ::typelib_typedescriptionreference_release( pMembers[0] );
219 ::typelib_typedescriptionreference_release( pMembers[1] );
220 ::typelib_typedescriptionreference_release( pMembers[2] );
221 // Exception
222 assert( ! s_aTypes[typelib_TypeClass_EXCEPTION] )((! s_aTypes[typelib_TypeClass_EXCEPTION]) ? static_cast<void
> (0) : __assert_fail ("! s_aTypes[typelib_TypeClass_EXCEPTION]"
, "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 222, __PRETTY_FUNCTION__))
;
223 {
224 typelib_TypeDescription * pTD1 = 0;
225 OUString sTypeName1( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.Exception")(&("com.sun.star.uno.Exception")[0]), ((sal_Int32)((sizeof
("com.sun.star.uno.Exception") / sizeof (("com.sun.star.uno.Exception"
)[0]))-1)), (((rtl_TextEncoding) 11))
);
226
227 typelib_CompoundMember_Init aMembers[2];
228 OUString sMemberType0( RTL_CONSTASCII_USTRINGPARAM("string")(&("string")[0]), ((sal_Int32)((sizeof ("string") / sizeof
(("string")[0]))-1)), (((rtl_TextEncoding) 11))
);
229 OUString sMemberName0( RTL_CONSTASCII_USTRINGPARAM("Message")(&("Message")[0]), ((sal_Int32)((sizeof ("Message") / sizeof
(("Message")[0]))-1)), (((rtl_TextEncoding) 11))
);
230 aMembers[0].eTypeClass = typelib_TypeClass_STRING;
231 aMembers[0].pTypeName = sMemberType0.pData;
232 aMembers[0].pMemberName = sMemberName0.pData;
233 OUString sMemberType1( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.XInterface")(&("com.sun.star.uno.XInterface")[0]), ((sal_Int32)((sizeof
("com.sun.star.uno.XInterface") / sizeof (("com.sun.star.uno.XInterface"
)[0]))-1)), (((rtl_TextEncoding) 11))
);
234 OUString sMemberName1( RTL_CONSTASCII_USTRINGPARAM("Context")(&("Context")[0]), ((sal_Int32)((sizeof ("Context") / sizeof
(("Context")[0]))-1)), (((rtl_TextEncoding) 11))
);
235 aMembers[1].eTypeClass = typelib_TypeClass_INTERFACE;
236 aMembers[1].pTypeName = sMemberType1.pData;
237 aMembers[1].pMemberName = sMemberName1.pData;
238
239 ::typelib_typedescription_new(
240 &pTD1, typelib_TypeClass_EXCEPTION, sTypeName1.pData, 0, 2, aMembers );
241 typelib_typedescription_register( &pTD1 );
242 typelib_typedescriptionreference_acquire(
243 s_aTypes[typelib_TypeClass_EXCEPTION] = pTD1->pWeakRef );
244 // another static ref:
245 ++s_aTypes[typelib_TypeClass_EXCEPTION]->nStaticRefCount;
246 // RuntimeException
247 OUString sTypeName2( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.RuntimeException")(&("com.sun.star.uno.RuntimeException")[0]), ((sal_Int32)
((sizeof ("com.sun.star.uno.RuntimeException") / sizeof (("com.sun.star.uno.RuntimeException"
)[0]))-1)), (((rtl_TextEncoding) 11))
);
248 ::typelib_typedescription_new(
249 &pTD1, typelib_TypeClass_EXCEPTION, sTypeName2.pData, s_aTypes[typelib_TypeClass_EXCEPTION], 0, 0 );
250 ::typelib_typedescription_register( &pTD1 );
251 ::typelib_typedescription_release( pTD1 );
252 }
253 // XInterface members
254 typelib_InterfaceMethodTypeDescription * pMethod = 0;
255 typelib_Parameter_Init aParameters[1];
256 OUString sParamName0( RTL_CONSTASCII_USTRINGPARAM("aType")(&("aType")[0]), ((sal_Int32)((sizeof ("aType") / sizeof (
("aType")[0]))-1)), (((rtl_TextEncoding) 11))
);
257 OUString sParamType0( RTL_CONSTASCII_USTRINGPARAM("type")(&("type")[0]), ((sal_Int32)((sizeof ("type") / sizeof ((
"type")[0]))-1)), (((rtl_TextEncoding) 11))
);
258 aParameters[0].pParamName = sParamName0.pData;
259 aParameters[0].eTypeClass = typelib_TypeClass_TYPE;
260 aParameters[0].pTypeName = sParamType0.pData;
261 aParameters[0].bIn = sal_True((sal_Bool)1);
262 aParameters[0].bOut = sal_False((sal_Bool)0);
263 rtl_uString * pExceptions[1];
264 OUString sExceptionName0( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.RuntimeException")(&("com.sun.star.uno.RuntimeException")[0]), ((sal_Int32)
((sizeof ("com.sun.star.uno.RuntimeException") / sizeof (("com.sun.star.uno.RuntimeException"
)[0]))-1)), (((rtl_TextEncoding) 11))
);
265 pExceptions[0] = sExceptionName0.pData;
266 OUString sReturnType0( RTL_CONSTASCII_USTRINGPARAM("any")(&("any")[0]), ((sal_Int32)((sizeof ("any") / sizeof (("any"
)[0]))-1)), (((rtl_TextEncoding) 11))
);
267 typelib_typedescription_newInterfaceMethod(
268 &pMethod, 0, sal_False((sal_Bool)0), sMethodName0.pData,
269 typelib_TypeClass_ANY, sReturnType0.pData,
270 1, aParameters, 1, pExceptions );
271 ::typelib_typedescription_register( (typelib_TypeDescription**)&pMethod );
272
273 OUString sReturnType1( RTL_CONSTASCII_USTRINGPARAM("void")(&("void")[0]), ((sal_Int32)((sizeof ("void") / sizeof ((
"void")[0]))-1)), (((rtl_TextEncoding) 11))
);
274 ::typelib_typedescription_newInterfaceMethod(
275 &pMethod, 1, sal_True((sal_Bool)1), sMethodName1.pData,
276 typelib_TypeClass_VOID, sReturnType1.pData, 0, 0, 0, 0 );
277 ::typelib_typedescription_register( (typelib_TypeDescription**)&pMethod );
278
279 ::typelib_typedescription_newInterfaceMethod(
280 &pMethod, 2, sal_True((sal_Bool)1), sMethodName2.pData,
281 typelib_TypeClass_VOID, sReturnType1.pData,
282 0, 0, 0, 0 );
283 ::typelib_typedescription_register( (typelib_TypeDescription**)&pMethod );
284 ::typelib_typedescription_release( (typelib_TypeDescription*)pMethod );
285 }
286 break;
287 }
288 default:
289 {
290 OUString aTypeName( OUString::createFromAscii( s_aTypeNames[eTypeClass] ) );
291 ::typelib_typedescriptionreference_new( &s_aTypes[eTypeClass], eTypeClass, aTypeName.pData );
292 // another static ref:
293 ++s_aTypes[eTypeClass]->nStaticRefCount;
294 }
295 }
296 }
297 }
298 return &s_aTypes[eTypeClass];
299}
300
301//##################################################################################################
302CPPU_DLLPUBLIC__attribute__ ((visibility("default"))) void SAL_CALL typelib_static_type_init(
303 typelib_TypeDescriptionReference ** ppRef,
304 typelib_TypeClass eTypeClass, const sal_Char * pTypeName )
305 SAL_THROW_EXTERN_C()throw ()
306{
307 if (! *ppRef)
308 {
309 MutexGuard aGuard( typelib_StaticInitMutex::get() );
310 if (! *ppRef)
311 {
312 OUString aTypeName( OUString::createFromAscii( pTypeName ) );
313 ::typelib_typedescriptionreference_new( ppRef, eTypeClass, aTypeName.pData );
314
315 // another static ref:
316 ++((*ppRef)->nStaticRefCount);
317 }
318 }
319}
320
321//##################################################################################################
322CPPU_DLLPUBLIC__attribute__ ((visibility("default"))) void SAL_CALL typelib_static_sequence_type_init(
323 typelib_TypeDescriptionReference ** ppRef,
324 typelib_TypeDescriptionReference * pElementType )
325 SAL_THROW_EXTERN_C()throw ()
326{
327 if (! *ppRef)
328 {
329 MutexGuard aGuard( typelib_StaticInitMutex::get() );
330 if (! *ppRef)
331 {
332 OUStringBuffer aBuf( 32 );
333 aBuf.appendAscii( "[]" );
334 aBuf.append( pElementType->pTypeName );
335 OUString aTypeName( aBuf.makeStringAndClear() );
336
337 assert( ! TYPELIB_TYPEDESCRIPTIONREFERENCE_ISREALLYWEAK(typelib_TypeClass_SEQUENCE) )((! ((typelib_TypeClass_SEQUENCE) == typelib_TypeClass_INTERFACE_METHOD
|| (typelib_TypeClass_SEQUENCE) == typelib_TypeClass_INTERFACE_ATTRIBUTE
)) ? static_cast<void> (0) : __assert_fail ("! ((typelib_TypeClass_SEQUENCE) == typelib_TypeClass_INTERFACE_METHOD || (typelib_TypeClass_SEQUENCE) == typelib_TypeClass_INTERFACE_ATTRIBUTE)"
, "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 337, __PRETTY_FUNCTION__))
;
338 *ppRef = igetTypeByName( aTypeName.pData );
339 if (!*ppRef)
340 {
341 typelib_TypeDescription * pReg = 0;
342 ::typelib_typedescription_new(
343 &pReg, typelib_TypeClass_SEQUENCE,
344 aTypeName.pData, pElementType, 0, 0 );
345
346 ::typelib_typedescription_register( &pReg );
347 *ppRef = (typelib_TypeDescriptionReference *)pReg;
348 assert( *ppRef == pReg->pWeakRef )((*ppRef == pReg->pWeakRef) ? static_cast<void> (0) :
__assert_fail ("*ppRef == pReg->pWeakRef", "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 348, __PRETTY_FUNCTION__))
;
349 }
350 // another static ref:
351 ++((*ppRef)->nStaticRefCount);
352 }
353 }
354}
355
356//##################################################################################################
357namespace {
358
359void init(
360 typelib_TypeDescriptionReference ** ppRef,
361 typelib_TypeClass eTypeClass, const sal_Char * pTypeName,
362 typelib_TypeDescriptionReference * pBaseType,
363 sal_Int32 nMembers, typelib_TypeDescriptionReference ** ppMembers,
364 sal_Bool const * pParameterizedTypes)
365{
366 assert( eTypeClass == typelib_TypeClass_STRUCT || eTypeClass == typelib_TypeClass_EXCEPTION )((eTypeClass == typelib_TypeClass_STRUCT || eTypeClass == typelib_TypeClass_EXCEPTION
) ? static_cast<void> (0) : __assert_fail ("eTypeClass == typelib_TypeClass_STRUCT || eTypeClass == typelib_TypeClass_EXCEPTION"
, "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 366, __PRETTY_FUNCTION__))
;
367
368 if (! *ppRef)
2
Taking true branch
369 {
370 MutexGuard aGuard( typelib_StaticInitMutex::get() );
371 if (! *ppRef)
3
Taking true branch
372 {
373 assert( ! TYPELIB_TYPEDESCRIPTIONREFERENCE_ISREALLYWEAK(eTypeClass) )((! ((eTypeClass) == typelib_TypeClass_INTERFACE_METHOD || (eTypeClass
) == typelib_TypeClass_INTERFACE_ATTRIBUTE)) ? static_cast<
void> (0) : __assert_fail ("! ((eTypeClass) == typelib_TypeClass_INTERFACE_METHOD || (eTypeClass) == typelib_TypeClass_INTERFACE_ATTRIBUTE)"
, "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 373, __PRETTY_FUNCTION__))
;
374 OUString aTypeName( OUString::createFromAscii( pTypeName ) );
375 *ppRef = igetTypeByName( aTypeName.pData );
376 if (!*ppRef)
4
Taking true branch
377 {
378 typelib_CompoundTypeDescription * pComp = 0;
379 ::typelib_typedescription_newEmpty(
380 (typelib_TypeDescription **)&pComp, eTypeClass, aTypeName.pData );
381
382 sal_Int32 nOffset = 0;
383 if (pBaseType)
5
Taking false branch
384 {
385 ::typelib_typedescriptionreference_getDescription(
386 (typelib_TypeDescription **)&pComp->pBaseTypeDescription, pBaseType );
387 assert( pComp->pBaseTypeDescription )((pComp->pBaseTypeDescription) ? static_cast<void> (
0) : __assert_fail ("pComp->pBaseTypeDescription", "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 387, __PRETTY_FUNCTION__))
;
388 nOffset = ((typelib_TypeDescription *)pComp->pBaseTypeDescription)->nSize;
389 assert( newAlignedSize( 0, ((typelib_TypeDescription *)pComp->pBaseTypeDescription)->nSize, ((typelib_TypeDescription *)pComp->pBaseTypeDescription)->nAlignment ) == ((typelib_TypeDescription *)pComp->pBaseTypeDescription)->nSize )((newAlignedSize( 0, ((typelib_TypeDescription *)pComp->pBaseTypeDescription
)->nSize, ((typelib_TypeDescription *)pComp->pBaseTypeDescription
)->nAlignment ) == ((typelib_TypeDescription *)pComp->pBaseTypeDescription
)->nSize) ? static_cast<void> (0) : __assert_fail ("newAlignedSize( 0, ((typelib_TypeDescription *)pComp->pBaseTypeDescription)->nSize, ((typelib_TypeDescription *)pComp->pBaseTypeDescription)->nAlignment ) == ((typelib_TypeDescription *)pComp->pBaseTypeDescription)->nSize"
, "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 389, __PRETTY_FUNCTION__))
; // unexpected offset
390 }
391
392 if (nMembers)
6
Taking true branch
393 {
394 pComp->nMembers = nMembers;
395 pComp->pMemberOffsets = new sal_Int32[ nMembers ];
396 pComp->ppTypeRefs = new typelib_TypeDescriptionReference *[ nMembers ];
397 if (pParameterizedTypes != 0) {
7
Taking false branch
398 reinterpret_cast< typelib_StructTypeDescription * >(
399 pComp)->pParameterizedTypes
400 = new sal_Bool[nMembers];
401 }
402 for ( sal_Int32 i = 0 ; i < nMembers; ++i )
8
Loop condition is true. Entering loop body
10
Loop condition is true. Entering loop body
12
Loop condition is true. Entering loop body
403 {
404 ::typelib_typedescriptionreference_acquire(
405 pComp->ppTypeRefs[i] = ppMembers[i] );
406 // write offset
407 typelib_TypeDescription * pTD = 0;
408 TYPELIB_DANGER_GET( &pTD, pComp->ppTypeRefs[i] ){ typelib_TypeDescriptionReference * pMacroTypeRef = (pComp->
ppTypeRefs[i]); typelib_TypeDescription ** ppMacroTypeDescr =
(&pTD); if (((pMacroTypeRef->eTypeClass) == typelib_TypeClass_INTERFACE_METHOD
|| (pMacroTypeRef->eTypeClass) == typelib_TypeClass_INTERFACE_ATTRIBUTE
)) { typelib_typedescriptionreference_getDescription( ppMacroTypeDescr
, pMacroTypeRef ); } else if (!pMacroTypeRef->pType || !pMacroTypeRef
->pType->pWeakRef) { typelib_typedescriptionreference_getDescription
( ppMacroTypeDescr, pMacroTypeRef ); if (*ppMacroTypeDescr) typelib_typedescription_release
( *ppMacroTypeDescr ); } else { *ppMacroTypeDescr = pMacroTypeRef
->pType; } }
;
409 assert( pTD->nSize )((pTD->nSize) ? static_cast<void> (0) : __assert_fail
("pTD->nSize", "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 409, __PRETTY_FUNCTION__))
; // void member?
13
Within the expansion of the macro 'assert':
a
Access to field 'nSize' results in a dereference of a null pointer (loaded from variable 'pTD')
410 nOffset = newAlignedSize( nOffset, pTD->nSize, pTD->nAlignment );
411 pComp->pMemberOffsets[i] = nOffset - pTD->nSize;
412 TYPELIB_DANGER_RELEASE( pTD ){ if ((((pTD)->eTypeClass) == typelib_TypeClass_INTERFACE_METHOD
|| ((pTD)->eTypeClass) == typelib_TypeClass_INTERFACE_ATTRIBUTE
)) typelib_typedescription_release( pTD ); }
;
413
414 if (pParameterizedTypes != 0) {
9
Taking false branch
11
Taking false branch
415 reinterpret_cast< typelib_StructTypeDescription * >(
416 pComp)->pParameterizedTypes[i]
417 = pParameterizedTypes[i];
418 }
419 }
420 }
421
422 typelib_TypeDescription * pReg = (typelib_TypeDescription *)pComp;
423 pReg->pWeakRef = (typelib_TypeDescriptionReference *)pReg;
424 // sizeof( void ) not allowed
425 pReg->nSize = ::typelib_typedescription_getAlignedUnoSize( pReg, 0, pReg->nAlignment );
426 pReg->nAlignment = adjustAlignment( pReg->nAlignment );
427 pReg->bComplete = sal_False((sal_Bool)0);
428
429 ::typelib_typedescription_register( &pReg );
430 *ppRef = (typelib_TypeDescriptionReference *)pReg;
431 assert( *ppRef == pReg->pWeakRef )((*ppRef == pReg->pWeakRef) ? static_cast<void> (0) :
__assert_fail ("*ppRef == pReg->pWeakRef", "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 431, __PRETTY_FUNCTION__))
;
432 }
433 // another static ref:
434 ++((*ppRef)->nStaticRefCount);
435 }
436 }
437}
438
439}
440
441CPPU_DLLPUBLIC__attribute__ ((visibility("default"))) void SAL_CALL typelib_static_compound_type_init(
442 typelib_TypeDescriptionReference ** ppRef,
443 typelib_TypeClass eTypeClass, const sal_Char * pTypeName,
444 typelib_TypeDescriptionReference * pBaseType,
445 sal_Int32 nMembers, typelib_TypeDescriptionReference ** ppMembers )
446 SAL_THROW_EXTERN_C()throw ()
447{
448 init(ppRef, eTypeClass, pTypeName, pBaseType, nMembers, ppMembers, 0);
449}
450
451CPPU_DLLPUBLIC__attribute__ ((visibility("default"))) void SAL_CALL typelib_static_struct_type_init(
452 typelib_TypeDescriptionReference ** ppRef, const sal_Char * pTypeName,
453 typelib_TypeDescriptionReference * pBaseType,
454 sal_Int32 nMembers, typelib_TypeDescriptionReference ** ppMembers,
455 sal_Bool const * pParameterizedTypes )
456 SAL_THROW_EXTERN_C()throw ()
457{
458 init(
1
Calling 'init'
459 ppRef, typelib_TypeClass_STRUCT, pTypeName, pBaseType, nMembers,
460 ppMembers, pParameterizedTypes);
461}
462
463//##################################################################################################
464CPPU_DLLPUBLIC__attribute__ ((visibility("default"))) void SAL_CALL typelib_static_interface_type_init(
465 typelib_TypeDescriptionReference ** ppRef,
466 const sal_Char * pTypeName,
467 typelib_TypeDescriptionReference * pBaseType )
468 SAL_THROW_EXTERN_C()throw ()
469{
470 typelib_static_mi_interface_type_init(
471 ppRef, pTypeName, pBaseType == 0 ? 0 : 1, &pBaseType);
472}
473
474//##################################################################################################
475CPPU_DLLPUBLIC__attribute__ ((visibility("default"))) void SAL_CALL typelib_static_mi_interface_type_init(
476 typelib_TypeDescriptionReference ** ppRef,
477 const sal_Char * pTypeName,
478 sal_Int32 nBaseTypes,
479 typelib_TypeDescriptionReference ** ppBaseTypes )
480 SAL_THROW_EXTERN_C()throw ()
481{
482 if (! *ppRef)
483 {
484 MutexGuard aGuard( typelib_StaticInitMutex::get() );
485 if (! *ppRef)
486 {
487 assert( ! TYPELIB_TYPEDESCRIPTIONREFERENCE_ISREALLYWEAK(typelib_TypeClass_INTERFACE) )((! ((typelib_TypeClass_INTERFACE) == typelib_TypeClass_INTERFACE_METHOD
|| (typelib_TypeClass_INTERFACE) == typelib_TypeClass_INTERFACE_ATTRIBUTE
)) ? static_cast<void> (0) : __assert_fail ("! ((typelib_TypeClass_INTERFACE) == typelib_TypeClass_INTERFACE_METHOD || (typelib_TypeClass_INTERFACE) == typelib_TypeClass_INTERFACE_ATTRIBUTE)"
, "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 487, __PRETTY_FUNCTION__))
;
488 OUString aTypeName( OUString::createFromAscii( pTypeName ) );
489 *ppRef = igetTypeByName( aTypeName.pData );
490 if (!*ppRef)
491 {
492 typelib_InterfaceTypeDescription * pIface = 0;
493 ::typelib_typedescription_newEmpty(
494 (typelib_TypeDescription **)&pIface, typelib_TypeClass_INTERFACE, aTypeName.pData );
495
496 pIface->nBaseTypes = std::max< sal_Int32 >(nBaseTypes, 1);
497 pIface->ppBaseTypes = new typelib_InterfaceTypeDescription *[
498 pIface->nBaseTypes];
499 if (nBaseTypes > 0)
500 {
501 for (sal_Int32 i = 0; i < nBaseTypes; ++i) {
502 pIface->ppBaseTypes[i] = 0;
503 ::typelib_typedescriptionreference_getDescription(
504 (typelib_TypeDescription **)&pIface->ppBaseTypes[i], ppBaseTypes[i] );
505 assert( pIface->ppBaseTypes[i] )((pIface->ppBaseTypes[i]) ? static_cast<void> (0) : __assert_fail
("pIface->ppBaseTypes[i]", "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 505, __PRETTY_FUNCTION__))
;
506 }
507 }
508 else
509 {
510 pIface->ppBaseTypes[0] = 0;
511 ::typelib_typedescriptionreference_getDescription(
512 (typelib_TypeDescription **)&pIface->ppBaseTypes[0],
513 * ::typelib_static_type_getByTypeClass( typelib_TypeClass_INTERFACE ) );
514 assert( pIface->ppBaseTypes[0] )((pIface->ppBaseTypes[0]) ? static_cast<void> (0) : __assert_fail
("pIface->ppBaseTypes[0]", "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 514, __PRETTY_FUNCTION__))
;
515 }
516 pIface->pBaseTypeDescription = pIface->ppBaseTypes[0];
517 typelib_typedescription_acquire(
518 &pIface->pBaseTypeDescription->aBase);
519
520 typelib_TypeDescription * pReg = (typelib_TypeDescription *)pIface;
521 pReg->pWeakRef = (typelib_TypeDescriptionReference *)pReg;
522 // sizeof( void ) not allowed
523 pReg->nSize = ::typelib_typedescription_getAlignedUnoSize( pReg, 0, pReg->nAlignment );
524
525 pReg->nAlignment = adjustAlignment( pReg->nAlignment );
526 pReg->bComplete = sal_False((sal_Bool)0);
527
528 ::typelib_typedescription_register( &pReg );
529 *ppRef = (typelib_TypeDescriptionReference *)pReg;
530 assert( *ppRef == pReg->pWeakRef )((*ppRef == pReg->pWeakRef) ? static_cast<void> (0) :
__assert_fail ("*ppRef == pReg->pWeakRef", "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 530, __PRETTY_FUNCTION__))
;
531 }
532 // another static ref:
533 ++((*ppRef)->nStaticRefCount);
534 }
535 }
536}
537
538//##################################################################################################
539CPPU_DLLPUBLIC__attribute__ ((visibility("default"))) void SAL_CALL typelib_static_enum_type_init(
540 typelib_TypeDescriptionReference ** ppRef,
541 const sal_Char * pTypeName,
542 sal_Int32 nDefaultValue )
543 SAL_THROW_EXTERN_C()throw ()
544{
545 if (! *ppRef)
546 {
547 MutexGuard aGuard( typelib_StaticInitMutex::get() );
548 if (! *ppRef)
549 {
550 assert( ! TYPELIB_TYPEDESCRIPTIONREFERENCE_ISREALLYWEAK(typelib_TypeClass_ENUM) )((! ((typelib_TypeClass_ENUM) == typelib_TypeClass_INTERFACE_METHOD
|| (typelib_TypeClass_ENUM) == typelib_TypeClass_INTERFACE_ATTRIBUTE
)) ? static_cast<void> (0) : __assert_fail ("! ((typelib_TypeClass_ENUM) == typelib_TypeClass_INTERFACE_METHOD || (typelib_TypeClass_ENUM) == typelib_TypeClass_INTERFACE_ATTRIBUTE)"
, "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 550, __PRETTY_FUNCTION__))
;
551 OUString aTypeName( OUString::createFromAscii( pTypeName ) );
552 *ppRef = igetTypeByName( aTypeName.pData );
553 if (!*ppRef)
554 {
555 typelib_TypeDescription * pReg = 0;
556 ::typelib_typedescription_newEmpty(
557 &pReg, typelib_TypeClass_ENUM, aTypeName.pData );
558 typelib_EnumTypeDescription * pEnum = (typelib_EnumTypeDescription *)pReg;
559
560 pEnum->nDefaultEnumValue = nDefaultValue;
561
562 pReg->pWeakRef = (typelib_TypeDescriptionReference *)pReg;
563 // sizeof( void ) not allowed
564 pReg->nSize = ::typelib_typedescription_getAlignedUnoSize( pReg, 0, pReg->nAlignment );
565 pReg->nAlignment = ::adjustAlignment( pReg->nAlignment );
566 pReg->bComplete = sal_False((sal_Bool)0);
567
568 ::typelib_typedescription_register( &pReg );
569 *ppRef = (typelib_TypeDescriptionReference *)pReg;
570 assert( *ppRef == pReg->pWeakRef )((*ppRef == pReg->pWeakRef) ? static_cast<void> (0) :
__assert_fail ("*ppRef == pReg->pWeakRef", "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 570, __PRETTY_FUNCTION__))
;
571 }
572 // another static ref:
573 ++((*ppRef)->nStaticRefCount);
574 }
575 }
576}
577
578//##################################################################################################
579CPPU_DLLPUBLIC__attribute__ ((visibility("default"))) void SAL_CALL typelib_static_array_type_init(
580 typelib_TypeDescriptionReference ** ppRef,
581 typelib_TypeDescriptionReference * pElementTypeRef,
582 sal_Int32 nDimensions, ... )
583 SAL_THROW_EXTERN_C()throw ()
584{
585 if (! *ppRef)
586 {
587 MutexGuard aGuard( typelib_StaticInitMutex::get() );
588 if (! *ppRef)
589 {
590 OUStringBuffer aBuf( 32 );
591 aBuf.append( pElementTypeRef->pTypeName );
592
593 va_list dimArgs;
594 va_start( dimArgs, nDimensions )__builtin_va_start(dimArgs, nDimensions);
595 sal_Int32 dim = 0;
596 sal_Int32 nElements = 1;
597 sal_Int32* pDimensions = new sal_Int32[nDimensions];
598 for (sal_Int32 i=0; i < nDimensions; i++)
599 {
600 dim = va_arg( dimArgs, int)__builtin_va_arg(dimArgs, int);
601 pDimensions[i] = dim;
602 aBuf.appendAscii("[");
603 aBuf.append(dim);
604 aBuf.appendAscii("]");
605 nElements *= dim;
606 }
607 va_end( dimArgs )__builtin_va_end(dimArgs);
608 OUString aTypeName( aBuf.makeStringAndClear() );
609
610 assert( ! TYPELIB_TYPEDESCRIPTIONREFERENCE_ISREALLYWEAK(typelib_TypeClass_ARRAY) )((! ((typelib_TypeClass_ARRAY) == typelib_TypeClass_INTERFACE_METHOD
|| (typelib_TypeClass_ARRAY) == typelib_TypeClass_INTERFACE_ATTRIBUTE
)) ? static_cast<void> (0) : __assert_fail ("! ((typelib_TypeClass_ARRAY) == typelib_TypeClass_INTERFACE_METHOD || (typelib_TypeClass_ARRAY) == typelib_TypeClass_INTERFACE_ATTRIBUTE)"
, "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 610, __PRETTY_FUNCTION__))
;
611 *ppRef = igetTypeByName( aTypeName.pData );
612 if (!*ppRef)
613 {
614 typelib_TypeDescription * pReg = 0;
615 ::typelib_typedescription_newEmpty(
616 &pReg, typelib_TypeClass_ARRAY, aTypeName.pData );
617 typelib_ArrayTypeDescription * pArray = (typelib_ArrayTypeDescription *)pReg;
618
619 pArray->nDimensions = nDimensions;
620 pArray->nTotalElements = nElements;
621 pArray->pDimensions = pDimensions;
622
623 typelib_typedescriptionreference_acquire(pElementTypeRef);
624 ((typelib_IndirectTypeDescription*)pArray)->pType = pElementTypeRef;
625
626 pReg->pWeakRef = (typelib_TypeDescriptionReference *)pReg;
627 // sizeof( void ) not allowed
628 pReg->nSize = ::typelib_typedescription_getAlignedUnoSize( pReg, 0, pReg->nAlignment );
629 pReg->nAlignment = ::adjustAlignment( pReg->nAlignment );
630 pReg->bComplete = sal_True((sal_Bool)1);
631
632 ::typelib_typedescription_register( &pReg );
633 *ppRef = (typelib_TypeDescriptionReference *)pReg;
634 assert( *ppRef == pReg->pWeakRef )((*ppRef == pReg->pWeakRef) ? static_cast<void> (0) :
__assert_fail ("*ppRef == pReg->pWeakRef", "/usr/local/src/libreoffice/cppu/source/typelib/static_types.cxx"
, 634, __PRETTY_FUNCTION__))
;
635 } else
636 delete [] pDimensions;
637 // another static ref:
638 ++((*ppRef)->nStaticRefCount);
639 }
640 }
641}
642
643} // extern "C"
644
645}
646
647/* vim:set shiftwidth=4 softtabstop=4 expandtab: */