From 6738284449959f032955927d888909e0c37354e1 Mon Sep 17 00:00:00 2001
From: Dave Kuhlman <dkuhlman@davekuhlman.org>
Date: Wed, 17 Jan 2018 14:46:52 -0800
Subject: [PATCH] Fix for infinite loop in validation of simple types

---
 README.rst                       |   8 ++++++++
 generateDS.py                    |  23 ++++++++++++-----------
 generateDS.txt                   |   2 +-
 generateds_gui_notes.txt         |   2 +-
 gui/generateds_gui.py            |   2 +-
 librarytemplate_howto.txt        |   2 +-
 process_includes.py              |   2 +-
 setup.py                         |   2 +-
 tutorial/generateds_tutorial.txt |   2 +-
 tutorial/generateds_tutorial.zip | Bin 48768 -> 48769 bytes
 10 files changed, 27 insertions(+), 18 deletions(-)

diff --git a/README.rst b/README.rst
index c900431..4f11426 100644
--- a/README.rst
+++ b/README.rst
@@ -141,6 +141,14 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 Change history
 --------------
 
+Version 2.29.5 (01/17/2017)
+
+- Fix to prevent infinite recursion that happens when a simple type
+  is defined whose name is the same as it's restriction base type
+  except for the namespace prefix.  Thanks to Nicolas de Saint Jorre
+  for reporting this problem and for providing a schema that
+  reproduces it.
+
 Version 2.29.4 (12/14/2017)
 
 - Fix for exporting the child of an element, when that child is
diff --git a/generateDS.py b/generateDS.py
index bfe6ae7..a0edc78 100755
--- a/generateDS.py
+++ b/generateDS.py
@@ -229,7 +229,7 @@ logging.disable(logging.INFO)
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.29.4'
+VERSION = '2.29.5'
 ##VERSION##
 
 BaseStrTypes = six.string_types
