Yoshihiro Tanaka created THRIFT-2077:
----------------------------------------
Summary: Erlang Thrift library does not handle unicode string
values
Key: THRIFT-2077
URL: https://issues.apache.org/jira/browse/THRIFT-2077
Project: Thrift
Issue Type: Bug
Components: Erlang - Library
Affects Versions: 0.9
Environment: R15B03 or before
Reporter: Yoshihiro Tanaka
When callback function returns unicode string, thrift server crashes with
following code:
{noformat}
-module(mysample_thrift_service).
-include ("mysample_thrift.hrl").
-export([ start_link/0,
stop/1,
handle_function/2,
handle_error/2,
check_val/1,
send_req/1
]).
start_link () ->
Options = [ {port, 1234},
{name, ?MODULE},
{framed,true},
{service, mysample_thrift},
{handler, ?MODULE},
{socket_opts, [{recv_timeout, 60*60*1000}]}
],
thrift_socket_server:start (Options).
stop (Server) ->
thrift_socket_server:stop (Server),
ok.
handle_function (Function, Args) when is_atom(Function), is_tuple(Args) ->
case apply (?MODULE, Function, tuple_to_list(Args)) of
ok -> ok;
Reply -> {reply, Reply}
end.
handle_error (_, closed) -> ok;
handle_error (Function, Reason) ->
io:format ("Error Function:~p, Reason:~p~n", [Function, Reason]).
check_val (Val = <<"ascii string">>) ->
binary_to_list (Val);
check_val (Val = <<"unicode">>) ->
binary_to_list (Val) ++ [8220,98,97,100,8221];
check_val (Val) ->
"ok_string".
send_req(Val) ->
{ok,Client0} = thrift_client_util:new(
localhost, 1234, mysample_thrift, [{framed,true}]
),
{Client1,{ok,Result}} = thrift_client:call(Client0,check_val,[Val]),
thrift_client:close(Client1),
{ok, Result}.
{noformat}
The error looks as following:
{noformat}
2> mysample_thrift_service:send_req("unicode").
=ERROR REPORT==== 29-Jun-2013::22:06:25 ===
check_val had an error: {badarg,
[{erlang,list_to_binary,
[[117,110,105,99,111,100,101,8220,98,97,100,
8221]],
[]},
{thrift_binary_protocol,write,2,
[{file,"thrift_binary_protocol.erl"},
{line,159}]},
{thrift_protocol,write,2,
[{file,"thrift_protocol.erl"},{line,389}]},
{thrift_protocol,struct_write_loop,3,
[{file,"thrift_protocol.erl"},{line,402}]},
{thrift_protocol,write,2,
[{file,"thrift_protocol.erl"},{line,322}]},
{thrift_processor,send_reply,5,
[{file,"src/thrift_processor.erl"},
{line,200}]},
{thrift_processor,handle_function,3,
[{file,"src/thrift_processor.erl"},
{line,90}]},
{thrift_processor,loop,1,
[{file,"src/thrift_processor.erl"},
{line,43}]}]}
{noformat}
I tried to fix using 'unicode:characters_to_binary/3', but it did not work.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira