root/ext/filter/callback_filter.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. php_filter_callback

   1 /*
   2   +----------------------------------------------------------------------+
   3   | PHP Version 7                                                        |
   4   +----------------------------------------------------------------------+
   5   | Copyright (c) 1997-2016 The PHP Group                                |
   6   +----------------------------------------------------------------------+
   7   | This source file is subject to version 3.01 of the PHP license,      |
   8   | that is bundled with this package in the file LICENSE, and is        |
   9   | available through the world-wide-web at the following url:           |
  10   | http://www.php.net/license/3_01.txt                                  |
  11   | If you did not receive a copy of the PHP license and are unable to   |
  12   | obtain it through the world-wide-web, please send a note to          |
  13   | license@php.net so we can mail you a copy immediately.               |
  14   +----------------------------------------------------------------------+
  15   | Authors: Derick Rethans <derick@php.net>                             |
  16   +----------------------------------------------------------------------+
  17 */
  18 
  19 /* $Id$ */
  20 
  21 #include "php_filter.h"
  22 
  23 void php_filter_callback(PHP_INPUT_FILTER_PARAM_DECL)
  24 {
  25         zval retval;
  26         zval *args;
  27         int status;
  28 
  29         if (!option_array || !zend_is_callable(option_array, IS_CALLABLE_CHECK_NO_ACCESS, NULL)) {
  30                 php_error_docref(NULL, E_WARNING, "First argument is expected to be a valid callback");
  31                 zval_ptr_dtor(value);
  32                 ZVAL_NULL(value);
  33                 return;
  34         }
  35 
  36         args = safe_emalloc(sizeof(zval), 1, 0);
  37         ZVAL_COPY(&args[0], value);
  38         status = call_user_function_ex(EG(function_table), NULL, option_array, &retval, 1, args, 0, NULL);
  39 
  40         if (status == SUCCESS && !Z_ISUNDEF(retval)) {
  41                 zval_ptr_dtor(value);
  42                 ZVAL_COPY_VALUE(value, &retval);
  43         } else {
  44                 zval_ptr_dtor(value);
  45                 ZVAL_NULL(value);
  46         }
  47 
  48         zval_ptr_dtor(&args[0]);
  49         efree(args);
  50 }
  51 
  52 /*
  53  * Local variables:
  54  * tab-width: 4
  55  * c-basic-offset: 4
  56  * End:
  57  * vim600: noet sw=4 ts=4 fdm=marker
  58  * vim<600: noet sw=4 ts=4
  59  */

/* [<][>][^][v][top][bottom][index][help] */