about summary refs log tree commit diff
path: root/Src
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2006-08-02 17:16:37 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2006-08-02 17:16:37 +0000
commit6d61a3859ecdcd2813a5d2f06393208fa2feb399 (patch)
tree69b99bde965279a5d0c35f4ee86b2db8006368ea /Src
parent21c83849a91360d8af60fd253c4a808bd720f07c (diff)
downloadzsh-6d61a3859ecdcd2813a5d2f06393208fa2feb399.tar.gz
zsh-6d61a3859ecdcd2813a5d2f06393208fa2feb399.tar.xz
zsh-6d61a3859ecdcd2813a5d2f06393208fa2feb399.zip
22578: ensure HISTCHARS/histchars never contains non-ASCII characters
Diffstat (limited to 'Src')
-rw-r--r--Src/params.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/Src/params.c b/Src/params.c
index 17ce2c54d..e3040fb7f 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -3548,10 +3548,21 @@ void
 histcharssetfn(UNUSED(Param pm), char *x)
 {
     if (x) {
-	bangchar = x[0];
-	hatchar = (bangchar) ? x[1] : '\0';
-	hashchar = (hatchar) ? x[2] : '\0';
-	zsfree(x);
+	int len, i;
+
+	unmetafy(x, &len);
+	if (len > 3)
+	    len = 3;
+	for (i = 0; i < len; i++) {
+	    if (!isascii(STOUC(x[i]))) {
+		zwarn("HISTCHARS can only contain ASCII characters");
+		return;
+	    }
+	}
+	bangchar = len ? STOUC(x[0]) : '\0';
+	hatchar =  len > 1 ? STOUC(x[1]) : '\0';
+	hashchar = len > 2 ? STOUC(x[2]) : '\0';
+	free(x);
     } else {
 	bangchar = '!';
 	hashchar = '#';