diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/rpcclient/rpcclient.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/source3/rpcclient/rpcclient.c b/source3/rpcclient/rpcclient.c index 8d70c6030a..4639b315d1 100644 --- a/source3/rpcclient/rpcclient.c +++ b/source3/rpcclient/rpcclient.c @@ -58,35 +58,43 @@ static char **completion_fn(const char *text, int start, int end) #endif /* make sure we have a list of valid commands */ - if (!commands) + if (!commands) { return NULL; + } matches = SMB_MALLOC_ARRAY(char *, MAX_COMPLETIONS); - if (!matches) return NULL; + if (!matches) { + return NULL; + } matches[count++] = SMB_STRDUP(text); - if (!matches[0]) return NULL; + if (!matches[0]) { + SAFE_FREE(matches); + return NULL; + } - while (commands && count < MAX_COMPLETIONS-1) - { - if (!commands->cmd_set) + while (commands && count < MAX_COMPLETIONS-1) { + if (!commands->cmd_set) { break; + } - for (i=0; commands->cmd_set[i].name; i++) - { + for (i=0; commands->cmd_set[i].name; i++) { if ((strncmp(text, commands->cmd_set[i].name, strlen(text)) == 0) && (( commands->cmd_set[i].returntype == RPC_RTYPE_NTSTATUS && commands->cmd_set[i].ntfn ) || ( commands->cmd_set[i].returntype == RPC_RTYPE_WERROR && - commands->cmd_set[i].wfn))) - { + commands->cmd_set[i].wfn))) { matches[count] = SMB_STRDUP(commands->cmd_set[i].name); - if (!matches[count]) + if (!matches[count]) { + for (i = 0; i < count; i++) { + SAFE_FREE(matches[count]); + } + SAFE_FREE(matches); return NULL; + } count++; } } - commands = commands->next; } |