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]