check possible recursive _as_parameter_ to prevent segfault (closes #1838)
diff --git a/Lib/lib2to3/refactor.py b/Lib/lib2to3/refactor.py
index 7d00d12..30aea63 100644
--- a/Lib/lib2to3/refactor.py
+++ b/Lib/lib2to3/refactor.py
@@ -500,7 +500,7 @@
                         node = new
 
     def processed_file(self, new_text, filename, old_text=None, write=False,
-                       encoding=None):
+                       encoding=None, newlines=None):
         """
         Called when a file has been refactored, and there are changes.
         """
diff --git a/Lib/lib2to3/tests/test_refactor.py b/Lib/lib2to3/tests/test_refactor.py
index 3eecde8..ed75955 100644
--- a/Lib/lib2to3/tests/test_refactor.py
+++ b/Lib/lib2to3/tests/test_refactor.py
@@ -231,6 +231,23 @@
                 os.path.join("a_dir", "stuff.py")]
         check(tree, tree)
 
+    def test_preserve_file_newlines(self):
+        rt = self.rt(fixers=_2TO3_FIXERS)
+        for nl in ("\r\n", "\n"):
+            data = "print y%s%syes%sok%s" % ((nl,) * 4)
+            handle, tmp = tempfile.mkstemp()
+            os.close(handle)
+            try:
+                with open(tmp, "w") as fp:
+                    fp.write(data)
+                rt.refactor_file(tmp)
+                with open(tmp, "r") as fp:
+                    contents = fp.read()
+            finally:
+                os.unlink(tmp)
+            for line in contents.splitlines(True):
+                self.assertTrue(line.endswith(nl))
+
     def test_file_encoding(self):
         fn = os.path.join(TEST_DATA_DIR, "different_encoding.py")
         self.check_file_refactoring(fn)