On Wed, Jan 18, 2017 at 12:39 PM, Stefan Beller <sbeller@xxxxxxxxxx> wrote: > On Thu, Jan 12, 2017 at 3:53 PM, Brandon Williams <bmwill@xxxxxxxxxx> wrote: >> -static void prepare_attr_stack(const char *path, int dirlen) >> +/* >> + * This funciton should only be called from 'get_attr_stack()', which already > > "function" > >> + /* system-wide frame */ >> + if (git_attr_system()) { >> + e = read_attr_from_file(git_etc_gitattributes(), 1); > > read_attr_from_file may return NULL, so we'd have to treat this similar > to below "root directory", i.e. xcalloc for an empty frame? > >> + >> + /* root directory */ >> + if (!is_bare_repository() || direction == GIT_ATTR_INDEX) { >> + e = read_attr(GITATTRIBUTES_FILE, 1); >> + } else { >> + e = xcalloc(1, sizeof(struct attr_stack)); >> + } >> + key = ""; >> + push_stack(&core, e, key, strlen(key)); > > If this is a bare repo, could we just omit this frame instead of pushing > an empty xcalloc'd frame? (Same for the stack frames of system wide > and home dir) ? The next patch moves this issue into the read_attr function. So in the end we'd either need to fix read_attr_from_file to return res = xcalloc(1, sizeof(*res)); if (!fp), or we need to handle NULLs appropriately in 'core_attr_stack' ?