|  | @@ -654,15 +654,20 @@ lsp_get_var(lua_State *L)
 | 
	
		
			
				|  |  |  	const char *data, *var_name;
 | 
	
		
			
				|  |  |  	size_t data_len, occurrence;
 | 
	
		
			
				|  |  |  	int ret;
 | 
	
		
			
				|  |  | -	char dst[512];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if (num_args >= 2 && num_args <= 3) {
 | 
	
		
			
				|  |  | +		char *dst;
 | 
	
		
			
				|  |  |  		data = lua_tolstring(L, 1, &data_len);
 | 
	
		
			
				|  |  |  		var_name = lua_tostring(L, 2);
 | 
	
		
			
				|  |  |  		occurrence = (num_args > 2) ? (long)lua_tonumber(L, 3) : 0;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		ret =
 | 
	
		
			
				|  |  | -		    mg_get_var2(data, data_len, var_name, dst, sizeof(dst), occurrence);
 | 
	
		
			
				|  |  | +		/* Allocate dynamically, so there is no internal limit for get_var */
 | 
	
		
			
				|  |  | +		dst = (char *)mg_malloc(data_len + 1);
 | 
	
		
			
				|  |  | +		if (!dst) {
 | 
	
		
			
				|  |  | +			return luaL_error(L, "out of memory in get_var() call");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		ret = mg_get_var2(data, data_len, var_name, dst, data_len, occurrence);
 | 
	
		
			
				|  |  |  		if (ret >= 0) {
 | 
	
		
			
				|  |  |  			/* Variable found: return value to Lua */
 | 
	
		
			
				|  |  |  			lua_pushstring(L, dst);
 | 
	
	
		
			
				|  | @@ -670,6 +675,7 @@ lsp_get_var(lua_State *L)
 | 
	
		
			
				|  |  |  			/* Variable not found (TODO (mid): may be string too long) */
 | 
	
		
			
				|  |  |  			lua_pushnil(L);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | +		mg_free(dst);
 | 
	
		
			
				|  |  |  	} else {
 | 
	
		
			
				|  |  |  		/* Syntax error */
 | 
	
		
			
				|  |  |  		return luaL_error(L, "invalid get_var() call");
 | 
	
	
		
			
				|  | @@ -721,22 +727,34 @@ lsp_get_cookie(lua_State *L)
 | 
	
		
			
				|  |  |  	const char *cookie;
 | 
	
		
			
				|  |  |  	const char *var_name;
 | 
	
		
			
				|  |  |  	int ret;
 | 
	
		
			
				|  |  | -	char dst[512];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	if (num_args == 2) {
 | 
	
		
			
				|  |  | -		cookie = lua_tostring(L, 1);
 | 
	
		
			
				|  |  | +		/* Correct number of arguments */
 | 
	
		
			
				|  |  | +		size_t data_len;
 | 
	
		
			
				|  |  | +		char *dst;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		cookie = lua_tolstring(L, 1, &data_len);
 | 
	
		
			
				|  |  |  		var_name = lua_tostring(L, 2);
 | 
	
		
			
				|  |  | -		if (cookie != NULL && var_name != NULL) {
 | 
	
		
			
				|  |  | -			ret = mg_get_cookie(cookie, var_name, dst, sizeof(dst));
 | 
	
		
			
				|  |  | -		} else {
 | 
	
		
			
				|  |  | -			ret = -1;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if (cookie == NULL || var_name == NULL) {
 | 
	
		
			
				|  |  | +			/* Syntax error */
 | 
	
		
			
				|  |  | +			return luaL_error(L, "invalid get_cookie() call");
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		dst = (char *)mg_malloc(data_len + 1);
 | 
	
		
			
				|  |  | +		if (!dst) {
 | 
	
		
			
				|  |  | +			return luaL_error(L, "out of memory in get_cookie() call");
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +		ret = mg_get_cookie(cookie, var_name, dst, data_len);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  		if (ret >= 0) {
 | 
	
		
			
				|  |  |  			lua_pushlstring(L, dst, ret);
 | 
	
		
			
				|  |  |  		} else {
 | 
	
		
			
				|  |  |  			lua_pushnil(L);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | +		mg_free(dst);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	} else {
 | 
	
		
			
				|  |  |  		/* Syntax error */
 | 
	
		
			
				|  |  |  		return luaL_error(L, "invalid get_cookie() call");
 |