Re: [erlang-bugs] bug_xmerl_invalid_attribute

Anthony Ramine <[email protected]>
Newsgroups gmane.comp.lang.erlang.patches,gmane.comp.lang.erlang.bugs
Message-ID <[email protected]>
I don't understand. What is the bug?

That xmerl crashes on malformed input sounds like a feature to me, not a bug.

-- 
Anthony Ramine

> Le 31 oct. 2013 à 05:01, Constantin Malikov <[email protected]> a écrit :
> 
> Hello , friends. I want to tell you about a bug in Erlang:
> 
> I have a trouble with validating xml document by xsd schema in case of
> one of the attribute have incorrect record in the xml document. I attached simple sample, where you can see this problem. To run it, compile xml_attribute_test.erl and invoke “invalid_xml_test” method.
> You can see the error message:
> _________________________________________________________________
> ** exception error: no function clause matching
> xmerl_scan:scan_att_value("a>\n <rule>\n <result>\n <continue context=\"ctx_megaco_local_in\"/>\n <!-- continue context=\"ctx_megaco_local_in\"/ -->\n </result>\n </rule>\n</context>\n",
> {xmerl_scanner,undefined,no,prolog,[],undefined,internal,
> true,false,false,49173,false,false,
> "/home/konstantin/erlang/tasks/diffR15B02/xml_invalid_attribute_test",
> undefined,[],file_name_unknown,off,[],preserve,
> #Fun<xmerl_scan.0.5757651>,#Fun<xmerl_scan.1.5757651>,
> #Fun<xmerl_scan.2.5757651>,#Fun<xmerl_scan.3.5757651>,
> #Fun<xmerl_scan.4.5757651>,#Fun<xmerl_scan.5.5757651>,
> #Fun<xmerl_scan.6.5757651>,...},
> 'CDATA') (xmerl_scan.erl, line 2343)
> in function xmerl_scan:scan_element/12 (xmerl_scan.erl, line 2147)
> in call from xmerl_scan:scan_document/2 (xmerl_scan.erl, line 571)
> in call from xmerl_scan:string/2 (xmerl_scan.erl, line 287)
> in call from xml_attribute_test:read_xml/1 (xml_attribute_test.erl, line 13)
> in call from xml_attribute_test:invalid_xml_test/0 (xml_attribute_test.erl, line 17) 
> ________________________________________________________________
> 
> How can i see, in the xmerl_scan.erl module, scan_att_value metod. No function for processing incorrect attribute record.
> 
> Tested by Erlang 16B02, xmerl 1.3.4 and R15B02, xmerl 1.3.2.
> 
> _______________________ctx_megaco.xml____________________________
> <? xml version = "1.0"?>
> <context digit=a>
>     <rule>
>         <result>
>             <continue context="ctx_megaco_local_in"/>
>             <! - Continue context = "ctx_megaco_local_in" / ->
>         </ result>
>     </ rule>
> </ context>
> ________________________________________________________________
> 
> _________________________ecss_routing.xsd__________________________
> <? xml version = "1.0" encoding = "UTF- 8" ? >
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
>   
>   <xs:element name="context">
>     <xs:complexType>
>       <xs:sequence>
>         <xs:element name="rule">
>           <xs:complexType>
>             <xs:sequence>
>               <xs:element name="result">
>                 <xs:complexType>
>                   <xs:choice>
>                     <xs:element name="incomplete" type="xs:string"/>
>                     <! - xs: element name = "no_route" type = "nullType" / ->
>                     <xs:element name="continue" type="continueType"/>
>                   </ xs: choice>
>                 </ xs: complexType>
>               </ xs: element>
>             </ xs: sequence>
>           </ xs: complexType>
>         </ xs: element>
>       </ xs: sequence>
>     </ xs: complexType>
>   </ xs: element>
>  
>   <xs:complexType name="continueType">
>     <xs:attribute name="context" type="xs:string"/>
>   </ xs: complexType>
> </ xs: schema>
> ________________________________________________________________
> 
> _______________________xml_attribute_test.erl__________________________
> 
> -module (xml_attribute_test).
> 
> -export ([
>          invalid_xml_test / 0
>         ]).
> 
> read_xml (FileName) ->
>     {ok, Schema} = xmerl_xsd: process_schema ("ecss_routing.xsd"),
>     {ok, BXml} = file: read_file (FileName),
>     Xml = erlang: binary_to_list (BXml),
>     {XmerXml, _} = xmerl_scan: string (Xml),
>     xmerl_xsd: validate (XmerXml, Schema).
> 
> invalid_xml_test () ->
>     Result = read_xml ("ctx_megaco.xml"),
>     io: format ("~ p ~ n", [Result]).
> ________________________________________________________________
> 
> I can offer the option of a patch that fixes this problem. The person who is responsible for supporting ssh has the discretion to take it as it is, or can make own fix.
> ________________________________________________________________
> --- xmerl-1.3.2/src/xmerl_scan.erl	2013-10-26 14:25:25.000000000
> +++ xmerl-1.3.2.1/src/xmerl_scan.erl	2013-10-26 13:03:42.000000000
> @@ -2373,13 +2373,16 @@
> scan_att_value([H|T], S0,'CDATA'=AT) when H == $"; H == $' ->
> ?bump_col(1),
> scan_att_chars(T, S, H, [],[], AT,false);
> scan_att_value([H|T], S0,AttType) when H == $"; H == $' ->
> ?bump_col(1),
> {T1,S1,IsNorm} = normalize(T,S,false),
> - scan_att_chars(T1, S1, H, [],[], AttType,IsNorm).
> + scan_att_chars(T1, S1, H, [],[], AttType,IsNorm);
> +%% EltexPatch: prevent function_clause exception
> +scan_att_value([H|_], S0, _AttType) ->
> + ?fatal({unexpected_char, H}, S0).
> scan_att_chars([],S=#xmerl_scanner{continuation_fun=F},H,Acc,TmpAcc,AT,IsNorm)->
> ?dbg("cont()...~n", []),
> F(fun(MoreBytes, S1) ->
> scan_att_chars(MoreBytes, S1, H, Acc,TmpAcc,AT,IsNorm)
> end,
> ________________________________________________________________
> 
> With best regards,
> Malikov Constantin, software developer, Eltex.
> <xml_invalid_attribute.tar.gz>
> _______________________________________________
> erlang-bugs mailing list
> [email protected]
> http://erlang.org/mailman/listinfo/erlang-bugs

_______________________________________________
erlang-patches mailing list
[email protected]
http://erlang.org/mailman/listinfo/erlang-patches
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.