<div dir="ltr">
<style type="text/css">P { margin-bottom: 0.21cm; }</style>
<p style="margin-bottom:0cm" lang="en">Hello , friends. I want to
tell you about a bug in Erlang:<br><br>
</p>
<p style="margin-bottom:0cm" lang="en"> I have a trouble with
validating xml document by xsd schema in case of</p>
<p style="margin-bottom:0cm" lang="en">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.</p>
<p style="margin-bottom:0cm" lang="en"> You can see the error
message:<br>_________________________________________________________________<br>**
exception error: no function clause matching
</p>
<p style="margin-bottom:0cm" lang="en">
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",
</p>
<p style="margin-bottom:0cm" lang="en">
{xmerl_scanner,undefined,no,prolog,[],undefined,internal,
</p>
<p style="margin-bottom:0cm" lang="en">
true,false,false,49173,false,false,
</p>
<p style="margin-bottom:0cm" lang="en">
"/home/konstantin/erlang/tasks/diffR15B02/xml_invalid_attribute_test",
</p>
<p style="margin-bottom:0cm" lang="en">
undefined,[],file_name_unknown,off,[],preserve,
</p>
<p style="margin-bottom:0cm" lang="en">
#Fun<xmerl_scan.0.5757651>,#Fun<xmerl_scan.1.5757651>,
</p>
<p style="margin-bottom:0cm" lang="en">
#Fun<xmerl_scan.2.5757651>,#Fun<xmerl_scan.3.5757651>,
</p>
<p style="margin-bottom:0cm" lang="en">
#Fun<xmerl_scan.4.5757651>,#Fun<xmerl_scan.5.5757651>,
</p>
<p style="margin-bottom:0cm" lang="en">
#Fun<xmerl_scan.6.5757651>,...},
</p>
<p style="margin-bottom:0cm" lang="en">
'CDATA') (xmerl_scan.erl, line 2343)
</p>
<p style="margin-bottom:0cm" lang="en"> in function
xmerl_scan:scan_element/12 (xmerl_scan.erl, line 2147)
</p>
<p style="margin-bottom:0cm" lang="en"> in call from
xmerl_scan:scan_document/2 (xmerl_scan.erl, line 571)
</p>
<p style="margin-bottom:0cm" lang="en"> in call from
xmerl_scan:string/2 (xmerl_scan.erl, line 287)
</p>
<p style="margin-bottom:0cm" lang="en"> in call from
xml_attribute_test:read_xml/1 (xml_attribute_test.erl, line 13)
</p>
<p style="margin-bottom:0cm" lang="en"> in call from
xml_attribute_test:invalid_xml_test/0 (xml_attribute_test.erl, line
17)
<br>________________________________________________________________<br><br>
</p>
<p style="margin-bottom:0cm"><span lang="en">How can i see, in the
xmerl_</span><span lang="en">scan.erl module, </span><span lang="en">scan_att_value
metod</span><span lang="en">. </span><span lang="en">No function for
processing incorrect attribute record.</span></p>
<p style="margin-bottom:0cm" lang="en"><br>
</p>
<p style="margin-bottom:0cm"><span lang="en">Tested by Erlang 1</span><span lang="en">6</span><span lang="en">B02,
xmerl </span><span lang="en">1.3.4 </span><span lang="en">and R15B02,
xmerl
1.3.2.</span><span lang="en"><br><br>_______________________ctx_megaco.xml____________________________<br><?
xml version = "1.0"?><br><context
digit=a><br> <rule><br> <result><br> <continue
context="ctx_megaco_local_in"/><br> <!
- Continue context = "ctx_megaco_local_in" / -><br> </
result><br> </ rule><br></
context><br>________________________________________________________________<br><br>_________________________ecss_routing.xsd__________________________<br><?
xml version = "1.0" encoding = "UTF- 8" ?
><br><xs:schema
xmlns:xs="<a href="http://www.w3.org/2001/XMLSchema">http://www.w3.org/2001/XMLSchema</a>"><br> <br> <xs:element
name="context"><br> <xs:complexType><br> <xs:sequence><br> <xs:element
name="rule"><br> <xs:complexType><br> <xs:sequence><br> <xs:element
name="result"><br> <xs:complexType><br> <xs:choice><br> <xs:element
name="incomplete" type="xs:string"/><br> <!
- xs: element name = "no_route" type = "nullType"
/ -><br> <xs:element
name="continue" type="continueType"/><br> </
xs: choice><br> </
xs: complexType><br> </
xs: element><br> </
xs: sequence><br> </
xs: complexType><br> </
xs: element><br> </ xs:
sequence><br> </ xs: complexType><br> </
xs: element><br> <br> <xs:complexType
name="continueType"><br> <xs:attribute
name="context" type="xs:string"/><br> </
xs: complexType><br></ xs:
schema><br>________________________________________________________________<br><br>_______________________xml_attribute_test.erl__________________________<br><br>-module
(xml_attribute_test).<br><br>-export ([<br> invalid_xml_test
/ 0<br> ]).<br><br>read_xml
(FileName) -><br> {ok, Schema} = xmerl_xsd:
process_schema ("ecss_routing.xsd"),<br> {ok,
BXml} = file: read_file (FileName),<br> Xml =
erlang: binary_to_list (BXml),<br> {XmerXml,
_} = xmerl_scan: string (Xml),<br> xmerl_xsd:
validate (XmerXml, Schema).<br><br>invalid_xml_test () -><br> Result
= read_xml ("ctx_megaco.xml"),<br> io:
format ("~ p ~ n",
[Result]).<br>________________________________________________________________<br><br></span><span lang="en">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.</span></p>
<p style="margin-bottom:0cm" lang="en">________________________________________________________________</p>
<p style="margin-bottom:0cm" lang="en">---
xmerl-1.3.2/src/xmerl_scan.erl 2013-10-26 14:25:25.000000000
</p>
<p style="margin-bottom:0cm" lang="en">+++
xmerl-1.3.2.1/src/xmerl_scan.erl 2013-10-26 13:03:42.000000000
</p>
<p style="margin-bottom:0cm" lang="en">@@ -2373,13 +2373,16 @@
</p>
<p style="margin-bottom:0cm" lang="en"> scan_att_value([H|T],
S0,'CDATA'=AT) when H == $"; H == $' ->
</p>
<p style="margin-bottom:0cm" lang="en"> ?bump_col(1),
</p>
<p style="margin-bottom:0cm" lang="en"> scan_att_chars(T, S, H,
[],[], AT,false);
</p>
<p style="margin-bottom:0cm" lang="en"> scan_att_value([H|T],
S0,AttType) when H == $"; H == $' ->
</p>
<p style="margin-bottom:0cm" lang="en"> ?bump_col(1),
</p>
<p style="margin-bottom:0cm" lang="en"> {T1,S1,IsNorm} =
normalize(T,S,false),
</p>
<p style="margin-bottom:0cm" lang="en">- scan_att_chars(T1, S1,
H, [],[], AttType,IsNorm).
</p>
<p style="margin-bottom:0cm" lang="en">+ scan_att_chars(T1, S1,
H, [],[], AttType,IsNorm);
</p>
<p style="margin-bottom:0cm" lang="en">+%% EltexPatch: prevent
function_clause exception
</p>
<p style="margin-bottom:0cm" lang="en">+scan_att_value([H|_], S0,
_AttType) ->
</p>
<p style="margin-bottom:0cm" lang="en">+ ?fatal({unexpected_char,
H}, S0).
</p>
<p style="margin-bottom:0cm" lang="en">
</p>
<p style="margin-bottom:0cm" lang="en">
scan_att_chars([],S=#xmerl_scanner{continuation_fun=F},H,Acc,TmpAcc,AT,IsNorm)->
</p>
<p style="margin-bottom:0cm" lang="en"> ?dbg("cont()...~n",
[]),
</p>
<p style="margin-bottom:0cm" lang="en"> F(fun(MoreBytes, S1) ->
</p>
<p style="margin-bottom:0cm" lang="en">
scan_att_chars(MoreBytes, S1, H, Acc,TmpAcc,AT,IsNorm)
</p>
<p style="margin-bottom:0cm" lang="en"> end,</p>
<p style="margin-bottom:0cm" lang="en">________________________________________________________________</p>
<p style="margin-bottom:0cm" lang="en"><br>
</p>
<p style="margin-bottom:0cm"><span lang="en">With best regards</span><span lang="en">,</span></p>
<p style="margin-bottom:0cm" lang="en">Malikov Constantin, software
developer, Eltex.</p>
</div>