Bug Summary

File:src/meet/enumall.c
Location:line 70, column 41
Description:Dereference of undefined pointer value

Annotated Source Code

1/*
2 Teem: Tools to process and visualize scientific data and images .
3 Copyright (C) 2013, 2012, 2011, 2010, 2009 University of Chicago
4 Copyright (C) 2008, 2007, 2006, 2005 Gordon Kindlmann
5 Copyright (C) 2004, 2003, 2002, 2001, 2000, 1999, 1998 University of Utah
6
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public License
9 (LGPL) as published by the Free Software Foundation; either
10 version 2.1 of the License, or (at your option) any later version.
11 The terms of redistributing and/or modifying this software also
12 include exceptions to the LGPL that facilitate static linking.
13
14 This library is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 Lesser General Public License for more details.
18
19 You should have received a copy of the GNU Lesser General Public License
20 along with this library; if not, write to Free Software Foundation, Inc.,
21 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22*/
23
24#include "meet.h"
25
26const int
27meetPresent = 42;
28
29const char *
30meetBiffKey = "meet";
31
32typedef union {
33 const airEnum ***enm;
34 void **v;
35} foobarUnion;
36
37/*
38******** meetAirEnumAll
39**
40** ALLOCATES and returns a NULL-terminated array of
41** pointers to all the airEnums in Teem
42**
43** It would be better if this array could be created at compile-time,
44** but efforts at doing this resulted in lots of "initializer is not const"
45** errors.
46**
47** NOTE: the order here reflects the library ordering of the LIBS
48** variable in teem/src/GNUMakefile, which is the canonical dependency
49** ordering of the libraries. Can manually check completeness by:
50** (TEEM_LIB_LIST)
51
52grep "airEnum *" {air,hest,biff,nrrd,ell,unrrdu,alan,moss,tijk,gage,dye,bane,limn,echo,hoover,seek,ten,elf,pull,coil,push,mite}/?*.h | grep EXPORT | more
53
54** (with the ? in "}/?*.h" to stop warnings about / * inside comment)
55** We could grep specifically for "const airEnum *const", but its good to
56** use this occasion to also make sure that all public airEnums are
57** indeed const airEnum *const
58*/
59const airEnum **
60meetAirEnumAll() {
61 airArray *arr;
62 const airEnum **enm;
2
'enm' declared without an initial value
63 unsigned int ii;
64 foobarUnion fbu;
65
66 arr = airArrayNew((fbu.enm = &enm, fbu.v),
67 NULL((void*)0), sizeof(airEnum *), 2);
68
69 /* air */
70 ii = airArrayLenIncr(arr, 1); enm[ii] = airEndian;
3
Dereference of undefined pointer value
71 ii = airArrayLenIncr(arr, 1); enm[ii] = airBool;
72
73 /* hest: no airEnums */
74
75 /* biff: no airEnums */
76
77 /* nrrd */
78 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdFormatType;
79 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdType;
80 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdEncodingType;
81 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdCenter;
82 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdKind;
83 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdField;
84 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdSpace;
85 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdSpacingStatus;
86 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdOrientationHave;
87 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdBoundary;
88 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdMeasure;
89 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdUnaryOp;
90 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdBinaryOp;
91 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdTernaryOp;
92 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdFFTWPlanRigor;
93 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdResampleNonExistent;
94 ii = airArrayLenIncr(arr, 1); enm[ii] = nrrdMetaDataCanonicalVersion;
95
96 /* ell */
97 ii = airArrayLenIncr(arr, 1); enm[ii] = ell_cubic_root;
98
99 /* unrrdu: no airEnums */
100
101#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS)
102 /* alan */
103 ii = airArrayLenIncr(arr, 1); enm[ii] = alanStop;
104#endif
105
106 /* moss: no airEnums */
107
108#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS)
109 ii = airArrayLenIncr(arr, 1); enm[ii] = tijk_class;
110#endif
111
112 /* gage */
113 ii = airArrayLenIncr(arr, 1); enm[ii] = gageErr;
114 ii = airArrayLenIncr(arr, 1); enm[ii] = gageKernel;
115 ii = airArrayLenIncr(arr, 1); enm[ii] = gageItemPackPart;
116 ii = airArrayLenIncr(arr, 1); enm[ii] = gageScl;
117 ii = airArrayLenIncr(arr, 1); enm[ii] = gageVec;
118 ii = airArrayLenIncr(arr, 1); enm[ii] = gageSigmaSampling;
119
120 /* dye */
121 ii = airArrayLenIncr(arr, 1); enm[ii] = dyeSpace;
122
123#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS)
124 /* bane */
125 ii = airArrayLenIncr(arr, 1); enm[ii] = baneGkmsMeasr;
126#endif
127
128 /* limn */
129 ii = airArrayLenIncr(arr, 1); enm[ii] = limnSpace;
130 ii = airArrayLenIncr(arr, 1); enm[ii] = limnPolyDataInfo;
131 ii = airArrayLenIncr(arr, 1); enm[ii] = limnCameraPathTrack;
132 ii = airArrayLenIncr(arr, 1); enm[ii] = limnPrimitive;
133 ii = airArrayLenIncr(arr, 1); enm[ii] = limnSplineType;
134 ii = airArrayLenIncr(arr, 1); enm[ii] = limnSplineInfo;
135
136 /* echo */
137 ii = airArrayLenIncr(arr, 1); enm[ii] = echoJitter;
138 ii = airArrayLenIncr(arr, 1); enm[ii] = echoType;
139 ii = airArrayLenIncr(arr, 1); enm[ii] = echoMatter;
140
141 /* hoover */
142 ii = airArrayLenIncr(arr, 1); enm[ii] = hooverErr;
143
144 /* seek */
145 ii = airArrayLenIncr(arr, 1); enm[ii] = seekType;
146
147 /* ten */
148 ii = airArrayLenIncr(arr, 1); enm[ii] = tenAniso;
149 ii = airArrayLenIncr(arr, 1); enm[ii] = tenInterpType;
150 ii = airArrayLenIncr(arr, 1); enm[ii] = tenGage;
151 ii = airArrayLenIncr(arr, 1); enm[ii] = tenFiberType;
152 ii = airArrayLenIncr(arr, 1); enm[ii] = tenDwiFiberType;
153 ii = airArrayLenIncr(arr, 1); enm[ii] = tenFiberStop;
154 ii = airArrayLenIncr(arr, 1); enm[ii] = tenFiberIntg;
155 ii = airArrayLenIncr(arr, 1); enm[ii] = tenGlyphType;
156 ii = airArrayLenIncr(arr, 1); enm[ii] = tenEstimate1Method;
157 ii = airArrayLenIncr(arr, 1); enm[ii] = tenEstimate2Method;
158 ii = airArrayLenIncr(arr, 1); enm[ii] = tenTripleType;
159 ii = airArrayLenIncr(arr, 1); enm[ii] = tenDwiGage;
160
161#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS)
162 /* elf: no airEnums */
163#endif
164
165 /* pull */
166 ii = airArrayLenIncr(arr, 1); enm[ii] = pullInterType;
167 ii = airArrayLenIncr(arr, 1); enm[ii] = pullEnergyType;
168 ii = airArrayLenIncr(arr, 1); enm[ii] = pullInfo;
169 ii = airArrayLenIncr(arr, 1); enm[ii] = pullSource;
170 ii = airArrayLenIncr(arr, 1); enm[ii] = pullProp;
171 ii = airArrayLenIncr(arr, 1); enm[ii] = pullProcessMode;
172 ii = airArrayLenIncr(arr, 1); enm[ii] = pullTraceStop;
173 ii = airArrayLenIncr(arr, 1); enm[ii] = pullInitMethod;
174 ii = airArrayLenIncr(arr, 1); enm[ii] = pullCount;
175 ii = airArrayLenIncr(arr, 1); enm[ii] = pullConstraintFail;
176
177#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS)
178 /* coil */
179 ii = airArrayLenIncr(arr, 1); enm[ii] = coilMethodType;
180 ii = airArrayLenIncr(arr, 1); enm[ii] = coilKindType;
181
182 /* push */
183 ii = airArrayLenIncr(arr, 1); enm[ii] = pushEnergyType;
184#endif
185
186 /* mite */
187 ii = airArrayLenIncr(arr, 1); enm[ii] = miteVal;
188 ii = airArrayLenIncr(arr, 1); enm[ii] = miteStageOp;
189
190 /* meet: no new airEnums of its own */
191
192 /* NULL-terminate the list */
193 ii = airArrayLenIncr(arr, 1); enm[ii] = NULL((void*)0);
194
195 /* nix, not nuke the airArray */
196 airArrayNix(arr);
197 return enm;
198}
199
200void
201meetAirEnumAllPrint(FILE *file) {
202 const airEnum **enm, *ee;
203 unsigned int ei;
204
205 if (!file) {
206 return;
207 }
208 enm = meetAirEnumAll();
209 ei = 0;
210 while ((ee = enm[ei])) {
211 airEnumPrint(file, ee);
212 fprintf(file, "\n");
213 ei++;
214 }
215 free(AIR_CAST(void *, enm)((void *)(enm)));
216 return;
217}
218
219int
220meetAirEnumAllCheck(void) {
221 static const char me[]="meetAirEnumAllCheck";
222 const airEnum **enm, *ee;
223 char err[AIR_STRLEN_LARGE(512+1)];
224 unsigned int ei;
225 airArray *mop;
226
227 mop = airMopNew();
228 enm = meetAirEnumAll();
1
Calling 'meetAirEnumAll'
229 airMopAdd(mop, (void*)enm, airFree, airMopAlways);
230 ei = 0;
231 while ((ee = enm[ei])) {
232 /* fprintf(stderr, "!%s: %u %s\n", me, ei, ee->name); */
233 if (airEnumCheck(err, ee)) {
234 biffAddf(MEETmeetBiffKey, "%s: problem with enum %u", me, ei);
235 biffAddf(MEETmeetBiffKey, "%s", err); /* kind of a hack */
236 airMopError(mop);
237 return 1;
238 }
239 ei++;
240 }
241 airMopOkay(mop);
242 return 0;
243}
244
245const char *const
246meetTeemLibs[] = {
247 /* TEEM_LIB_LIST */
248 "air",
249 "hest",
250 "biff",
251 "nrrd",
252 "ell",
253 "unrrdu",
254#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS)
255 "alan",
256#endif
257 "moss",
258#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS)
259 "tijk",
260#endif
261 "gage",
262 "dye",
263#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS)
264 "bane",
265#endif
266 "limn",
267 "echo",
268 "hoover",
269 "seek",
270 "ten",
271#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS)
272 "elf",
273#endif
274 "pull",
275#if defined(TEEM_BUILD_EXPERIMENTAL_LIBS)
276 "coil",
277 "push",
278#endif
279 "mite",
280 "meet",
281 NULL((void*)0)
282};
283
284