diff --git a/contrib/check_GNU_style.py b/contrib/check_GNU_style.py
index 61faa290fa1..969534a3cc9 100755
--- a/contrib/check_GNU_style.py
+++ b/contrib/check_GNU_style.py
@@ -35,9 +35,9 @@ def main():
     format = args.format
 
     if filename == '-':
-        check_GNU_style_file(sys.stdin, None, format)
+        check_GNU_style_file(sys.stdin, format)
     else:
-        with open(filename, 'rb') as diff_file:
-            check_GNU_style_file(diff_file, 'utf-8', format)
+        with open(filename, newline='\n') as diff_file:
+            check_GNU_style_file(diff_file, format)
 
 main()
diff --git a/contrib/check_GNU_style_lib.py b/contrib/check_GNU_style_lib.py
index b5ab67ed285..b3db4fbddc9 100755
--- a/contrib/check_GNU_style_lib.py
+++ b/contrib/check_GNU_style_lib.py
@@ -262,7 +262,7 @@ class SpacesAndTabsMixedTest(unittest.TestCase):
         r = self.check.check('foo', 123, '\t  a = 123;')
         self.assertIsNone(r)
 
-def check_GNU_style_file(file, file_encoding, format):
+def check_GNU_style_file(file, format):
     checks = [LineLengthCheck(), SpacesCheck(), TrailingWhitespaceCheck(),
         SentenceSeparatorCheck(), SentenceEndOfCommentCheck(),
         SentenceDotEndCheck(), FunctionParenthesisCheck(),
@@ -271,7 +271,7 @@ def check_GNU_style_file(file, file_encoding, format):
         SpacesAndTabsMixedCheck()]
     errors = []
 
-    patch = PatchSet(file, encoding=file_encoding)
+    patch = PatchSet(file)
 
     for pfile in patch.added_files + patch.modified_files:
         t = pfile.target_file.lstrip('b/')
diff --git a/contrib/gcc-changelog/git_commit.py b/contrib/gcc-changelog/git_commit.py
index aae3416e082..d90e6c19b76 100755
--- a/contrib/gcc-changelog/git_commit.py
+++ b/contrib/gcc-changelog/git_commit.py
@@ -718,11 +718,12 @@ class GitCommit:
                         if not prs:
                             # if all ChangeLog entries have identical PRs
                             # then use them
-                            prs = self.changelog_entries[0].prs
-                            for entry in self.changelog_entries:
-                                if entry.prs != prs:
-                                    prs = []
-                                    break
+                            if self.changelog_entries:
+                                prs = self.changelog_entries[0].prs
+                                for entry in self.changelog_entries:
+                                    if entry.prs != prs:
+                                        prs = []
+                                        break
                         entry = ChangeLogEntry(changelog_location,
                                                self.top_level_authors,
                                                prs)
diff --git a/contrib/gcc-changelog/git_email.py b/contrib/gcc-changelog/git_email.py
index 87b419cae5d..2566d4149e7 100755
--- a/contrib/gcc-changelog/git_email.py
+++ b/contrib/gcc-changelog/git_email.py
@@ -37,7 +37,7 @@ unidiff_supports_renaming = hasattr(PatchedFile(), 'is_rename')
 class GitEmail(GitCommit):
     def __init__(self, filename):
         self.filename = filename
-        diff = PatchSet.from_filename(filename)
+        diff = PatchSet.from_filename(filename, newline='\n')
         date = None
         author = None
         subject = ''
diff --git a/contrib/gcc-changelog/test_email.py b/contrib/gcc-changelog/test_email.py
index d0de88cf562..b9d0cb4157c 100755
--- a/contrib/gcc-changelog/test_email.py
+++ b/contrib/gcc-changelog/test_email.py
@@ -44,7 +44,7 @@ class TestGccChangelog(unittest.TestCase):
 
         filename = None
         patch_lines = []
-        with open(os.path.join(script_path, 'test_patches.txt')) as f:
+        with open(os.path.join(script_path, 'test_patches.txt'), newline='\n') as f:
             lines = f.read()
         for line in lines.split('\n'):
             if line.startswith('==='):
@@ -455,3 +455,7 @@ class TestGccChangelog(unittest.TestCase):
     def test_space_after_tab(self):
         email = self.from_patch_glob('0001-Use-Value_Range-when-applying-inferred-ranges.patch')
         assert (email.errors[0].message == 'extra space after tab')
+
+    def test_CR_in_patch(self):
+        email = self.from_patch_glob('0001-Add-M-character.patch')
+        assert (email.errors[0].message == 'cannot find a ChangeLog location in message')
diff --git a/contrib/gcc-changelog/test_patches.txt b/contrib/gcc-changelog/test_patches.txt
index b28de7d30b0..c378c32423a 100644
--- a/contrib/gcc-changelog/test_patches.txt
+++ b/contrib/gcc-changelog/test_patches.txt
@@ -3610,3 +3610,29 @@ index 0b9aa3639c5..f279371948a 100644
  	  if (r.intersect (infer.range (x)))
 -- 
 2.38.0
+
+=== 0001-Add-M-character.patch ====
+From 71ab4c18f279dc0fa0172ffe8cfac5fabcde953d Mon Sep 17 00:00:00 2001
+From: Martin Liska <mliska@suse.cz>
+Date: Fri, 9 Dec 2022 11:55:21 +0100
+Subject: [PATCH] Add ^M character
+
+---
+ demo.txt | 5 +++++
+ 1 file changed, 5 insertions(+)
+ create mode 100644 demo.txt
+
+diff --git a/demo.txt b/demo.txt
+new file mode 100644
+index 0000000..d75da75
+--- /dev/null
++++ b/demo.txt
+@@ -0,0 +1,5 @@
++pub fn main ()
++{
++// { dg-error "Isolated CR" "" { target *-*-* } .+1 }
++  //! doc cr
 comment
++}
+-- 
+2.38.1
+
diff --git a/contrib/mklog.py b/contrib/mklog.py
index 91c0dcd8864..3a6ec681b65 100755
--- a/contrib/mklog.py
+++ b/contrib/mklog.py
@@ -361,7 +361,7 @@ if __name__ == '__main__':
     if args.directory:
         root = args.directory
 
-    data = open(args.input) if args.input else sys.stdin
+    data = open(args.input, newline='\n') if args.input else sys.stdin
     if args.update_copyright:
         update_copyright(data)
     else:
