From 8764a9e3373ff77c4846302146fe9aa3cc1d5af2 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Fri, 22 Mar 2013 13:53:10 +0100 Subject: [PATCH] Fix "ad ls" segfault if requested object is not in an AFP volume Fixes bug #496. --- NEWS | 2 ++ bin/ad/ad_ls.c | 2 +- bin/ad/ad_util.c | 8 +++++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 0828927a..c85c245d 100644 --- a/NEWS +++ b/NEWS @@ -44,6 +44,8 @@ Changes in 3.0.3 Fixes bug #508. * FIX: Setting POSIX ACLs on Linux Fixes bug #506. +* FIX: "ad ls" segfault if requested object is not in an AFP volume. + Fixes bug #496. Changes in 3.0.2 ================ diff --git a/bin/ad/ad_ls.c b/bin/ad/ad_ls.c index d8362595..b5947e17 100644 --- a/bin/ad/ad_ls.c +++ b/bin/ad/ad_ls.c @@ -227,7 +227,7 @@ static void print_flags(char *path, afpvol_t *vol, const struct stat *st) if (S_ISDIR(st->st_mode)) adflags = ADFLAGS_DIR; - if (vol->vol->v_path == NULL) + if (vol->vol == NULL || vol->vol->v_path == NULL) return; ad_init(&ad, vol->vol); diff --git a/bin/ad/ad_util.c b/bin/ad/ad_util.c index 897bdf3b..fbe85235 100644 --- a/bin/ad/ad_util.c +++ b/bin/ad/ad_util.c @@ -138,9 +138,11 @@ int openvol(AFPObj *obj, const char *path, afpvol_t *vol) void closevol(afpvol_t *vol) { - if (vol->vol->v_cdb) { - cnid_close(vol->vol->v_cdb); - vol->vol->v_cdb = NULL; + if (vol->vol) { + if (vol->vol->v_cdb) { + cnid_close(vol->vol->v_cdb); + vol->vol->v_cdb = NULL; + } } memset(vol, 0, sizeof(afpvol_t)); }