[Patch #987052  from Thomas Guettler]
Don't output empty tags
Escape page header
Remove <p> before <table> (tidy complains)
diff --git a/Lib/cgitb.py b/Lib/cgitb.py
index f75a84c..d287001 100644
--- a/Lib/cgitb.py
+++ b/Lib/cgitb.py
@@ -37,9 +37,23 @@
 </table> </table> </table> </table> </table> </font> </font> </font>'''
 
 __UNDEF__ = []                          # a special sentinel object
-def small(text): return '<small>' + text + '</small>'
-def strong(text): return '<strong>' + text + '</strong>'
-def grey(text): return '<font color="#909090">' + text + '</font>'
+def small(text):
+    if text:
+        return '<small>' + text + '</small>'
+    else:
+        return ''
+    
+def strong(text):
+    if text:
+        return '<strong>' + text + '</strong>'
+    else:
+        return ''
+    
+def grey(text):
+    if text:
+        return '<font color="#909090">' + text + '</font>'
+    else:
+        return ''
 
 def lookup(name, frame, locals):
     """Find the value for a given name in the given environment."""
@@ -88,10 +102,11 @@
     pyver = 'Python ' + sys.version.split()[0] + ': ' + sys.executable
     date = time.ctime(time.time())
     head = '<body bgcolor="#f0f0f8">' + pydoc.html.heading(
-        '<big><big><strong>%s</strong></big></big>' % str(etype),
+        '<big><big>%s</big></big>' %
+        strong(pydoc.html.escape(str(etype))),
         '#ffffff', '#6622aa', pyver + '<br>' + date) + '''
 <p>A problem occurred in a Python script.  Here is the sequence of
-function calls leading up to the error, in the order they occurred.'''
+function calls leading up to the error, in the order they occurred.</p>'''
 
     indent = '<tt>' + small('&nbsp;' * 5) + '&nbsp;</tt>'
     frames = []
@@ -142,7 +157,7 @@
                 dump.append(name + ' <em>undefined</em>')
 
         rows.append('<tr><td>%s</td></tr>' % small(grey(', '.join(dump))))
-        frames.append('''<p>
+        frames.append('''
 <table width="100%%" cellspacing=0 cellpadding=0 border=0>
 %s</table>''' % '\n'.join(rows))