From 747dc9db40389d296fa2c4f469531d9919b0a9a3 Mon Sep 17 00:00:00 2001 From: "Steffen (Daode) Nurpmeso" Date: Sat, 14 Jun 2014 20:25:27 +0200 Subject: [PATCH] Via `set' etc. binary options may be given values: prevent that --- acmava.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/acmava.c b/acmava.c index dfdc50d5..daadd633 100644 --- a/acmava.c +++ b/acmava.c @@ -379,15 +379,25 @@ _var_set(struct var_carrier *vcp, char const *value) oval = UNCONST(""); } else oval = vp->v_value; - vp->v_value = _var_vcopy(value); - - /* Check if update allowed XXX wasteful on error! */ - if (vcp->vc_vmap != NULL && vcp->vc_vmap->vm_special && - (err = !_var_check_specials(vcp->vc_okey, TRU1, &vp->v_value))) { - char *cp = vp->v_value; - vp->v_value = oval; - oval = cp; + + if (vcp->vc_vmap == NULL) + vp->v_value = _var_vcopy(value); + else { + /* Via `set' etc. the user may give even binary options non-binary + * values, ignore that and force binary xxx error log? */ + if (vcp->vc_vmap->vm_binary) + value = UNCONST(""); + vp->v_value = _var_vcopy(value); + + /* Check if update allowed XXX wasteful on error! */ + if (vcp->vc_vmap->vm_special && + (err = !_var_check_specials(vcp->vc_okey, TRU1, &vp->v_value))) { + char *cp = vp->v_value; + vp->v_value = oval; + oval = cp; + } } + if (*oval != '\0') _var_vfree(oval); err = FAL0; -- 2.11.4.GIT