[erlang-bugs] bug_xmerl_comment

Constantin Malikov <>
Wed Oct 30 02:11:36 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

use comment in the xml document. I attached simple sample, where you can
see this problem. To run it, compile xml_comment_test.erl and invoke
“invalid_xml_comment_test” method.

You can see the error message:

_________________________________________________________________
{error,

[{"context[1]",xmerl_xsd,

{undefined,

{internal_error,

{function_clause,

[{xmerl_xsd,check_choice,

[[{xmlComment,

[{result,2},{rule,2},{context,1}],

4,[],

" continue context=\"ctx_megaco_local_in\"/ "}],

[{element,

{{continue,

[anonymous,result,anonymous,rule,anonymous,

context],

[]},

{1,1}}}],

{1,1},

['_xmerl_no_name_','_xmerl_no_name_',

'_xmerl_no_name_'],

{xsd_state,"ecss_routing.xsd",

[93547814522301227513625523114529142023],

false,false,".",[],

[anonymous,result,anonymous,rule,anonymous,

context],

[],unqualified,unqualified,undefined,undefined,

[{"xs",'http://www.w3.org/2001/XMLSchema'},

{"xml",'http://www.w3.org/XML/1998/namespace'}],

[{undefined,

[{"xs",'http://www.w3.org/2001/XMLSchema'}]}],

[{"#this#","ecss_routing.xsd",undefined},

{"xml",[],

'http://www.w3.org/XML/1998/namespace'}],

28690,false,false,[],[],

#Fun<xmerl_xsd.1.36898106>,[],1,[],[],[],[],[],[],

[],[],[]},

[{xmlText,

[{result,2},{rule,2},{context,1}],

3,[],"\n ",text},

{xmlElement,continue,continue,[],

{xmlNamespace,[],[]},

[{result,2},{rule,2},{context,1}],

2,

[{xmlAttribute,context,[],[],[],

[{continue,2},

{result,2},

{rule,2},

{context,1}],

1,[],"ctx_megaco_local_in",false}],

[],[],

"/home/konstantin/erlang/tasks/diffR15B02/xml_comment_test",

undeclared},

{xmlText,

[{result,2},{rule,2},{context,1}],

1,[],"\n ",text}]],

[{file,"xmerl_xsd.erl"},{line,2806}]},

{xmerl_xsd,check_element_type,6,

[{file,"xmerl_xsd.erl"},{line,2601}]},

{xmerl_xsd,check_sequence,6,

[{file,"xmerl_xsd.erl"},{line,2754}]},

{xmerl_xsd,check_element_type,6,

[{file,"xmerl_xsd.erl"},{line,2601}]},

{xmerl_xsd,check_sequence,6,

[{file,"xmerl_xsd.erl"},{line,2754}]},

{xmerl_xsd,check_element_type,6,

[{file,"xmerl_xsd.erl"},{line,2601}]},

{xmerl_xsd,validate_xml,3,

[{file,"xmerl_xsd.erl"},{line,2418}]},

{xmerl_xsd,validate3,3,

[{file,"xmerl_xsd.erl"},{line,251}]}]}}}}]}
________________________________________________________________


 How can i see, in the xmerl_xsd.erl module, check_choice metod. No
function for processing comments.


 Tested by Erlang 16B02, xmerl 1.3.4 and R15B02, xmerl 1.3.2.

_______________________ctx_megaco.xml____________________________
<? xml version = "1.0"?>
<context>
    <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_comment_test.erl__________________________

-module (xml_comment_test).

-export ([
        invalid_xml_comment_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_comment_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_xsd.erl 2013-10-26 14:25:25.000000000

+++ xmerl-1.3.2.1/src/xmerl_xsd.erl 2013-10-26 13:01:03.000000000

@@ -2799,12 +2799,16 @@

%%check_sequence(Seq,[],_Occ,_Env,_S,_Checked) ->

%%{error,{unmatched_elements,Seq}}.

  %% Choice one alternative must occur unless all alternatives are

%% optional or the entire choice is optional.

+%% EltexPatch: add skip xml comment

+check_choice([C = #xmlComment{} |Rest],CM,Env,Block,S,Checked) ->

+ check_choice(Rest,CM,Env,Block,S,[C |Checked]);

+

check_choice([T=#xmlText{}|Rest],Els,Occ,Env,S,Checked) ->

case is_whitespace(T) of

true ->

check_choice(Rest,Els,Occ,Env,S,[T|Checked]);

_ ->

{error,{error_path(T,undefined),?MODULE,

________________________________________________________________


 With best regards,

Malikov Constantin, software developer, Eltex.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-bugs/attachments/20131030/7df429fa/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: xml_comment.tar.gz
Type: application/x-gzip
Size: 27534 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-bugs/attachments/20131030/7df429fa/attachment-0001.bin>


More information about the erlang-bugs mailing list