diff options
author | Dan McGee <dan@archlinux.org> | 2008-02-24 08:17:17 +0100 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2008-02-24 08:17:17 +0100 |
commit | 96f7613d15e46131bf8a4b93828ad70b041524d1 (patch) | |
tree | f65e1b56d32519fa8c85e8339746f3a5b5e9d37b | |
parent | 105e01c8efcb3a27cb55cc5dd7bf15afbea80698 (diff) | |
download | pacman-96f7613d15e46131bf8a4b93828ad70b041524d1.tar.gz pacman-96f7613d15e46131bf8a4b93828ad70b041524d1.tar.xz |
Add some NULL checks into recently modified output functions
After a merge with master where some strings we print (such as descriptions)
could be NULL, a few segfaults popped up due to strlen() calls on null
pointers. Fix this by doing some preemptive checks and returning from
functions early if the string was null.
Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r-- | src/pacman/callback.c | 2 | ||||
-rw-r--r-- | src/pacman/util.c | 23 |
2 files changed, 16 insertions, 9 deletions
diff --git a/src/pacman/callback.c b/src/pacman/callback.c index 629c2e1c..01e65a95 100644 --- a/src/pacman/callback.c +++ b/src/pacman/callback.c @@ -592,7 +592,7 @@ void cb_dl_progress(const char *filename, int file_xfered, int file_total, /* Callback to handle notifications from the library */ void cb_log(pmloglevel_t level, char *fmt, va_list args) { - if(strlen(fmt) == 0) { + if(!fmt || strlen(fmt) == 0) { return; } diff --git a/src/pacman/util.c b/src/pacman/util.c index 42436e26..aa08eb26 100644 --- a/src/pacman/util.c +++ b/src/pacman/util.c @@ -224,6 +224,10 @@ void indentprint(const char *str, int indent) const wchar_t *p; int len, cidx; + if(!str) { + return; + } + len = strlen(str) + 1; wcstr = calloc(len, sizeof(wchar_t)); len = mbstowcs(wcstr, str, len); @@ -401,14 +405,17 @@ void list_display(const char *title, const alpm_list_t *list) int cols, len; wchar_t *wcstr; - /* len goes from # bytes -> # chars -> # cols */ - len = strlen(title) + 1; - wcstr = calloc(len, sizeof(wchar_t)); - len = mbstowcs(wcstr, title, len); - len = wcswidth(wcstr, len); - free(wcstr); - - printf("%s ", title); + if(title) { + /* len goes from # bytes -> # chars -> # cols */ + len = strlen(title) + 1; + wcstr = calloc(len, sizeof(wchar_t)); + len = mbstowcs(wcstr, title, len); + len = wcswidth(wcstr, len); + free(wcstr); + printf("%s ", title); + } else { + len = 0; + } if(list) { for(i = list, cols = len; i; i = alpm_list_next(i)) { |