Ejemplo n.º 1
0
 /**
  * Sets a value to configuration.
  * @param $key String key
  * @param $value Mixed value
  */
 public function set($key, $value, $a = null)
 {
     if (strpos($key, '.') === false) {
         $namespace = $key;
         $directive = $value;
         $value = $a;
         $key = "{$key}.{$directive}";
         $this->triggerError("Using deprecated API: use \$config->set('{$key}', ...) instead", E_USER_NOTICE);
     } else {
         list($namespace) = explode('.', $key);
     }
     if ($this->isFinalized('Cannot set directive after finalization')) {
         return;
     }
     if (!isset($this->def->info[$key])) {
         $this->triggerError('Cannot set undefined directive ' . htmlspecialchars($key) . ' to value', E_USER_WARNING);
         return;
     }
     $def = $this->def->info[$key];
     if (isset($def->isAlias)) {
         if ($this->aliasMode) {
             $this->triggerError('Double-aliases not allowed, please fix ' . 'ConfigSchema bug with' . $key, E_USER_ERROR);
             return;
         }
         $this->aliasMode = true;
         $this->set($def->key, $value);
         $this->aliasMode = false;
         $this->triggerError("{$key} is an alias, preferred directive name is {$def->key}", E_USER_NOTICE);
         return;
     }
     // Raw type might be negative when using the fully optimized form
     // of stdclass, which indicates allow_null == true
     $rtype = is_int($def) ? $def : $def->type;
     if ($rtype < 0) {
         $type = -$rtype;
         $allow_null = true;
     } else {
         $type = $rtype;
         $allow_null = isset($def->allow_null);
     }
     try {
         $value = $this->parser->parse($value, $type, $allow_null);
     } catch (HTMLPurifier_VarParserException $e) {
         $this->triggerError('Value for ' . $key . ' is of invalid type, should be ' . HTMLPurifier_VarParser::getTypeName($type), E_USER_WARNING);
         return;
     }
     if (is_string($value) && is_object($def)) {
         // resolve value alias if defined
         if (isset($def->aliases[$value])) {
             $value = $def->aliases[$value];
         }
         // check to see if the value is allowed
         if (isset($def->allowed) && !isset($def->allowed[$value])) {
             $this->triggerError('Value not supported, valid values are: ' . $this->_listify($def->allowed), E_USER_WARNING);
             return;
         }
     }
     $this->plist->set($key, $value);
     // reset definitions if the directives they depend on changed
     // this is a very costly process, so it's discouraged
     // with finalization
     if ($namespace == 'HTML' || $namespace == 'CSS' || $namespace == 'URI') {
         $this->definitions[$namespace] = null;
     }
     $this->serials[$namespace] = false;
 }
 /**
  * Generic error for if a type didn't work.
  * @param mixed $var
  * @param int $type
  */
 protected function errorGeneric($var, $type)
 {
     $vtype = gettype($var);
     $this->error("Expected type " . HTMLPurifier_VarParser::getTypeName($type) . ", got {$vtype}");
 }
Ejemplo n.º 3
0
 /** @deprecated, use HTMLPurifier_VarParser->parse() */
 public function validate($a, $b, $c = false)
 {
     trigger_error("HTMLPurifier_ConfigSchema->validate deprecated, use HTMLPurifier_VarParser->parse instead", E_USER_NOTICE);
     $parser = new HTMLPurifier_VarParser();
     return $parser->parse($a, $b, $c);
 }