summaryrefslogtreecommitdiff
path: root/Src/params.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/params.c')
-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 = '#';