Here's what i'm playing with, if you want to mess with it too: import string def replace(text, old, new, join=string.join, split=string.split): return join(split(text, old), new) la, ra = "@@", "@@]" lb, rb = "]]>", "@@>" la, ra = "<]", "<]>" lb, rb = "]]>", "<][" def escape(text): cdata = replace(text, la, ra) cdata = replace(cdata, lb, rb) return cdata def unescape(cdata): text = replace(cdata, rb, lb) text = replace(text, ra, la) return text chars = "" for ch in la + ra + lb + rb: if ch not in chars: chars = chars + ch if __name__ == "__main__": class Tester: def __init__(self): self.failed = [] self.count = 0 def test(self, s, find=string.find): cdata = escape(s) text = unescape(cdata) print "%s -e-> %s -u-> %s" % (s, cdata, text) if find(cdata, "]]>") >= 0: print "EXPOSURE!" self.failed.append(s) elif s != text: print "MISMATCH!" self.failed.append(s) self.count = self.count + 1 tester = Tester() test = tester.test for a in chars: for b in chars: for c in chars: for d in chars: for e in chars: for f in chars: for g in chars: for h in chars: test(a+b+c+d+e+f+g+h) print if tester.failed == []: print "All tests succeeded." else: print "Failed %d of %d tests." % (len(tester.failed), tester.count) for t in tester.failed: tester.test(t)
participants (1)
-
Ka-Ping Yee