summary refs log tree commit diff
path: root/Src
diff options
context:
space:
mode:
Diffstat (limited to 'Src')
-rw-r--r--Src/subst.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/Src/subst.c b/Src/subst.c
index 5a12e127f..d4a04b8e5 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -259,10 +259,19 @@ stringsubst(LinkList list, LinkNode node, int pf_flags, int asssub)
 #endif
 		str--;
 	    } else if (c == Inparmath) {
-		/* Math substitution of the form $((...)) */
+		/*
+		 * Math substitution of the form $((...)).
+		 * These can be nested, for goodness sake...
+		 */
+		int mathpar = 1;
 		str[-1] = '\0';
-		while (*str != Outparmath && *str)
+		while (mathpar && *str) {
 		    str++;
+		    if (*str == Outparmath)
+			mathpar--;
+		    else if (*str == Inparmath)
+			mathpar++;
+		}
 		if (*str != Outparmath) {
 		    zerr("failed to find end of math substitution");
 		    return NULL;