1. C++ / Говнокод #16132

    −121

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    char *unserialize_php(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error)
    {
    	const char* argv[] = {""};
    	std::string *value = (std::string*)initid->ptr;
    
    	PHP_EMBED_START_BLOCK(0, (char**)argv);
    	pfc_set_string(
    			UNSERIALIZE_PHP_TARGET_STRING,
    			args->args[0],
    			sizeof(UNSERIALIZE_PHP_TARGET_STRING),
    			args->lengths[0]);
    // ЧИТО?!!!!
    	if(!pfc_evalf(__func__, "$%s=unserialize($%s); if(!$%s) $%s=null; else { "
    				"if(isset(%s) && !is_resource(%s) && !is_object(%s) && !is_null(%s) && !is_array(%s)) {"
    				"$%s=%s; } else { $%s=null; }}",
    				UNSERIALIZE_PHP_TARGET_OBJECT,
    				UNSERIALIZE_PHP_TARGET_STRING,
    
    				// if
    				UNSERIALIZE_PHP_TARGET_OBJECT,
    				UNSERIALIZE_PHP_TARGET_OUTPUT_VARIABLE,
    
    				// else
    				args->args[1], // if(isset)
    				args->args[1], // if(is_resource)
    				args->args[1], // if(is_object)
    				args->args[1], // if(is_null)
    				args->args[1], // if(is_array)
    
    				UNSERIALIZE_PHP_TARGET_OUTPUT_VARIABLE,
    				args->args[1],
    
    				UNSERIALIZE_PHP_TARGET_OUTPUT_VARIABLE
    				))
    	{
    		strcpy(error,"eval return error.");
    		php_embed_shutdown(TSRMLS_C);
    		DEBUG_MSG("eval fail\n");
    		return 0;
    	}
    
    	if (!pfc_get_string(UNSERIALIZE_PHP_TARGET_OUTPUT_VARIABLE,
    				value,
    				sizeof(UNSERIALIZE_PHP_TARGET_OUTPUT_VARIABLE))) {
    		strcpy(error,"can't get output.");
    		php_embed_shutdown(TSRMLS_C);
    		DEBUG_MSG("get fail\n");
    		return 0;
    	}
    
    	*length = strlen(value->c_str());
    	if(*length==0)
    	{
    		*is_null = 1;
    		php_embed_shutdown(TSRMLS_C);
    		return 0;
    	}
    
    	PHP_EMBED_END_BLOCK();
    
    	return (char*)value->c_str();
    }

    отсюда
    https://github.com/junamai2000/mysql_unserialize_php

    Запостил: brainstorm, 09 Июня 2014

    Комментарии (3) RSS

    Добавить комментарий