summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Build/source/texk/kpathsea/ChangeLog6
-rw-r--r--Build/source/texk/kpathsea/elt-dirs.c10
2 files changed, 12 insertions, 4 deletions
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 <karl@freefriends.org>
+
+ * 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 <karl@tug.org>
* 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));