Erlang 为什么cyrsasl_紧急停堆机制不允许base64 GUID?
我正在写一个聊天通信应用程序。 如果用户的唯一id以Base 64 GUID格式提供,则会抛出错误的\u用户名错误 在此文件中:,有一种从用户名中删除Erlang 为什么cyrsasl_紧急停堆机制不允许base64 GUID?,erlang,ejabberd,sasl,ejabberd-saas,Erlang,Ejabberd,Sasl,Ejabberd Saas,我正在写一个聊天通信应用程序。 如果用户的唯一id以Base 64 GUID格式提供,则会抛出错误的\u用户名错误 在此文件中:,有一种从用户名中删除=的方法: unescape_username(<<"">>) -> <<"">>; unescape_username(EscapedUsername) -> Pos = str:str(EscapedUsername, <<&
=
的方法:
unescape_username(<<"">>) -> <<"">>;
unescape_username(EscapedUsername) ->
Pos = str:str(EscapedUsername, <<"=">>),
if Pos == 0 -> EscapedUsername;
true ->
Start = str:substr(EscapedUsername, 1, Pos - 1),
End = str:substr(EscapedUsername, Pos),
EndLen = byte_size(End),
if EndLen < 3 -> error;
true ->
case str:substr(End, 1, 3) of
<<"=2C">> ->
<<Start/binary, ",",
(unescape_username(str:substr(End, 4)))/binary>>;
<<"=3D">> ->
<<Start/binary, "=",
(unescape_username(str:substr(End, 4)))/binary>>;
_Else -> error
end
end
end.
unescape_username()->;
unescape_用户名(EscapeEdUserName)->
Pos=str:str(EscapedUsername,),
如果Pos==0->EscapedUsername;
正确->
Start=str:substr(EscapedUsername,1,位置-1),
End=str:substr(EscapedUsername,Pos),
EndLen=字节大小(End),
如果EndLen<3->错误;
正确->
案例str:substr(End,1,3)
->
;
->
;
_Else->错误
结束
结束
结束。
我不知道这是为什么写的。如果删除此特定代码,则连接工作正常。请让我知道它为什么受到限制
如果用户的唯一id以Base 64 GUID格式提供,则会引发错误的\u用户名错误
对:
call xmpp_sasl_scram:unescape_username(<<"user1">>)
returned from xmpp_sasl_scram:unescape_username/1 -> <<"user1">>
call xmpp_sasl_scram:unescape_username(<<"user3==ABC">>)
returned from xmpp_sasl_scram:unescape_username/1 -> error
call xmpp_sasl_scram:unescape_username(<<"user4=DEF">>)
returned from xmpp_sasl_scram:unescape_username/1 -> error
call xmpp_sasl_scram:unescape_username(<<"user5=">>)
returned from xmpp_sasl_scram:unescape_username/1 -> error
调用xmpp\u sasl\u紧急停堆:unescape\u username()
从xmpp_sasl_紧急停堆返回:unescape_用户名/1->
调用xmpp_sasl_scram:unescape_username()
从xmpp\u sasl\u紧急停堆返回:unescape\u username/1->错误
调用xmpp_sasl_scram:unescape_username()
从xmpp\u sasl\u紧急停堆返回:unescape\u username/1->错误
调用xmpp_sasl_scram:unescape_username()
从xmpp\u sasl\u紧急停堆返回:unescape\u username/1->错误
我不知道这是为什么写的。如果删除此特定代码,则连接工作正常。请让我知道它为什么受到限制
我也不知道。但该代码自九年前就存在了:
不管有什么原因,这显然是一个很好的理由。解决这个问题的办法是什么?我们应该限制它吗?说明:用户名中的字符“,”或“=”分别作为“=2C”和“=3D”发送。。。。但是,用户名在XMPP中是小写的,因此大写字母将被小写。