@@ -4541,16 +4541,17 @@ def processValidatorBodyRestrictions(
         if base1 is not None:
             if ":" in base1:
                 base1 = base1.split(":")[1]
-            st1 = find_simple_type_def(tree, base1, None, None, ns, base)
-            if st1 is not None:
-                restrictions1 = st1.xpath(
-                    "./xs:restriction",
-                    namespaces=ns, n=stName, b=base)
-                if restrictions1:
-                    s2 = processValidatorBodyRestrictions(
-                        tree, '', restrictions1, st1, ns, stName,
-                        base1, patterns1)
-                    s1 += s2
+            if st.get('name') != base1:
+                st1 = find_simple_type_def(tree, base1, None, None, ns, base)
+                if st1 is not None:
+                    restrictions1 = st1.xpath(
+                        "./xs:restriction",
+                        namespaces=ns, n=stName, b=base)
+                    if restrictions1:
+                        s2 = processValidatorBodyRestrictions(
+                            tree, '', restrictions1, st1, ns, stName,
+                            base1, patterns1)
+                        s1 += s2
     return s1
 # end processValidatorBodyRestrictions
 
diff --git a/generateDS.txt b/generateDS.txt
index 608888f..785b1a6 100644
--- a/generateDS.txt
+++ b/generateDS.txt
@@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema
 
 .. version
 
-:revision: 2.29.4
+:revision: 2.29.5
 
 .. version
 
diff --git a/generateds_gui_notes.txt b/generateds_gui_notes.txt
index 59a6d69..1f0b27c 100644
--- a/generateds_gui_notes.txt
+++ b/generateds_gui_notes.txt
@@ -12,7 +12,7 @@ GenerateDS GUI Notes
 
 .. version
 
-:revision: 2.29.4
+:revision: 2.29.5
 
 .. version
 
diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py
index 4e13f90..06a6483 100644
--- a/gui/generateds_gui.py
+++ b/gui/generateds_gui.py
@@ -41,7 +41,7 @@ from libgenerateDS.gui import generateds_gui_session
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.29.4'
+VERSION = '2.29.5'
 ##VERSION##
 
 
diff --git a/librarytemplate_howto.txt b/librarytemplate_howto.txt
index 702e571..a03d078 100644
--- a/librarytemplate_howto.txt
+++ b/librarytemplate_howto.txt
@@ -8,7 +8,7 @@ How to package a generateDS.py generated library
 
 .. version
 
-:revision: 2.29.4
+:revision: 2.29.5
 
 .. version
 
diff --git a/process_includes.py b/process_includes.py
index 723639a..fffc046 100644
--- a/process_includes.py
+++ b/process_includes.py
@@ -40,7 +40,7 @@ except ImportError:
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.29.4'
+VERSION = '2.29.5'
 ##VERSION##
 
 CatalogDict = {}
diff --git a/setup.py b/setup.py
index 93eeec3..a37f5de 100644
--- a/setup.py
+++ b/setup.py
@@ -7,7 +7,7 @@ setup(name="generateDS",
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-    version="2.29.4",
+    version="2.29.5",
 ##VERSION##
     author="Dave Kuhlman",
     author_email="dkuhlman@davekuhlman.org",
diff --git a/tutorial/generateds_tutorial.txt b/tutorial/generateds_tutorial.txt
index ec4b328..f2aa24f 100644
--- a/tutorial/generateds_tutorial.txt
+++ b/tutorial/generateds_tutorial.txt
@@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial
 
 .. version
 
-:revision: 2.29.4
+:revision: 2.29.5
 
 .. version
 
diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip
index 2df8e3b9633f8cec64f6150fb17446a73cb67f39..9e996e740b4f0d52d4c85bdb54bd683193861181 100644
GIT binary patch
delta 1430
zcmZqp%hdRnNjAWnnMH(wfq{dewban(<E7VOF-!~${HzQN;tVpAC+w8s;$&dnbum5)
zh$lLV)Za1Sx%*dp2g?aY%UFRW&b%p^n`LG(u+CaIx5}#1j(e)B^Q2<K3G(qlcFzwx
zw`FYfndsl&?{98CKk_Ogv)kN{-^ABk-@t1*N!F)K#DSfg-+9@KE$i)C>w-hK$`yHU
zY>WQe@gX^*b~&^A+TIyKyx;DNG!@ScPq2Kcn$W2%!e1}?A*=Y^>$A@)Y*v|jdi7~9
zeK1WSpsjCBw%Z9^C+B;YFSat<B>7zGU%2k@gvmk&+Qr;22qt=DB-$Uk5IybTl-0ii
zMekg;|1S9P;>m4o+NEDZYa?a63wh6fs?>A8EatVRZF7D>n*M_~{zrGV{W9F;JUjb`
zUH-#6YaYD%^y$~!fXP9O!u1-tJ9xw<cjonT?l>Y)JlpDV*u%Qt4CUt%JR<bJE}3`O
z#HCs3`7!^@%*#9X*!|Uzd}8->1@Gj#<DPntGj}d6{&doE!b*eGxu=g_Igt1Ll~q{P
z_U7c*KHSA72hUIR6?U=Vt<gTrmm_YGuOTK-b1C-yN2Z?ZojVgAH%(rBnQN9u{ak}z
zwe{>Lx7>IszHZf-zb+}9avPubm#CCnOg7{;H)}qt5&YHj&7ut=d*YTS%y#_kk}vhD
z)aQ-pxhuhY)pMsGP+HXC$~paw#N^6|=vjMa=rC|fPJ6hpP_FV(j=;1=+4*g?f^I6_
zl{YqP*{Hr+8c}UO?bpmXp+^;M=5x4Bk6sY&oR)amX195T4!djjWr-g<`cr-=PB%#m
zFnKJgA2mBJ*lF_N3s)zzW_Q=-W$#$GYU`RwM#(i(9yfh#o|^vklJhU?-@dE=Oj-TP
z9+CLGN(_A_?_$zr&psa?1;m@*F~#e%fJFn1q*S4zQKc2!42&!<m>C$r1e*Q{M(S|=
z`-~*aA^LA+YQjaivJ@C0qI%i-Fww~=*>50%Avp*KbmW+bLPQTV>cNz5{@N(TBnWa=
zRoYWqeMSa`H9)tBPEO1b5zwnBP6-VG<`$S2Tv|M#mQ8Hcf|)Scw@rTX!&W1R(c*0g
zSNOKoK?Khu1UIv`hx0*16Q&~EHf8E<Wlng0om{cg6qH3LZ`>sVQF~#h6w_L!$^ARU
zCf{RXV`Bxo2`DYb#Rbgj3=H6K)!QW{=wigc;GCb5svjBxS0tkdl0N)%J>New1_o;h
zCI%q}39vSxcNw-cHXAWao^K?IFcoU)#a&X2XD7eeB?Afogj=+COED{EGfcM4mc`K0
zy<3XWee$y13NS5TtM4sb8pQxCggjXo7$i}w-rUGA`Fx`ck~#Jmae<<Ntp)18+|=Bp
z)S~#}g4E<<NJJt0D-SZ`j`tM?bD;kmfmjsDjK7U7llSeBg*gxszW??}F>+0o+^d8t
z9Jg1B`A{3f<a=$%UY)#auN<T2<ePi#A)00ONihXa1xAkOWZ!*UU=yPDDX^vN1cfmG
D=UOv;

delta 1456
zcmZqt%hd3fNjAWnnMH(wfq{czL1~|NeZpPEXeI^*epUtsaR!;m6L(5+aWXK!`DYXb
z#1kDw>Teqe-2JMZ$0@*UC@T@ErQrQqHG@ecqpfUJ=BE_Fr4>w`M+GOy-?u(>s=bZx
zq0+00??2w%ef;)qdRXa^hQRbYe_Osvy>seIVV^9^dg0)q#}hQI-mdmvct0$3ZTp>|
zHHpjT3+&@x`@ZDCimigds}BB~>r}AvGnbC~UN)V=mPZ@wnc{NK)$YAH$4~vMp6AKJ
zr6O-Qm{MPy*p=3DN6F-g?c5lPL&C>Y{z|;E;<40ZtjQ^4krixf5#v+l*_$ePZs#ib
z(1W)Bi{%C9&&kQYvFfdO>1K;*kEG(Bd=BbcraPsAS3LgVp}2!b-**-BeoZbpZg%}c
z?!7}xBM*N2_3K%4Kv#X`E|zI$6s~MNv-E`G=81a3rax73ckqZ!?tIt4x#NgH@ocNd
zVGkd^6MQ%K;DilvuRLwrGdtK^&-Ko~bZJ>}W$nK}qZ7`j0;SddHcpN?cDcy=`IF7X
z3c-n|tfqIbZ2bH0Z0VXWb^Ob(%@li<(Il@tTdku)>PJ|c><ztwn*llsKkC=)zV}#E
zV!d$j!DFoI;mbu$CR!zadHqmsQs&0X>tjM^{+@Y4$R_E${7a7)i;gFW<>j!=4qWzX
z^9|QT&5GTA2V>dZ3h&KcaouoZxJ9u4*LhoFnYufa#8hK8CHp)}%+36iwTVF`C8DkU
zSml$>&5jXlWi?WKt`ZY<o<2OV>cf;3nbVWr{*8E*UKA$U{-H)mA~vs)Z)U6S=QsBr
zZj=$x^-F&6*lyCp_Lxg8ju(5<_hjT&`EvU5Ifwg;t<n9qb8X}NOHpB-GY$Vuf86x3
zd20ICTh70XfBUZfGiUWHc|=mY0ZfXMcQfg-NBlR6V*hWn`8`v-zVnpGZf{^pg#%Uw
z83yP4lvMrD5MUZzaYHZa01%f}a5FHnykKTv022s9LE0xzG*V}Ws@%NaNWz>2EP6Xr
z6E4b~rN9Ug)z8+4iB3+<eghE<&C!JkZtl!65rv2zY}A8`eruFsf{2Q=Xu(BYTRa*0
zK$hL{zQSM*^n)YAWVse`f%u}*JY@Gz_G^=${HWCkVuC~)!U=wDbr8V|2*J&4?csb7
z(Zs0;hfSS&TbUD{pC?!DGzDeh$s2dduz-X1;!Y{1HB6Hy>=c`PpNWl)m4O);&_HQ1
zE-rBBf&)c=mz1Eh5d$oUfr@|u2Q~vNUA0S!xyguO@&Y4KkO5FRd61lMu*(-VMg|5M
zU`ZmvAOSWK$Yt2lcxLk3T{1AW5O?eBmSR@OW|+LNRd{mDZeCQ$9-yRK4n%U#Zf;b`
zS3t>4jSxwxJv=Z;dyo^V(w^Gt1MOS`Ob4PUPGD_;dMP(GHz~C!zPKPYxmd5FI3+X$
z%^QfALN()WWAo(wdt_nuLA>#Qj}$X!8^kgCd(pfRzgLR+AXKs+Avt;XUO7gO$+z~}
fL(GufC&d&r6&Nj|ll}H_fz6NJr@)rH6BL2~?r>XK

-- 
GitLab