Erlang 为什么cyrsasl_紧急停堆机制不允许base64 GUID?

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, <<&

我正在写一个聊天通信应用程序。 如果用户的唯一id以Base 64 GUID格式提供,则会抛出错误的\u用户名错误

在此文件中:,有一种从用户名中删除
=
的方法:

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中是小写的,因此大写字母将被小写。