From 491bbedc209fea314a04cb3015da68fb0aa63238 Mon Sep 17 00:00:00 2001
From: lekma <lekmalek@gmail.com>
Date: Wed, 2 May 2018 11:29:10 +0200
Subject: [PATCH] bpo-33391: Fix refleak in set_symmetric_difference (GH-6670)

---
 .../2018-05-02-08-36-03.bpo-33391.z4a7rb.rst                  | 1 +
 Objects/setobject.c                                           | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)
 create mode 100644 Misc/NEWS.d/next/Core and Builtins/2018-05-02-08-36-03.bpo-33391.z4a7rb.rst

diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-05-02-08-36-03.bpo-33391.z4a7rb.rst b/Misc/NEWS.d/next/Core and Builtins/2018-05-02-08-36-03.bpo-33391.z4a7rb.rst
new file mode 100644
index 0000000000..ab17aa408c
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-05-02-08-36-03.bpo-33391.z4a7rb.rst	
@@ -0,0 +1 @@
+Fix a leak in set_symmetric_difference().
diff --git a/Objects/setobject.c b/Objects/setobject.c
index 80101dda9b..82b5838208 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -1744,8 +1744,10 @@ set_symmetric_difference(PySetObject *so, PyObject *other)
     if (otherset == NULL)
         return NULL;
     rv = set_symmetric_difference_update(otherset, (PyObject *)so);
-    if (rv == NULL)
+    if (rv == NULL) {
+        Py_DECREF(otherset);
         return NULL;
+    }
     Py_DECREF(rv);
     return (PyObject *)otherset;
 }
-- 
2.40.0