davidg Fri Feb 23 15:14:42 2001 EDT Modified files: /php4/ext/midgard preparser.c config.m4 Log: - workaround for the function mgd_eval() to return a value like the PHP eval(). - changed --with-mgd-experimental to --enable-mgd-experimental Index: php4/ext/midgard/preparser.c diff -u php4/ext/midgard/preparser.c:1.5 php4/ext/midgard/preparser.c:1.6 --- php4/ext/midgard/preparser.c:1.5 Tue Feb 20 03:14:55 2001 +++ php4/ext/midgard/preparser.c Fri Feb 23 15:14:42 2001 @@ -1,4 +1,4 @@ -/* $Id: preparser.c,v 1.5 2001/02/20 11:14:55 emile Exp $ +/* $Id: preparser.c,v 1.6 2001/02/23 23:14:42 davidg Exp $ Copyright (C) 1999 Jukka Zitting <[EMAIL PROTECTED]> Copyright (C) 2000 The Midgard Project ry Copyright (C) 2000 Emile Heyns, Aurora SA <[EMAIL PROTECTED]> @@ -345,6 +345,77 @@ mgd_free_pool(pool); } +/* DG {HACK ALERT}: Since the function zend_eval_string does not behave like + * the statement eval(), thie following function is the exact copy of the + * function zend_eval_string with some lines commented out. + * This is necessary to keep the compatibility between eval() and mgd_eval() + */ +static int mgd_eval_string(char *str, zval *retval_ptr, char *string_name CLS_DC +ELS_DC) +{ + zval pv; + zend_op_array *new_op_array; + zend_op_array *original_active_op_array = EG(active_op_array); + zend_function_state *original_function_state_ptr = EG(function_state_ptr); + int original_handle_op_arrays; + int retval; + +// if (retval_ptr) { +// pv.value.str.len = strlen(str)+sizeof("return ;")-1; +// pv.value.str.val = emalloc(pv.value.str.len+1); +// strcpy(pv.value.str.val, "return "); +// strcat(pv.value.str.val, str); +// strcat(pv.value.str.val, " ;"); +// } else { + pv.value.str.len = strlen(str); + pv.value.str.val = estrndup(str, pv.value.str.len); +// } + pv.type = IS_STRING; + + /*printf("Evaluating '%s'\n", pv.value.str.val);*/ + + original_handle_op_arrays = CG(handle_op_arrays); + CG(handle_op_arrays) = 0; + new_op_array = compile_string(&pv, string_name CLS_CC); + CG(handle_op_arrays) = original_handle_op_arrays; + + if (new_op_array) { + zval *local_retval_ptr=NULL; + zval **original_return_value_ptr_ptr = EG(return_value_ptr_ptr); + zend_op **original_opline_ptr = EG(opline_ptr); + + EG(return_value_ptr_ptr) = &local_retval_ptr; + EG(active_op_array) = new_op_array; + EG(no_extensions)=1; + + zend_execute(new_op_array ELS_CC); + + if (local_retval_ptr) { + if (retval_ptr) { + COPY_PZVAL_TO_ZVAL(*retval_ptr, local_retval_ptr); + } else { + zval_ptr_dtor(&local_retval_ptr); + } + } else { + if (retval_ptr) { + INIT_ZVAL(*retval_ptr); + } + } + + EG(no_extensions)=0; + EG(opline_ptr) = original_opline_ptr; + EG(active_op_array) = original_active_op_array; + EG(function_state_ptr) = original_function_state_ptr; + destroy_op_array(new_op_array); + efree(new_op_array); + EG(return_value_ptr_ptr) = original_return_value_ptr_ptr; + retval = SUCCESS; + } else { + retval = FAILURE; + } + zval_dtor(&pv); + return retval; +} + MGD_FUNCTION(eval) { zval **string, **name; @@ -370,20 +441,9 @@ WRONG_PARAM_COUNT; } if((*string)->value.str.len) { -#ifdef MGD_PREPARSER_LOG - zend_syntax_highlighter_ini syntax_highlighter_ini; - php_get_highlight_struct(&syntax_highlighter_ini); -// highlight_string(*string, &syntax_highlighter_ini, tmp); -#endif pool = mgd_alloc_pool(); value = php_eval_midgard(pool, tmp, (*string)->value.str.val, 0); -#ifdef MGD_PREPARSER_LOG -MGD_LOG_START("mgd_eval(%s) '%s'\n\n\n\n\n\n\n\n") - MGD_LOG_ARG(tmp) - MGD_LOG_ARG(value) -MGD_LOG_END() -#endif - if(zend_eval_string(value, NULL /* return_value */, tmp CLS_CC ELS_CC) != SUCCESS) { + if(mgd_eval_string(value, return_value, tmp CLS_CC ELS_CC) != SUCCESS) +{ /* DG: we probably want to turn that off when stable and ready to release * or at least offer the user an option to turn it off, as it exposes the * PHP source (security issue here) @@ -449,4 +509,5 @@ } } } + #endif /* HAVE_MIDGARD */ Index: php4/ext/midgard/config.m4 diff -u php4/ext/midgard/config.m4:1.9 php4/ext/midgard/config.m4:1.10 --- php4/ext/midgard/config.m4:1.9 Fri Feb 23 04:52:13 2001 +++ php4/ext/midgard/config.m4 Fri Feb 23 15:14:42 2001 @@ -1,4 +1,4 @@ -dnl $Id: config.m4,v 1.9 2001/02/23 12:52:13 sas Exp $ +dnl $Id: config.m4,v 1.10 2001/02/23 23:14:42 davidg Exp $ dnl Copyright (C) 1999 Jukka Zitting <[EMAIL PROTECTED]> dnl Copyright (C) 2000 The Midgard Project ry @@ -58,8 +58,8 @@ PHP_SUBST(GLIBCONFIG) AC_MSG_CHECKING(for midgard experimental functions support) - AC_ARG_WITH(mgd-experimental, - [ --with-mgd-experimental Include midgard 1.4.1 experimental functions support], PHP_MIDGARD_EXPERIMENTAL=[$]withval, PHP_MIDGARD_EXPERIMENTAL="no") + AC_ARG_ENABLE(mgd-experimental, + [ --enable-mgd-experimental Enable midgard 1.4.1 experimental functions +support], PHP_MIDGARD_EXPERIMENTAL=[$]enableval, PHP_MIDGARD_EXPERIMENTAL="no") echo "$PHP_MIDGARD_EXPERIMENTAL"; if test "$PHP_MIDGARD_EXPERIMENTAL" = "yes"; then AC_DEFINE(YOU_WANT_TO_TEST, 1, [ ]) -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]