Fix URL matchiong for messages with slash in msgid
authorMagnus Hagander <magnus@hagander.net>
Fri, 22 Feb 2019 14:09:51 +0000 (15:09 +0100)
committerMagnus Hagander <magnus@hagander.net>
Fri, 22 Feb 2019 14:12:45 +0000 (15:12 +0100)
Our URL patterns assumed that there would never be a slash in a
messageid. It's been extremely uncommon, so this case has been missed
before, but now it turns out GitHub have started doing that with their
commit messages so it becomes more common.

django/archives/urls.py

index dfc7e3315882e84a6bc44719bb1509b3f519c70a..510daa2c94ac609bef3fa4d9a788b792a8e117fa 100644 (file)
@@ -27,19 +27,19 @@ urlpatterns = [
     # some user agents generate broken URLs that include <>
     url(r'^(?P<prefix>message-id/(|flat/|raw/))<(?P<msgid>.*)>$', archives.mailarchives.views.re_redirect),
 
+    # message-id ending in a slash needs to be redirected to one without it
+    url(r'^(message-id/.*)/$', archives.mailarchives.views.slash_redirect),
+
     # Match regular messages
-    url(r'^message-id/([^/]+)$', archives.mailarchives.views.message),
-    url(r'^message-id/flat/([^/]+)$', archives.mailarchives.views.message_flat),
-    url(r'^message-id/raw/([^/]+)$', archives.mailarchives.views.message_raw),
-    url(r'^message-id/mbox/([^/]+)$', archives.mailarchives.views.message_mbox),
+    url(r'^message-id/flat/(.+)$', archives.mailarchives.views.message_flat),
+    url(r'^message-id/raw/(.+)$', archives.mailarchives.views.message_raw),
+    url(r'^message-id/mbox/(.+)$', archives.mailarchives.views.message_mbox),
+    url(r'^message-id/(.+)$', archives.mailarchives.views.message),
     url(r'^list/([\w-]+)/mbox/([\w-]+)\.(\d{4})(\d{2})', archives.mailarchives.views.mbox),
 
     # Search
     url(r'^archives-search/', archives.mailarchives.views.search),
 
-    # message-id with a slash needs to be redirected to one without it
-    url(r'^(message-id/.*)/$', archives.mailarchives.views.slash_redirect),
-
     # Date etc indexes
     url(r'^list/([\w-]+)/$', archives.mailarchives.views.monthlist),
     url(r'^list/([\w-]+)/(\d+)-(\d+)/$', archives.mailarchives.views.datelist),