Backport bpo-30205 to 3.6 (#1403)

diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index f3654c9..42aec59 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -1212,9 +1212,9 @@
     {
         struct sockaddr_un *a = (struct sockaddr_un *) addr;
 #ifdef __linux__
-        if (a->sun_path[0] == 0) {  /* Linux abstract namespace */
-            addrlen -= offsetof(struct sockaddr_un, sun_path);
-            return PyBytes_FromStringAndSize(a->sun_path, addrlen);
+        size_t linuxaddrlen = addrlen - offsetof(struct sockaddr_un, sun_path);
+        if (linuxaddrlen > 0 && a->sun_path[0] == 0) {  /* Linux abstract namespace */
+            return PyBytes_FromStringAndSize(a->sun_path, linuxaddrlen);
         }
         else
 #endif /* linux */