=== modified file 'pytz/pytz/tests/test_tzinfo.py'
--- pytz.orig/pytz/tests/test_tzinfo.py	2011-11-04 09:32:28 +0000
+++ pytz/pytz/tests/test_tzinfo.py	2011-11-04 09:59:20 +0000
@@ -533,6 +533,24 @@
         }
 
 
+class SamoaInternationalDateLineChange(USEasternDSTStartTestCase):
+    # At the end of 2011, Samoa will switch from being east of the
+    # international dateline to the west. There will be no Dec 30th
+    # 2011 and it will switch from UTC-11 to UTC+13.
+    tzinfo = pytz.timezone('Pacific/Apia')
+    transition_time = datetime(2011, 12, 30, 10, 0, 0, tzinfo=UTC)
+    before = {
+        'tzname': 'WSDT',
+        'utcoffset': timedelta(hours=-10),
+        'dst': timedelta(hours=1),
+        }
+    after = {
+        'tzname': 'WSDT',
+        'utcoffset': timedelta(hours=14),
+        'dst': timedelta(hours=1),
+        }
+
+
 class ReferenceUSEasternDSTStartTestCase(USEasternDSTStartTestCase):
     tzinfo = reference.Eastern
     def test_arithmetic(self):

=== modified file 'src/pytz/tzfile.py'
--- src/pytz/tzfile.py	2011-02-08 10:18:52 +0000
+++ src/pytz/tzfile.py	2011-11-04 10:32:42 +0000
@@ -97,7 +97,9 @@
                         break
                 dst = inf[0] - prev_inf[0] # dst offset
 
-                if dst <= 0: # Bad dst? Look further.
+                # Bad dst? Look further. DST > 24 hours happens when
+                # a timzone has moved across the international dateline.
+                if dst <= 0 or dst > 3600*3:
                     for j in range(i+1, len(transitions)):
                         stdinf = ttinfo[lindexes[j]]
                         if not stdinf[1]:

