summaryrefslogtreecommitdiffstats
path: root/libglusterfs
diff options
context:
space:
mode:
authorAmar Tumballi <amar@gluster.com>2010-07-02 04:55:28 +0000
committerAnand V. Avati <avati@dev.gluster.com>2010-07-02 05:17:03 -0700
commit2f15ffd6b5beef9abd501c594bc3cb38c2683f77 (patch)
tree107176560e1a97c42f3535380ef49d4dee3b0cd6 /libglusterfs
parent3dc79ca8e6119f5ff61058cc87f9a4fc251017ef (diff)
NULL dereference fixes in code base after running with 'clang'
* 212 logical (NULL deref/divide by zero) errors reduced to 28 (27 of them in contrib/ and lex part of codebase, 1 is invalid) * 11 API errors reduced to 0 Signed-off-by: Amar Tumballi <amar@gluster.com> Signed-off-by: Anand V. Avati <avati@dev.gluster.com> BUG: 966 (NULL check for avoiding NULL dereferencing of pointers..) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=966
Diffstat (limited to 'libglusterfs')
-rw-r--r--libglusterfs/src/common-utils.c3
-rw-r--r--libglusterfs/src/dict.c5
-rw-r--r--libglusterfs/src/event.c2
-rw-r--r--libglusterfs/src/graph.l6
-rw-r--r--libglusterfs/src/graph.y2
-rw-r--r--libglusterfs/src/stack.h9
6 files changed, 19 insertions, 8 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c
index 694a9040c..1be1f8126 100644
--- a/libglusterfs/src/common-utils.c
+++ b/libglusterfs/src/common-utils.c
@@ -150,7 +150,8 @@ gf_resolve_ip6 (const char *hostname,
*addr_info = cache->next;
}
- cache->next = cache->next->ai_next;
+ if (cache->next)
+ cache->next = cache->next->ai_next;
if (cache->next) {
ret = getnameinfo((struct sockaddr *)cache->next->ai_addr,
cache->next->ai_addrlen,
diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c
index 7d560bdac..ca6275f26 100644
--- a/libglusterfs/src/dict.c
+++ b/libglusterfs/src/dict.c
@@ -581,9 +581,10 @@ dict_unserialize_old (char *buf, int32_t size, dict_t **fill)
int32_t ret = 0;
int32_t cnt = 0;
- if (!buf || fill == NULL || !*fill) {
+ if (!buf || !fill || !(*fill)) {
gf_log ("dict", GF_LOG_ERROR,
- "@buf=%p @fill=%p @*fill=%p", buf, fill, *fill);
+ "@buf=%p @fill=%p @*fill=%p",
+ buf, fill, (fill) ? (*fill) : NULL);
return NULL;
}
diff --git a/libglusterfs/src/event.c b/libglusterfs/src/event.c
index 819357d43..7ac891fa1 100644
--- a/libglusterfs/src/event.c
+++ b/libglusterfs/src/event.c
@@ -867,7 +867,7 @@ event_dispatch_epoll (struct event_pool *event_pool)
size = ret;
for (i = 0; i < size; i++) {
- if (!events[i].events)
+ if (!events || !events[i].events)
continue;
ret = event_dispatch_epoll_handler (event_pool,
diff --git a/libglusterfs/src/graph.l b/libglusterfs/src/graph.l
index 8d9d2dc36..f7a02e481 100644
--- a/libglusterfs/src/graph.l
+++ b/libglusterfs/src/graph.l
@@ -45,12 +45,14 @@ void append_string(const char *str, int size)
} else {
text = GF_REALLOC (text, new_size);
}
- if (!text)
+ if (!text) {
gf_log ("parser", GF_LOG_ERROR,
"out of memory");
+ return;
+ }
text_asize = new_size;
}
- memcpy(text + text_size, str, size);
+ memcpy(text + text_size, str, size);
text_size += size;
text[text_size] = 0;
}
diff --git a/libglusterfs/src/graph.y b/libglusterfs/src/graph.y
index 4ac07660f..14afaae64 100644
--- a/libglusterfs/src/graph.y
+++ b/libglusterfs/src/graph.y
@@ -382,7 +382,7 @@ yyerror (const char *str)
extern char *yytext;
extern int yylineno;
- if (curr && curr->name) {
+ if (curr && curr->name && yytext) {
if (!strcmp (yytext, "volume")) {
gf_log ("parser", GF_LOG_ERROR,
"'end-volume' not defined for volume '%s'",
diff --git a/libglusterfs/src/stack.h b/libglusterfs/src/stack.h
index ac69e389f..1ce46ccdc 100644
--- a/libglusterfs/src/stack.h
+++ b/libglusterfs/src/stack.h
@@ -253,7 +253,10 @@ STACK_DESTROY (call_stack_t *stack)
ret_fn_t fn = NULL; \
call_frame_t *_parent = NULL; \
xlator_t *old_THIS = NULL; \
- \
+ if (!frame) { \
+ gf_log ("stack", GF_LOG_CRITICAL, "!frame"); \
+ break; \
+ } \
fn = frame->ret; \
_parent = frame->parent; \
_parent->ref_count--; \
@@ -277,6 +280,10 @@ STACK_DESTROY (call_stack_t *stack)
call_frame_t *_parent = NULL; \
xlator_t *old_THIS = NULL; \
\
+ if (!frame) { \
+ gf_log ("stack", GF_LOG_CRITICAL, "!frame"); \
+ break; \
+ } \
fn = (fop_##op##_cbk_t )frame->ret; \
_parent = frame->parent; \
_parent->ref_count--; \