In a number of places in ConTeXt's source code, kpse.expand_var is
used to evaluate a texmfcnf configuration variable when
kpse.expand_braces would be the more correct choice. The files that I
have found containing this mistake are
tex/generic/context/luatex/luatex-basics-gen.lua and
tex/generic/context/luatex/luatex-fonts-merged.lua in the ConTeXt
GitHub repository. In both files, kpse.expand_var is used to evaluate
a texmfcnf configuration variable, and the resulting value is then
split into colon- or semicolon-separated components that are then
looped over (similar to how one splits the PATH environment variable
into colon- or semicolon-separated components (depending on the
operating system) and loops over those components to find an
executable).

If a texmfcnf variable, say A, is set to an expression containing
braces, say {a,b}/c, then one clearly intends for the value of A to
expand into a/c:b/c and then split into a/c and b/c. kpse.expand_var
would expand A into {a,b}/c, in which case A would not be split
correctly. kpse.expand_braces would expand A into a/c:b/c, which would
correctly split A into a/c and b/c.

I have attached a patch to correct the bugs.
diff --git a/tex/generic/context/luatex/luatex-basics-gen.lua b/tex/generic/context/luatex/luatex-basics-gen.lua
index 5a6e90cee..cbb9fb010 100644
--- a/tex/generic/context/luatex/luatex-basics-gen.lua
+++ b/tex/generic/context/luatex/luatex-basics-gen.lua
@@ -196,18 +196,18 @@ do
 
     -- standard context tree setup
 
-    local cachepaths = kpse.expand_var('$TEXMFCACHE') or ""
+    local cachepaths = kpse.expand_braces('$TEXMFCACHE') or ""
 
     -- quite like tex live or so (the weird $TEXMFCACHE test seems to be needed on miktex)
 
     if cachepaths == "" or cachepaths == "$TEXMFCACHE" then
-        cachepaths = kpse.expand_var('$TEXMFVAR') or ""
+        cachepaths = kpse.expand_braces('$TEXMFVAR') or ""
     end
 
     -- this also happened to be used (the weird $TEXMFVAR test seems to be needed on miktex)
 
     if cachepaths == "" or cachepaths == "$TEXMFVAR" then
-        cachepaths = kpse.expand_var('$VARTEXMF') or ""
+        cachepaths = kpse.expand_braces('$VARTEXMF') or ""
     end
 
     -- and this is a last resort (hm, we could use TEMP or TEMPDIR)
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 175a9ef16..b875a703e 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -4726,12 +4726,12 @@ if not caches.namespace or caches.namespace=="" or caches.namespace=="context" t
  caches.namespace='generic'
 end
 do
- local cachepaths=kpse.expand_var('$TEXMFCACHE') or ""
+ local cachepaths=kpse.expand_braces('$TEXMFCACHE') or ""
  if cachepaths=="" or cachepaths=="$TEXMFCACHE" then
-  cachepaths=kpse.expand_var('$TEXMFVAR') or ""
+  cachepaths=kpse.expand_braces('$TEXMFVAR') or ""
  end
  if cachepaths=="" or cachepaths=="$TEXMFVAR" then
-  cachepaths=kpse.expand_var('$VARTEXMF') or ""
+  cachepaths=kpse.expand_braces('$VARTEXMF') or ""
  end
  if cachepaths=="" then
   local fallbacks={ "TMPDIR","TEMPDIR","TMP","TEMP","HOME","HOMEPATH" }
_______________________________________________
dev-context mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to