⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 var_unserializer.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		return 0;	}		class_name = str_tolower_copy((char *)emalloc(len+1), class_name, len);	class_name[len] = '\0';		len3 = strspn(class_name, "0123456789_abcdefghijklmnopqrstuvwxyz\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377");	if (len3 != len)	{		*p = YYCURSOR + len3 - len;		efree(class_name);		return 0;	}	if (zend_hash_find(CG(class_table), class_name, len + 1, (void **) &ce) != SUCCESS) {		if ((PG(unserialize_callback_func) == NULL) || (PG(unserialize_callback_func)[0] == '\0')) {			incomplete_class = 1;			ce = PHP_IC_ENTRY;		} else {			MAKE_STD_ZVAL(user_func);			ZVAL_STRING(user_func, PG(unserialize_callback_func), 1);			args[0] = &arg_func_name;			MAKE_STD_ZVAL(arg_func_name);			ZVAL_STRING(arg_func_name, class_name, 1);							if (call_user_function_ex(CG(function_table), NULL, user_func, &retval_ptr, 1, args, 0, NULL TSRMLS_CC) != SUCCESS) {				zend_error(E_WARNING, "'unserialize_callback_func' defined (%s) but not found", user_func->value.str.val);				incomplete_class = 1;				ce = PHP_IC_ENTRY;			} else {				if (zend_hash_find(CG(class_table), class_name, len + 1, (void **) &ce) != SUCCESS) {					zend_error(E_WARNING, "'unserialize_callback_func' (%s) hasn't defined the class it was called for", user_func->value.str.val);					incomplete_class = 1;					ce = PHP_IC_ENTRY;				} else {#ifdef ZEND_ENGINE_2					ce = *(zend_class_entry **)ce; /* Bad hack, TBF! */#endif					}			}		}	} else {#ifdef ZEND_ENGINE_2		ce = *(zend_class_entry **)ce; /* Bad hack, TBF! */#endif		}	*p = YYCURSOR;	elements = object_common1(UNSERIALIZE_PASSTHRU, ce);	if (incomplete_class) {		php_store_class_name(*rval, class_name, len2 TSRMLS_CC);	}	efree(class_name);	return object_common2(UNSERIALIZE_PASSTHRU, elements);}yy24:		yych = *++YYCURSOR;		if(yych <= ',') {			if(yych != '+') goto yy17;		} else {			if(yych <= '-') goto yy25;			if(yych <= '/') goto yy17;			if(yych <= '9') goto yy26;			goto yy17;		}yy25:		yych = *++YYCURSOR;		if(yych <= '/') goto yy17;		if(yych >= ':') goto yy17;yy26:		++YYCURSOR;		if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);		yych = *YYCURSOR;		if(yych <= '/') goto yy17;		if(yych <= '9') goto yy26;		if(yych >= ';') goto yy17;		yych = *++YYCURSOR;		if(yych != '"') goto yy17;		++YYCURSOR;		{	INIT_PZVAL(*rval);		return object_common2(UNSERIALIZE_PASSTHRU,			object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR));}yy31:		yych = *++YYCURSOR;		if(yych == '+') goto yy32;		if(yych <= '/') goto yy17;		if(yych <= '9') goto yy33;		goto yy17;yy32:		yych = *++YYCURSOR;		if(yych <= '/') goto yy17;		if(yych >= ':') goto yy17;yy33:		++YYCURSOR;		if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);		yych = *YYCURSOR;		if(yych <= '/') goto yy17;		if(yych <= '9') goto yy33;		if(yych >= ';') goto yy17;		yych = *++YYCURSOR;		if(yych != '{') goto yy17;		++YYCURSOR;		{	long elements = parse_iv(start + 2);	/* use iv() not uiv() in order to check data range */	*p = YYCURSOR;	if (elements < 0) {		return 0;	}	if (elements < 0) {		return 0;	}	INIT_PZVAL(*rval);	Z_TYPE_PP(rval) = IS_ARRAY;	ALLOC_HASHTABLE(Z_ARRVAL_PP(rval));	zend_hash_init(Z_ARRVAL_PP(rval), elements + 1, NULL, ZVAL_PTR_DTOR, 0);	if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_ARRVAL_PP(rval), elements)) {		return 0;	}	return finish_nested_data(UNSERIALIZE_PASSTHRU);}yy38:		yych = *++YYCURSOR;		if(yych == '+') goto yy39;		if(yych <= '/') goto yy17;		if(yych <= '9') goto yy40;		goto yy17;yy39:		yych = *++YYCURSOR;		if(yych <= '/') goto yy17;		if(yych >= ':') goto yy17;yy40:		++YYCURSOR;		if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);		yych = *YYCURSOR;		if(yych <= '/') goto yy17;		if(yych <= '9') goto yy40;		if(yych >= ';') goto yy17;		yych = *++YYCURSOR;		if(yych != '"') goto yy17;		++YYCURSOR;		{	size_t len, maxlen;	char *str;	len = parse_uiv(start + 2);	maxlen = max - YYCURSOR;	if (maxlen < len) {		*p = start + 2;		return 0;	}	str = (char*)YYCURSOR;	YYCURSOR += len;	if (*(YYCURSOR) != '"') {		*p = YYCURSOR;		return 0;	}	YYCURSOR += 2;	*p = YYCURSOR;	INIT_PZVAL(*rval);	ZVAL_STRINGL(*rval, str, len, 1);	return 1;}yy45:		yych = *++YYCURSOR;		if(yych <= '/') {			if(yych <= ',') {				if(yych == '+') goto yy49;				goto yy17;			} else {				if(yych <= '-') goto yy47;				if(yych <= '.') goto yy52;				goto yy17;			}		} else {			if(yych <= 'I') {				if(yych <= '9') goto yy50;				if(yych <= 'H') goto yy17;				goto yy48;			} else {				if(yych != 'N') goto yy17;			}		}		yych = *++YYCURSOR;		if(yych == 'A') goto yy68;		goto yy17;yy47:		yych = *++YYCURSOR;		if(yych <= '/') {			if(yych == '.') goto yy52;			goto yy17;		} else {			if(yych <= '9') goto yy50;			if(yych != 'I') goto yy17;		}yy48:		yych = *++YYCURSOR;		if(yych == 'N') goto yy64;		goto yy17;yy49:		yych = *++YYCURSOR;		if(yych == '.') goto yy52;		if(yych <= '/') goto yy17;		if(yych >= ':') goto yy17;yy50:		++YYCURSOR;		if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);		yych = *YYCURSOR;		if(yych <= ':') {			if(yych <= '.') {				if(yych <= '-') goto yy17;				goto yy62;			} else {				if(yych <= '/') goto yy17;				if(yych <= '9') goto yy50;				goto yy17;			}		} else {			if(yych <= 'E') {				if(yych <= ';') goto yy55;				if(yych <= 'D') goto yy17;				goto yy57;			} else {				if(yych == 'e') goto yy57;				goto yy17;			}		}yy52:		yych = *++YYCURSOR;		if(yych <= '/') goto yy17;		if(yych >= ':') goto yy17;yy53:		++YYCURSOR;		if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);		yych = *YYCURSOR;		if(yych <= ';') {			if(yych <= '/') goto yy17;			if(yych <= '9') goto yy53;			if(yych <= ':') goto yy17;		} else {			if(yych <= 'E') {				if(yych <= 'D') goto yy17;				goto yy57;			} else {				if(yych == 'e') goto yy57;				goto yy17;			}		}yy55:		++YYCURSOR;		{	*p = YYCURSOR;	INIT_PZVAL(*rval);	ZVAL_DOUBLE(*rval, zend_strtod((const char *)start + 2, NULL));	return 1;}yy57:		yych = *++YYCURSOR;		if(yych <= ',') {			if(yych != '+') goto yy17;		} else {			if(yych <= '-') goto yy58;			if(yych <= '/') goto yy17;			if(yych <= '9') goto yy59;			goto yy17;		}yy58:		yych = *++YYCURSOR;		if(yych <= ',') {			if(yych == '+') goto yy61;			goto yy17;		} else {			if(yych <= '-') goto yy61;			if(yych <= '/') goto yy17;			if(yych >= ':') goto yy17;		}yy59:		++YYCURSOR;		if(YYLIMIT == YYCURSOR) YYFILL(1);		yych = *YYCURSOR;		if(yych <= '/') goto yy17;		if(yych <= '9') goto yy59;		if(yych == ';') goto yy55;		goto yy17;yy61:		yych = *++YYCURSOR;		if(yych <= '/') goto yy17;		if(yych <= '9') goto yy59;		goto yy17;yy62:		++YYCURSOR;		if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);		yych = *YYCURSOR;		if(yych <= ';') {			if(yych <= '/') goto yy17;			if(yych <= '9') goto yy62;			if(yych <= ':') goto yy17;			goto yy55;		} else {			if(yych <= 'E') {				if(yych <= 'D') goto yy17;				goto yy57;			} else {				if(yych == 'e') goto yy57;				goto yy17;			}		}yy64:		yych = *++YYCURSOR;		if(yych != 'F') goto yy17;yy65:		yych = *++YYCURSOR;		if(yych != ';') goto yy17;		++YYCURSOR;		{	*p = YYCURSOR;	INIT_PZVAL(*rval);	if (!strncmp(start + 2, "NAN", 3)) {		ZVAL_DOUBLE(*rval, php_get_nan());	} else if (!strncmp(start + 2, "INF", 3)) {		ZVAL_DOUBLE(*rval, php_get_inf());	} else if (!strncmp(start + 2, "-INF", 4)) {		ZVAL_DOUBLE(*rval, -php_get_inf());	}	return 1;}yy68:		yych = *++YYCURSOR;		if(yych == 'N') goto yy65;		goto yy17;yy69:		yych = *++YYCURSOR;		if(yych <= ',') {			if(yych != '+') goto yy17;		} else {			if(yych <= '-') goto yy70;			if(yych <= '/') goto yy17;			if(yych <= '9') goto yy71;			goto yy17;		}yy70:		yych = *++YYCURSOR;		if(yych <= '/') goto yy17;		if(yych >= ':') goto yy17;yy71:		++YYCURSOR;		if(YYLIMIT == YYCURSOR) YYFILL(1);		yych = *YYCURSOR;		if(yych <= '/') goto yy17;		if(yych <= '9') goto yy71;		if(yych != ';') goto yy17;		++YYCURSOR;		{	*p = YYCURSOR;	INIT_PZVAL(*rval);	ZVAL_LONG(*rval, parse_iv(start + 2));	return 1;}yy75:		yych = *++YYCURSOR;		if(yych <= '/') goto yy17;		if(yych >= '2') goto yy17;		yych = *++YYCURSOR;		if(yych != ';') goto yy17;		++YYCURSOR;		{	*p = YYCURSOR;	INIT_PZVAL(*rval);	ZVAL_BOOL(*rval, parse_iv(start + 2));	return 1;}yy79:		++YYCURSOR;		{	*p = YYCURSOR;	INIT_PZVAL(*rval);	ZVAL_NULL(*rval);	return 1;}yy81:		yych = *++YYCURSOR;		if(yych <= ',') {			if(yych != '+') goto yy17;		} else {			if(yych <= '-') goto yy82;			if(yych <= '/') goto yy17;			if(yych <= '9') goto yy83;			goto yy17;		}yy82:		yych = *++YYCURSOR;		if(yych <= '/') goto yy17;		if(yych >= ':') goto yy17;yy83:		++YYCURSOR;		if(YYLIMIT == YYCURSOR) YYFILL(1);		yych = *YYCURSOR;		if(yych <= '/') goto yy17;		if(yych <= '9') goto yy83;		if(yych != ';') goto yy17;		++YYCURSOR;		{	long id; 	*p = YYCURSOR;	if (!var_hash) return 0;	id = parse_iv(start + 2) - 1;	if (id == -1 || var_access(var_hash, id, &rval_ref) != SUCCESS) {		return 0;	}		if (*rval == *rval_ref) return 0;	if ((*rval_ref)->refcount > 65500) {		return 0;	}	if (*rval != NULL) {	zval_ptr_dtor(rval);	}	*rval = *rval_ref;	(*rval)->refcount++;	(*rval)->is_ref = 0;		return 1;}yy87:		yych = *++YYCURSOR;		if(yych <= ',') {			if(yych != '+') goto yy17;		} else {			if(yych <= '-') goto yy88;			if(yych <= '/') goto yy17;			if(yych <= '9') goto yy89;			goto yy17;		}yy88:		yych = *++YYCURSOR;		if(yych <= '/') goto yy17;		if(yych >= ':') goto yy17;yy89:		++YYCURSOR;		if(YYLIMIT == YYCURSOR) YYFILL(1);		yych = *YYCURSOR;		if(yych <= '/') goto yy17;		if(yych <= '9') goto yy89;		if(yych != ';') goto yy17;		++YYCURSOR;		{	long id; 	*p = YYCURSOR;	if (!var_hash) return 0;	id = parse_iv(start + 2) - 1;	if (id == -1 || var_access(var_hash, id, &rval_ref) != SUCCESS) {		return 0;	}	if ((*rval_ref)->refcount > 65500) {		return 0;	}	if (*rval != NULL) {	zval_ptr_dtor(rval);	}	*rval = *rval_ref;	(*rval)->refcount++;	(*rval)->is_ref = 1;		return 1;}	}}	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -