diff --git a/Doc/library/os.rst b/Doc/library/os.rst
index 86d9a89..b95833c 100644
--- a/Doc/library/os.rst
+++ b/Doc/library/os.rst
@@ -1076,15 +1076,16 @@
 
 .. function:: utime(path, times)
 
-   Set the access and modified times of the file specified by *path*. If *times* is
-   ``None``, then the file's access and modified times are set to the current time.
-   Otherwise, *times* must be a 2-tuple of numbers, of the form ``(atime, mtime)``
-   which is used to set the access and modified times, respectively. Whether a
-   directory can be given for *path* depends on whether the operating system
-   implements directories as files (for example, Windows does not).  Note that the
-   exact times you set here may not be returned by a subsequent :func:`stat` call,
-   depending on the resolution with which your operating system records access and
-   modification times; see :func:`stat`.
+   Set the access and modified times of the file specified by *path*. If *times*
+   is ``None``, then the file's access and modified times are set to the current
+   time. (The effect is similar to running the Unix program :program:`touch` on
+   the path.)  Otherwise, *times* must be a 2-tuple of numbers, of the form
+   ``(atime, mtime)`` which is used to set the access and modified times,
+   respectively. Whether a directory can be given for *path* depends on whether
+   the operating system implements directories as files (for example, Windows
+   does not).  Note that the exact times you set here may not be returned by a
+   subsequent :func:`stat` call, depending on the resolution with which your
+   operating system records access and modification times; see :func:`stat`.
 
    Availability: Macintosh, Unix, Windows.
 
@@ -1596,6 +1597,9 @@
    ``-1``, status is requested for any process in the process group ``-pid`` (the
    absolute value of *pid*).
 
+   An :exc:`OSError` is raised with the value of errno when the syscall
+   returns -1.
+
    On Windows: Wait for completion of a process given by process handle *pid*, and
    return a tuple containing *pid*, and its exit status shifted left by 8 bits
    (shifting makes cross-platform use of the function easier). A *pid* less than or
diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst
index dab97e4..837eb89 100644
--- a/Doc/reference/expressions.rst
+++ b/Doc/reference/expressions.rst
@@ -1266,13 +1266,13 @@
 +----------------------------------------------+-------------------------------------+
 | ``**``                                       | Exponentiation                      |
 +----------------------------------------------+-------------------------------------+
-| ``x.attribute``                              | Attribute reference                 |
-+----------------------------------------------+-------------------------------------+
 | ``x[index]``                                 | Subscription                        |
 +----------------------------------------------+-------------------------------------+
 | ``x[index:index]``                           | Slicing                             |
 +----------------------------------------------+-------------------------------------+
-| ``f(arguments...)``                          | Function call                       |
+| ``x(arguments...)``                          | Call                                |
++----------------------------------------------|-------------------------------------+
+| ``x.attribute``                              | Attribute reference                 |
 +----------------------------------------------+-------------------------------------+
 | ``(expressions...)``                         | Binding, tuple display, generator   |
 |                                              | expressions                         |
diff --git a/Lib/email/message.py b/Lib/email/message.py
index ff262c7..471d46b 100644
--- a/Lib/email/message.py
+++ b/Lib/email/message.py
@@ -20,18 +20,22 @@
 
 SEMISPACE = '; '
 
-# Regular expression used to split header parameters.  BAW: this may be too
-# simple.  It isn't strictly RFC 2045 (section 5.1) compliant, but it catches
-# most headers found in the wild.  We may eventually need a full fledged
-# parser eventually.
-paramre = re.compile(r'\s*;\s*')
 # Regular expression that matches `special' characters in parameters, the
 # existance of which force quoting of the parameter value.
 tspecials = re.compile(r'[ \(\)<>@,;:\\"/\[\]\?=]')
 
 
-
 # Helper functions
+def _splitparam(param):
+    # Split header parameters.  BAW: this may be too simple.  It isn't
+    # strictly RFC 2045 (section 5.1) compliant, but it catches most headers
+    # found in the wild.  We may eventually need a full fledged parser
+    # eventually.
+    a, sep, b = param.partition(';')
+    if not sep:
+        return a.strip(), None
+    return a.strip(), b.strip()
+
 def _formatparam(param, value=None, quote=True):
     """Convenience function to format and return a key=value pair.
 
@@ -443,7 +447,7 @@
         if value is missing:
             # This should have no parameters
             return self.get_default_type()
-        ctype = paramre.split(value)[0].lower().strip()
+        ctype = _splitparam(value)[0].lower()
         # RFC 2045, section 5.2 says if its invalid, use text/plain
         if ctype.count('/') != 1:
             return 'text/plain'
diff --git a/Lib/zipfile.py b/Lib/zipfile.py
index e4bc019..9e96e93 100644
--- a/Lib/zipfile.py
+++ b/Lib/zipfile.py
@@ -813,9 +813,14 @@
 
     def testzip(self):
         """Read all the files and check the CRC."""
+        chunk_size = 2 ** 20
         for zinfo in self.filelist:
             try:
-                self.read(zinfo.filename)       # Check CRC-32
+                # Read by chunks, to avoid an OverflowError or a
+                # MemoryError with very large embedded files.
+                f = self.open(zinfo.filename, "r")
+                while f.read(chunk_size):     # Check CRC-32
+                    pass
             except BadZipfile:
                 return zinfo.filename
 
diff --git a/Misc/NEWS b/Misc/NEWS
index ae95abf..afbe989 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -30,6 +30,10 @@
 Library
 -------
 
+- Issue #2676: in the email package, content-type parsing was hanging on
+  pathological input because of quadratic or exponential behaviour of a
+  regular expression.
+
 - Issue #3476: binary buffered reading through the new "io" library is now
   thread-safe.
 
diff --git a/Misc/developers.txt b/Misc/developers.txt
index f5b157c..8832463 100644
--- a/Misc/developers.txt
+++ b/Misc/developers.txt
@@ -17,6 +17,9 @@
 Permissions History
 -------------------
 
+- Hirokazu Yamamoto was given SVN access on August 12 2008 by MvL,
+  for contributions to the Windows build.
+
 - Antoine Pitrou was given SVN access on July 16 2008, by recommendation
   from GvR, for general contributions to Python.
 
