Swap public and system ID in start_doctype_decl. Fixes #780300.
diff --git a/Doc/whatsnew/whatsnew24.tex b/Doc/whatsnew/whatsnew24.tex
index 8e2b11e..ff8a3fa 100644
--- a/Doc/whatsnew/whatsnew24.tex
+++ b/Doc/whatsnew/whatsnew24.tex
@@ -561,6 +561,10 @@
 \item \function{dircache.listdir()} now passes exceptions to the caller
       instead of returning empty lists.
 
+\item \function{LexicalHandler.startDTD} used to receive public and system ID
+  in the wrong order. This has been corrected; applications relying on the
+  wrong order need to be fixed.
+
 \end{itemize}
 
 
diff --git a/Lib/xml/sax/expatreader.py b/Lib/xml/sax/expatreader.py
index 58ad773..ab8cbc1 100644
--- a/Lib/xml/sax/expatreader.py
+++ b/Lib/xml/sax/expatreader.py
@@ -361,7 +361,7 @@
     def end_namespace_decl(self, prefix):
         self._cont_handler.endPrefixMapping(prefix)
 
-    def start_doctype_decl(self, name, pubid, sysid, has_internal_subset):
+    def start_doctype_decl(self, name, sysid, pubid, has_internal_subset):
         self._lex_handler_prop.startDTD(name, pubid, sysid)
 
     def unparsed_entity_decl(self, name, base, sysid, pubid, notation_name):
diff --git a/Misc/NEWS b/Misc/NEWS
index 983c548..809d2d9 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -306,6 +306,9 @@
 Library
 -------
 
+- Bug #780300: Swap public and system ID in LexicalHandler.startDTD.
+  Applications relying on the wrong order need to be corrected.
+
 - Bug #926075: Fixed a bug that returns a wrong pattern object
   for a string or unicode object in sre.compile() when a different
   type pattern with the same value exists.