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)); }