From ff79b7825576708c2518de725682061ff51a97e7 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 29 Oct 2017 21:53:23 +0000 Subject: (do_subdir): arg cannot be empty; make assert robust git-svn-id: svn://tug.org/texlive/trunk@45639 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/texk/kpathsea/ChangeLog | 6 ++++++ Build/source/texk/kpathsea/elt-dirs.c | 10 ++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'Build') diff --git a/Build/source/texk/kpathsea/ChangeLog b/Build/source/texk/kpathsea/ChangeLog index a14b6d3ffe1..2ecf77cd4ea 100644 --- a/Build/source/texk/kpathsea/ChangeLog +++ b/Build/source/texk/kpathsea/ChangeLog @@ -1,3 +1,9 @@ +2017-10-29 Karl Berry + + * elt-dirs.c (do_subdir): assert must include elt_length>0 + to guarantee the assert of elt[elt_length-1] is valid. + From Doug McKenna, personal mail, 29oct17. + 2017-10-25 Karl Berry * expand.c (brace_expand): do not look past the terminating diff --git a/Build/source/texk/kpathsea/elt-dirs.c b/Build/source/texk/kpathsea/elt-dirs.c index 93041142b10..5db08f37099 100644 --- a/Build/source/texk/kpathsea/elt-dirs.c +++ b/Build/source/texk/kpathsea/elt-dirs.c @@ -1,6 +1,7 @@ /* elt-dirs.c: Translate a path element to its corresponding director{y,ies}. - Copyright 1993, 1994, 1995, 1996, 1997, 2008, 2009, 2010, 2011, 2016 Karl Berry. + Copyright 1993, 1994, 1995, 1996, 1997, 2008, 2009, 2010, 2011, 2016, + 2017 Karl Berry. Copyright 1997, 1998, 1999, 2000, 2005 Olaf Weber. This library is free software; you can redistribute it and/or @@ -100,7 +101,7 @@ static void expand_elt (kpathsea, str_llist_type *, string, unsigned); /* POST is a pointer into the original element (which may no longer be ELT) to just after the doubled DIR_SEP, perhaps to the null. Append subdirectories of ELT (up to ELT_LENGTH, which must be a /) to - STR_LIST_PTR. */ + STR_LIST_PTR. ELT must not be the empty string (or NULL). */ #ifdef WIN32 /* Shared across recursive calls, it acts like a stack. */ @@ -127,8 +128,9 @@ do_subdir (kpathsea kpse, str_llist_type *str_list_ptr, string elt, /* Some old compilers don't allow aggregate initialization. */ name = fn_copy0 (elt, elt_length); - assert (IS_DIR_SEP_CH (elt[elt_length - 1]) - || IS_DEVICE_SEP (elt[elt_length - 1])); + assert (elt_length > 0 + && (IS_DIR_SEP_CH (elt[elt_length - 1]) + || IS_DEVICE_SEP (elt[elt_length - 1]))); #if defined (WIN32) strcpy(dirname, FN_STRING(name)); -- cgit v1.2.3