[CalendarServer-changes] [8057] CalendarServer/trunk/twistedcaldav
source_changes at macosforge.org
source_changes at macosforge.org
Thu Sep 8 16:34:22 PDT 2011
Revision: 8057
http://trac.macosforge.org/projects/calendarserver/changeset/8057
Author: sagen at apple.com
Date: 2011-09-08 16:34:22 -0700 (Thu, 08 Sep 2011)
Log Message:
-----------
Remove illegal characters (below ASCII 32 aside from NL and CR) from calendar data during upgrade.
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/test/test_upgrade.py
CalendarServer/trunk/twistedcaldav/upgrade.py
Modified: CalendarServer/trunk/twistedcaldav/test/test_upgrade.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_upgrade.py 2011-09-08 01:49:24 UTC (rev 8056)
+++ CalendarServer/trunk/twistedcaldav/test/test_upgrade.py 2011-09-08 23:34:22 UTC (rev 8057)
@@ -23,7 +23,8 @@
from twistedcaldav.directory.resourceinfo import ResourceInfoDatabase
from twistedcaldav.mail import MailGatewayTokensDatabase
from twistedcaldav.upgrade import (
- xattrname, UpgradeError, upgradeData, updateFreeBusySet
+ xattrname, UpgradeError, upgradeData, updateFreeBusySet,
+ removeIllegalCharacters
)
from twistedcaldav.test.util import TestCase
from calendarserver.tools.util import getDirectory
@@ -1393,8 +1394,21 @@
test_migrateResourceInfo.todo = "FIXME: perhaps ProxySqliteDB isn't being set up correctly?"
+ def test_removeIllegalCharacters(self):
+ """
+ Control characters aside from NL and CR are removed.
+ """
+ data = "Contains\x03 control\x06 characters\x12 some\x0a allowed\x0d"
+ after, changed = removeIllegalCharacters(data)
+ self.assertEquals(after, "Contains control characters some\x0a allowed\x0d")
+ self.assertTrue(changed)
+ data = "Contains only\x0a legal\x0d"
+ after, changed = removeIllegalCharacters(data)
+ self.assertEquals(after, "Contains only\x0a legal\x0d")
+ self.assertFalse(changed)
+
event01_before = """BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Apple Inc.//iCal 3.0//EN
@@ -1485,6 +1499,7 @@
event01_after_md5 = hashlib.md5(event01_after).hexdigest()
+
def isValidCTag(value):
"""
Since ctag is generated from datetime.now(), let's make sure that at
Modified: CalendarServer/trunk/twistedcaldav/upgrade.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/upgrade.py 2011-09-08 01:49:24 UTC (rev 8056)
+++ CalendarServer/trunk/twistedcaldav/upgrade.py 2011-09-08 23:34:22 UTC (rev 8057)
@@ -178,6 +178,17 @@
continue
try:
+ data, fixed = removeIllegalCharacters(data)
+ if fixed:
+ log.warn("Removing illegal characters in %s" % (resPath,))
+ needsRewrite = True
+ except Exception, e:
+ log.error("Error while removing illegal characters in %s: %s" %
+ (resPath, e))
+ errorOccurred = True
+ continue
+
+ try:
data, fixed = normalizeCUAddrs(data, directory)
if fixed:
log.debug("Normalized CUAddrs in %s" % (resPath,))
@@ -808,7 +819,23 @@
os.remove(srcPath)
+DELETECHARS = ''.join(chr(i) for i in xrange(32) if i not in (10, 13))
+def removeIllegalCharacters(data):
+ """
+ Remove all characters below ASCII 32 except NL and CR
+ Return tuple with the processed data, and a boolean indicating wether
+ the data changed.
+ """
+ beforeLen = len(data)
+ data = data.translate(None, DELETECHARS)
+ afterLen = len(data)
+ if afterLen != beforeLen:
+ return data, True
+ else:
+ return data, False
+
+
class UpgradeFileSystemFormatService(Service, object):
"""
Upgrade filesystem from previous versions.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110908/180b1c28/attachment.html>
More information about the calendarserver-changes
mailing list