File: | src/ActionHook.c |
Location: | line 105, column 18 |
Description: | Access to field 'action_hook_list' results in a dereference of a null pointer (loaded from variable 'app') |
1 | /*LINTLIBRARY*/ | |||||
2 | ||||||
3 | /*********************************************************** | |||||
4 | Copyright (c) 1993, Oracle and/or its affiliates. All rights reserved. | |||||
5 | ||||||
6 | Permission is hereby granted, free of charge, to any person obtaining a | |||||
7 | copy of this software and associated documentation files (the "Software"), | |||||
8 | to deal in the Software without restriction, including without limitation | |||||
9 | the rights to use, copy, modify, merge, publish, distribute, sublicense, | |||||
10 | and/or sell copies of the Software, and to permit persons to whom the | |||||
11 | Software is furnished to do so, subject to the following conditions: | |||||
12 | ||||||
13 | The above copyright notice and this permission notice (including the next | |||||
14 | paragraph) shall be included in all copies or substantial portions of the | |||||
15 | Software. | |||||
16 | ||||||
17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | |||||
20 | THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | |||||
22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | |||||
23 | DEALINGS IN THE SOFTWARE. | |||||
24 | ||||||
25 | Copyright 1987, 1988 by Digital Equipment Corporation, Maynard, Massachusetts. | |||||
26 | ||||||
27 | All Rights Reserved | |||||
28 | ||||||
29 | Permission to use, copy, modify, and distribute this software and its | |||||
30 | documentation for any purpose and without fee is hereby granted, | |||||
31 | provided that the above copyright notice appear in all copies and that | |||||
32 | both that copyright notice and this permission notice appear in | |||||
33 | supporting documentation, and that the name of Digital not be | |||||
34 | used in advertising or publicity pertaining to distribution of the | |||||
35 | software without specific, written prior permission. | |||||
36 | ||||||
37 | DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING | |||||
38 | ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL | |||||
39 | DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR | |||||
40 | ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, | |||||
41 | WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, | |||||
42 | ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS | |||||
43 | SOFTWARE. | |||||
44 | ||||||
45 | ******************************************************************/ | |||||
46 | ||||||
47 | /* | |||||
48 | ||||||
49 | Copyright 1987, 1988, 1998 The Open Group | |||||
50 | ||||||
51 | Permission to use, copy, modify, distribute, and sell this software and its | |||||
52 | documentation for any purpose is hereby granted without fee, provided that | |||||
53 | the above copyright notice appear in all copies and that both that | |||||
54 | copyright notice and this permission notice appear in supporting | |||||
55 | documentation. | |||||
56 | ||||||
57 | The above copyright notice and this permission notice shall be included in | |||||
58 | all copies or substantial portions of the Software. | |||||
59 | ||||||
60 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
61 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
62 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
63 | OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN | |||||
64 | AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | |||||
65 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||||
66 | ||||||
67 | Except as contained in this notice, the name of The Open Group shall not be | |||||
68 | used in advertising or otherwise to promote the sale, use or other dealings | |||||
69 | in this Software without prior written authorization from The Open Group. | |||||
70 | ||||||
71 | */ | |||||
72 | ||||||
73 | /* | |||||
74 | * Contains XtAppAddActionHook, XtRemoveActionHook | |||||
75 | */ | |||||
76 | ||||||
77 | #ifdef HAVE_CONFIG_H1 | |||||
78 | #include <config.h> | |||||
79 | #endif | |||||
80 | #include "IntrinsicI.h" | |||||
81 | ||||||
82 | ||||||
83 | /*ARGSUSED*/ | |||||
84 | static void FreeActionHookList( | |||||
85 | Widget widget, /* unused (and invalid) */ | |||||
86 | XtPointer closure, /* ActionHook* */ | |||||
87 | XtPointer call_data) /* unused */ | |||||
88 | { | |||||
89 | ActionHook list = *(ActionHook*)closure; | |||||
90 | while (list != NULL((void*)0)) { | |||||
91 | ActionHook next = list->next; | |||||
92 | XtFree( (XtPointer)list ); | |||||
93 | list = next; | |||||
94 | } | |||||
95 | } | |||||
96 | ||||||
97 | ||||||
98 | XtActionHookId XtAppAddActionHook( | |||||
99 | XtAppContext app, | |||||
100 | XtActionHookProc proc, | |||||
101 | XtPointer closure) | |||||
102 | { | |||||
103 | ActionHook hook = XtNew(ActionHookRec)((ActionHookRec *) XtMalloc((unsigned) sizeof(ActionHookRec)) ); | |||||
104 | LOCK_APP(app)if(app && app->lock)(*app->lock)(app); | |||||
| ||||||
105 | hook->next = app->action_hook_list; | |||||
| ||||||
106 | hook->app = app; | |||||
107 | hook->proc = proc; | |||||
108 | hook->closure = closure; | |||||
109 | if (app->action_hook_list == NULL((void*)0)) { | |||||
110 | _XtAddCallback( &app->destroy_callbacks, | |||||
111 | FreeActionHookList, | |||||
112 | (XtPointer)&app->action_hook_list | |||||
113 | ); | |||||
114 | } | |||||
115 | app->action_hook_list = hook; | |||||
116 | UNLOCK_APP(app)if(app && app->unlock)(*app->unlock)(app); | |||||
117 | return (XtActionHookId)hook; | |||||
118 | } | |||||
119 | ||||||
120 | ||||||
121 | void XtRemoveActionHook( | |||||
122 | XtActionHookId id) | |||||
123 | { | |||||
124 | ActionHook *p, hook = (ActionHook)id; | |||||
125 | XtAppContext app = hook->app; | |||||
126 | LOCK_APP(app)if(app && app->lock)(*app->lock)(app); | |||||
127 | for (p = &app->action_hook_list; p != NULL((void*)0) && *p != hook; p = &(*p)->next); | |||||
128 | if (p) { | |||||
129 | *p = hook->next; | |||||
130 | XtFree( (XtPointer)hook ); | |||||
131 | if (app->action_hook_list == NULL((void*)0)) | |||||
132 | _XtRemoveCallback(&app->destroy_callbacks, FreeActionHookList, | |||||
133 | (XtPointer) &app->action_hook_list); | |||||
134 | } | |||||
135 | #ifdef DEBUG | |||||
136 | else { | |||||
137 | XtAppWarningMsg(app, "badId", "xtRemoveActionHook", XtCXtToolkitError, | |||||
138 | "XtRemoveActionHook called with bad or old hook id", | |||||
139 | (String*)NULL((void*)0), (Cardinal*)NULL((void*)0)); | |||||
140 | } | |||||
141 | #endif /*DEBUG*/ | |||||
142 | UNLOCK_APP(app)if(app && app->unlock)(*app->unlock)(app); | |||||
143 | } |