[erlang-bugs] bug_xmerl_invalid_attribute

Constantin Malikov <>
Thu Oct 31 05:01:15 CET 2013


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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-bugs/attachments/20131031/910479fa/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: xml_invalid_attribute.tar.gz
Type: application/x-gzip
Size: 28347 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-bugs/attachments/20131031/910479fa/attachment-0001.bin>


More information about the erlang-bugs mailing list