From b187cc9bb76eb0829b8a1e04aafdf10436dbf5e4 Mon Sep 17 00:00:00 2001
From: Nicolas Dumazet <nicolas.dumazet@nexedi.com>
Date: Mon, 19 Oct 2009 12:14:46 +0000
Subject: [PATCH] Catch xml.parser.expat.ExpatError when an invalid bt5 repo is
 passed along

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@29793 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/Tool/TemplateTool.py | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/product/ERP5/Tool/TemplateTool.py b/product/ERP5/Tool/TemplateTool.py
index 7c799d7e8a..20a5c06b22 100644
--- a/product/ERP5/Tool/TemplateTool.py
+++ b/product/ERP5/Tool/TemplateTool.py
@@ -45,6 +45,7 @@ from cStringIO import StringIO
 from urllib import pathname2url, urlopen, splittype, urlretrieve
 import re
 from xml.dom.minidom import parse
+from xml.parsers.expat import ExpatError
 import struct
 import cPickle
 import posixpath
@@ -526,7 +527,17 @@ class TemplateTool (BaseTool):
         f = urlopen(url)
         property_dict_list = []
         try:
-          doc = parse(f)
+          try:
+            doc = parse(f)
+          except ExpatError:
+            if REQUEST is not None:
+              psm = translateString('Invalid repository: ${repo}',
+                                    mapping={'repo':repository})
+              REQUEST.RESPONSE.redirect("%s?portal_status_message=%s"
+                                       % (self.absolute_url(), psm))
+              return
+            else:
+              raise RuntimeError, 'Invalid repository: %s' % repository
           try:
             root = doc.documentElement
             for template in root.getElementsByTagName("template"):
-- 
2.30.9