Skip site navigation (1)Skip section navigation (2)
Date:      15 Jan 2013 23:09:50 -0000
From:      "Sébastien" Santoro <dereckson@gmail.com>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   ports/175337: New port: devel/pecl-parsekit - static analysis
Message-ID:  <20130115230950.63961.qmail@grip.espace-win.org>
Resent-Message-ID: <201301152320.r0FNK1XP017806@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         175337
>Category:       ports
>Synopsis:       New port: devel/pecl-parsekit - static analysis
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Tue Jan 15 23:20:01 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator:     Sébastien Santoro
>Release:        FreeBSD 8.1-RELEASE-p11 i386
>Organization:
>Environment:
System: FreeBSD grip.espace-win.org 8.1-RELEASE-p11 FreeBSD 8.1-RELEASE-p11 #0: Mon Jun 11 21:02:13 UTC 2012 root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC i386
>Description:
[ pkg-descr ]
Provides a userspace interpretation of the opcodes generated by the Zend
engine compiler built into PHP.

This extension is meant for development and debug purposes only and
contains some code which is potentially non-threadsafe.

WWW: http://pecl.php.net/package/parsekit

>How-To-Repeat:
>Fix:

--- devel-pecl-parsekit.shar begins here ---
# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#	pecl-parsekit/
#	pecl-parsekit/files
#	pecl-parsekit/files/patch-parsekit.c
#	pecl-parsekit/Makefile
#	pecl-parsekit/distinfo
#	pecl-parsekit/pkg-descr
#
echo c - pecl-parsekit/
mkdir -p pecl-parsekit/ > /dev/null 2>&1
echo c - pecl-parsekit/files
mkdir -p pecl-parsekit/files > /dev/null 2>&1
echo x - pecl-parsekit/files/patch-parsekit.c
sed 's/^X//' >pecl-parsekit/files/patch-parsekit.c << '9d7d0dc5e6bb0bdd6646e75be12c8139'
Xdiff --git parsekit.c parsekit.c
Xindex cfc45e7..5ddd3a7 100644
X--- parsekit.c
X+++ parsekit.c
X@@ -78,18 +78,18 @@ static void php_parsekit_parse_node(zval *return_value, zend_op_array *op_array,
X #ifdef IS_CV
X /* PHP >= 5.1 */
X 	} else if (node->op_type == IS_CV) {
X-		add_assoc_long(return_value, "var", node->u.var);
X-		add_assoc_stringl(return_value, "varname", op_array->vars[node->u.var].name, op_array->vars[node->u.var].name_len, 1);
X+		add_assoc_long(return_value, "var", node->u.op.var);
X+		add_assoc_stringl(return_value, "varname", op_array->vars[node->u.op.var].name, op_array->vars[node->u.op.var].name_len, 1);
X #endif
X 	} else {
X 		/* IS_VAR || IS_TMP_VAR || IS_UNUSED */
X 		char sop[(sizeof(void *) * 2) + 1];
X 
X-		snprintf(sop, (sizeof(void *) * 2) + 1, "%X", (unsigned int)node->u.var); 
X+		snprintf(sop, (sizeof(void *) * 2) + 1, "%X", (unsigned int)node->u.op.var); 
X 
X 		if ((flags & PHP_PARSEKIT_VAR) ||
X 			(options & PHP_PARSEKIT_ALL_ELEMENTS)) {
X-			add_assoc_long(return_value, "var", node->u.var / sizeof(temp_variable));
X+			add_assoc_long(return_value, "var", node->u.op.var / sizeof(temp_variable));
X 		} else if (options & PHP_PARSEKIT_ALWAYS_SET) {
X 			add_assoc_null(return_value, "var");
X 		}
X@@ -114,7 +114,7 @@ static void php_parsekit_parse_node(zval *return_value, zend_op_array *op_array,
X 			(options & PHP_PARSEKIT_ALL_ELEMENTS)) {
X 			add_assoc_string(return_value, "jmp_addr", sop, 1);
X 			snprintf(sop, sizeof(sop)-1, "%u",
X-					((unsigned int)((char*)node->u.var - (char*)op_array->opcodes))/sizeof(zend_op));
X+					((unsigned int)((char*)node->u.op.var - (char*)op_array->opcodes))/sizeof(zend_op));
X 			add_assoc_string(return_value, "jmp_offset", sop, 1); 
X 		} else if (options & PHP_PARSEKIT_ALWAYS_SET) {
X 			add_assoc_null(return_value, "jmp_addr");
X@@ -123,9 +123,9 @@ static void php_parsekit_parse_node(zval *return_value, zend_op_array *op_array,
X 
X 		if ((flags & PHP_PARSEKIT_EA_TYPE) ||
X 			(options & PHP_PARSEKIT_ALL_ELEMENTS)) {
X-			add_assoc_long(return_value, "EA.type", node->u.EA.type);
X+			add_assoc_long(return_value, "EA", node->EA);
X 		} else if (options & PHP_PARSEKIT_ALWAYS_SET) {
X-			add_assoc_null(return_value, "EA.type");
X+			add_assoc_null(return_value, "EA");
X 		}
X 	}
X }
X@@ -300,7 +300,7 @@ static void php_parsekit_parse_op_array(zval *return_value, zend_op_array *ops,
X 	}
X 	add_assoc_long(return_value, "num_args", ops->num_args);
X 	add_assoc_long(return_value, "required_num_args", ops->required_num_args);
X-	add_assoc_bool(return_value, "pass_rest_by_reference", ops->pass_rest_by_reference);
X+	add_assoc_bool(return_value, "pass_rest_by_reference", ops->fn_flags & ZEND_ACC_PASS_REST_BY_REFERENCE);
X 
X 	if (ops->num_args && ops->arg_info) {
X 		MAKE_STD_ZVAL(tmpzval);
X@@ -374,15 +374,15 @@ static void php_parsekit_parse_op_array(zval *return_value, zend_op_array *ops,
X #endif
X /* ZE1 and ZE2 */
X 
X-	add_assoc_bool(return_value, "return_reference", ops->return_reference);
X+	add_assoc_bool(return_value, "return_reference", ops->fn_flags & ZEND_ACC_RETURN_REFERENCE);
X 	add_assoc_long(return_value, "refcount", *(ops->refcount));
X 	add_assoc_long(return_value, "last", ops->last);
X-	add_assoc_long(return_value, "size", ops->size);
X+	add_assoc_long(return_value, "size", CG(context).opcodes_size);
X 	add_assoc_long(return_value, "T", ops->T);
X 	add_assoc_long(return_value, "last_brk_cont", ops->last_brk_cont);
X-	add_assoc_long(return_value, "current_brk_cont", ops->current_brk_cont);
X-	add_assoc_long(return_value, "backpatch_count", ops->backpatch_count);
X-	add_assoc_bool(return_value, "done_pass_two", ops->done_pass_two);
X+	add_assoc_long(return_value, "current_brk_cont", CG(context).current_brk_cont);
X+	add_assoc_long(return_value, "backpatch_count", CG(context).backpatch_count);
X+	add_assoc_bool(return_value, "done_pass_two", ops->fn_flags & ZEND_ACC_DONE_PASS_TWO);
X 
X 	if (ops->last_brk_cont > 0) {
X 		MAKE_STD_ZVAL(tmpzval);
X@@ -413,10 +413,10 @@ static void php_parsekit_parse_op_array(zval *return_value, zend_op_array *ops,
X 		add_assoc_null(return_value, "static_variables");
X 	}
X 
X-	if (ops->start_op) {
X+	if (EG(start_op)) {
X 		char sop[(sizeof(void *) * 2) + 1];
X 
X-		snprintf(sop, sizeof(sop), "%X", (unsigned int)ops->start_op); 
X+		snprintf(sop, sizeof(sop), "%X", (unsigned int)EG(start_op));
X 		add_assoc_string(return_value, "start_op", sop, 1);
X 	} else if (options & PHP_PARSEKIT_ALWAYS_SET) {
X 		add_assoc_null(return_value, "start_op");
X@@ -431,7 +431,7 @@ static void php_parsekit_parse_op_array(zval *return_value, zend_op_array *ops,
X 	/* Leave this last, it simplifies readability */
X 	MAKE_STD_ZVAL(tmpzval);
X 	array_init(tmpzval);
X-	for(op = ops->opcodes, i = 0; op && i < ops->size; op++, i++) {
X+	for(op = ops->opcodes, i = 0; op && i < CG(context).opcodes_size; op++, i++) {
X 		zval *zop;
X 
X 		MAKE_STD_ZVAL(zop);
X@@ -447,17 +447,17 @@ static void php_parsekit_parse_op_array(zval *return_value, zend_op_array *ops,
X static int php_parsekit_parse_node_simple(char **pret, zend_op_array *op_array, znode *node, zend_op_array *oparray TSRMLS_DC)
X {
X 	if (node->op_type == IS_UNUSED) {
X-		if (node->u.var) {
X+		if (node->u.op.var) {
X #ifdef ZEND_ENGINE_2
X-			if (node->u.jmp_addr >= oparray->opcodes &&
X-				node->u.jmp_addr <= (oparray->opcodes + (sizeof(zend_op) * oparray->size))) 
X+			if (node->u.op.jmp_addr >= oparray->opcodes &&
X+				node->u.op.jmp_addr <= (oparray->opcodes + (sizeof(zend_op) * CG(context).opcodes_size)))
X 			{
X-				spprintf(pret, 0, "#%d", node->u.jmp_addr - oparray->opcodes);
X+				spprintf(pret, 0, "#%d", node->u.op.jmp_addr - oparray->opcodes);
X 			} 
X 			else
X #endif
X 			{
X-				spprintf(pret, 0, "0x%X", node->u.var);
X+				spprintf(pret, 0, "0x%X", node->u.op.var);
X 			}
X 			return 1;
X 		} else {
X@@ -514,7 +514,7 @@ static int php_parsekit_parse_node_simple(char **pret, zend_op_array *op_array,
X 		}
X 	}
X 
X-	spprintf(pret, 0, "T(%d)", node->u.var / sizeof(temp_variable));
X+	spprintf(pret, 0, "T(%d)", node->u.op.var / sizeof(temp_variable));
X 	return 1;
X }
X /* }}} */
X@@ -528,7 +528,7 @@ static void php_parsekit_parse_op_array_simple(zval *return_value, zend_op_array
X 
X 	array_init(return_value);
X 
X-	for (op = ops->opcodes, i = 0; op && i < ops->size; op++, i++) {
X+	for (op = ops->opcodes, i = 0; op && i < CG(context).opcodes_size; op++, i++) {
X 		char *opline, *result, *op1, *op2;
X 		int opline_len, freeit = 0;
X 
X@@ -633,7 +633,7 @@ static int php_parsekit_parse_class_entry(zval *return_value, zend_class_entry *
X 	} else if (options & PHP_PARSEKIT_ALWAYS_SET) {
X 		add_assoc_null(return_value, "parent");
X 	}
X-	add_assoc_bool(return_value, "constants_updated", ce->constants_updated);
X+	add_assoc_bool(return_value, "constants_updated", ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED);
X #ifdef ZEND_ENGINE_2
X /* ZE2 class_entry members */
X 	add_assoc_long(return_value, "ce_flags", ce->ce_flags);
X@@ -691,12 +691,12 @@ static int php_parsekit_parse_class_entry(zval *return_value, zend_class_entry *
X 		add_assoc_null(return_value, "properties_info");
X 	}
X 	
X-	if (ce->static_members && zend_hash_num_elements(ce->static_members) > 0) {
X+	if (ce->static_members_table && zend_hash_num_elements(ce->static_members_table) > 0) {
X 		zval *tmp_zval;
X 
X 		MAKE_STD_ZVAL(tmpzval);
X 		array_init(tmpzval);
X-		zend_hash_copy(HASH_OF(tmpzval), ce->static_members, (copy_ctor_func_t) zval_add_ref, (void *) &tmp_zval, sizeof(zval *));	
X+		zend_hash_copy(HASH_OF(tmpzval), ce->static_members_table, (copy_ctor_func_t) zval_add_ref, (void *) &tmp_zval, sizeof(zval *));
X 		add_assoc_zval(return_value, "static_members", tmpzval);
X 	} else if (options & PHP_PARSEKIT_ALWAYS_SET) {
X 		add_assoc_null(return_value, "static_members");
X@@ -724,11 +724,11 @@ static int php_parsekit_parse_class_entry(zval *return_value, zend_class_entry *
X 		add_assoc_null(return_value, "interfaces");
X 	}
X 
X-	add_assoc_string(return_value, "filename", ce->filename, 1);
X-	add_assoc_long(return_value, "line_start", ce->line_start);
X-	add_assoc_long(return_value, "line_end", ce->line_end);
X-	if (ce->doc_comment) {
X-		add_assoc_stringl(return_value, "doc_comment", ce->doc_comment, ce->doc_comment_len, 1);
X+	add_assoc_string(return_value, "filename", ce->info.user.filename, 1);
X+	add_assoc_long(return_value, "line_start", ce->info.user.line_start);
X+	add_assoc_long(return_value, "line_end", ce->info.user.line_end);
X+	if (ce->info.user.doc_comment) {
X+		add_assoc_stringl(return_value, "doc_comment", ce->info.user.doc_comment, ce->info.user.doc_comment_len, 1);
X 	} else if (options & PHP_PARSEKIT_ALWAYS_SET) {
X 		add_assoc_null(return_value, "doc_comment");
X 	}
X@@ -757,12 +757,12 @@ static int php_parsekit_parse_class_entry(zval *return_value, zend_class_entry *
X 		add_assoc_null(return_value, "function_table");
X 	}
X 
X-	if (zend_hash_num_elements(&(ce->default_properties)) > 0) {
X+	if (zend_hash_num_elements(&(ce->default_properties_table)) > 0) {
X 		zval *tmp_zval;
X 
X 		MAKE_STD_ZVAL(tmpzval);
X 		array_init(tmpzval);
X-		zend_hash_copy(HASH_OF(tmpzval), &(ce->default_properties), (copy_ctor_func_t) zval_add_ref, (void *) &tmp_zval, sizeof(zval *));	
X+		zend_hash_copy(HASH_OF(tmpzval), &(ce->default_properties_table), (copy_ctor_func_t) zval_add_ref, (void *) &tmp_zval, sizeof(zval *));	
X 		add_assoc_zval(return_value, "default_properties", tmpzval);
X 	} else if (options & PHP_PARSEKIT_ALWAYS_SET) {
X 		add_assoc_null(return_value, "default_properties");
X@@ -1131,7 +1131,7 @@ static unsigned char php_parsekit_second_arg_force_ref[] = { 3, BYREF_NONE, BYRE
X #endif
X 
X /* {{{ function_entry */
X-function_entry parsekit_functions[] = {
X+zend_function_entry parsekit_functions[] = {
X 	PHP_FE(parsekit_compile_string,			php_parsekit_second_arg_force_ref)
X 	PHP_FE(parsekit_compile_file,			php_parsekit_second_arg_force_ref)
X 	PHP_FE(parsekit_opcode_flags,			NULL)
9d7d0dc5e6bb0bdd6646e75be12c8139
echo x - pecl-parsekit/Makefile
sed 's/^X//' >pecl-parsekit/Makefile << 'd4c4ba26b15b55637dce86c795c4bf08'
X# Created by: 			Sébastien Santoro <dereckson@gmail.com>
X# $FreeBSD$
X
XPORTNAME=	parsekit
XPORTVERSION=	1.3.0
XCATEGORIES=	devel
XMASTER_SITES=	http://pecl.php.net/get/
XPKGNAMEPREFIX=	pecl-
XEXTRACT_SUFX=	.tgz
XDIST_SUBDIR=	PECL
X
XMAINTAINER=	dereckson@gmail.com
XCOMMENT=	A opcodes runtime analysis PECL extension
X
XLICENSE=	PHP301
X
XUSE_PHP=	yes
XUSE_PHP_BUILD=	yes
XUSE_PHPEXT=	yes
XPHP_MODNAME=	parsekit
XDEFAULT_PHP_VER=54
X
XCONFIGURE_ARGS=	--enable-parsekit
XCFLAGS+=	-I${LOCALBASE}/include
X
X.include <bsd.port.mk>
d4c4ba26b15b55637dce86c795c4bf08
echo x - pecl-parsekit/distinfo
sed 's/^X//' >pecl-parsekit/distinfo << '3aaca6aed9ebb28df70d1aa627b42229'
XSHA256 (PECL/parsekit-1.3.0.tgz) = 447d5ec6412d6c8c6489b03e7333d3872944444610b74eafd608eddcb3bbaf08
XSIZE (PECL/parsekit-1.3.0.tgz) = 15336
3aaca6aed9ebb28df70d1aa627b42229
echo x - pecl-parsekit/pkg-descr
sed 's/^X//' >pecl-parsekit/pkg-descr << 'fc37474616d4784e55d07ea999200a7b'
XProvides a userspace interpretation of the opcodes generated by the Zend
Xengine compiler built into PHP.
X
XThis extension is meant for development and debug purposes only and
Xcontains some code which is potentially non-threadsafe.
X
XWWW: http://pecl.php.net/package/parsekit
fc37474616d4784e55d07ea999200a7b
exit
--- devel-pecl-parsekit.shar ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20130115230950.63961.qmail>