diff --git a/Lib/ctypes/test/test_functions.py b/Lib/ctypes/test/test_functions.py
index 9e5a6f8..0d0b56f 100644
--- a/Lib/ctypes/test/test_functions.py
+++ b/Lib/ctypes/test/test_functions.py
@@ -160,15 +160,17 @@
         result = f(1, 2, 3, 4, 5.0, 6.0, 21)
         self.failUnlessEqual(result, 42)
 
-    def test_stringresult(self):
-        f = dll._testfunc_p_p
-        f.argtypes = None
-        f.restype = c_char_p
-        result = f("123")
-        self.failUnlessEqual(result, "123")
+    from ctypes.test import is_resource_enabled
+    if is_resource_enabled("struni-crash"):
+        def test_stringresult(self):
+            f = dll._testfunc_p_p
+            f.argtypes = None
+            f.restype = c_char_p
+            result = f("123")
+            self.failUnlessEqual(result, "123")
 
-        result = f(None)
-        self.failUnlessEqual(result, None)
+            result = f(None)
+            self.failUnlessEqual(result, None)
 
     def test_pointers(self):
         f = dll._testfunc_p_p
diff --git a/Lib/ctypes/test/test_python_api.py b/Lib/ctypes/test/test_python_api.py
index 265ee55..f267413 100644
--- a/Lib/ctypes/test/test_python_api.py
+++ b/Lib/ctypes/test/test_python_api.py
@@ -41,17 +41,17 @@
         # This test is unreliable, because it is possible that code in
         # unittest changes the refcount of the '42' integer.  So, it
         # is disabled by default.
-        def test_PyInt_Long(self):
+        def test_PyLong_Long(self):
             ref42 = grc(42)
-            pythonapi.PyInt_FromLong.restype = py_object
-            self.failUnlessEqual(pythonapi.PyInt_FromLong(42), 42)
+            pythonapi.PyLong_FromLong.restype = py_object
+            self.failUnlessEqual(pythonapi.PyLong_FromLong(42), 42)
 
             self.failUnlessEqual(grc(42), ref42)
 
-            pythonapi.PyInt_AsLong.argtypes = (py_object,)
-            pythonapi.PyInt_AsLong.restype = c_long
+            pythonapi.PyLong_AsLong.argtypes = (py_object,)
+            pythonapi.PyLong_AsLong.restype = c_long
 
-            res = pythonapi.PyInt_AsLong(42)
+            res = pythonapi.PyLong_AsLong(42)
             self.failUnlessEqual(grc(res), ref42 + 1)
             del res
             self.failUnlessEqual(grc(42), ref42)
@@ -67,19 +67,21 @@
         del pyobj
         self.failUnlessEqual(grc(s), ref)
 
-    def test_PyOS_snprintf(self):
-        PyOS_snprintf = pythonapi.PyOS_snprintf
-        PyOS_snprintf.argtypes = POINTER(c_char), c_size_t, c_char_p
+    from ctypes.test import is_resource_enabled
+    if is_resource_enabled("struni-crash"):
+        def test_PyOS_snprintf(self):
+            PyOS_snprintf = pythonapi.PyOS_snprintf
+            PyOS_snprintf.argtypes = POINTER(c_char), c_size_t, c_char_p
 
-        buf = c_buffer(256)
-        PyOS_snprintf(buf, sizeof(buf), "Hello from %s", "ctypes")
-        self.failUnlessEqual(buf.value, "Hello from ctypes")
+            buf = c_buffer(256)
+            PyOS_snprintf(buf, sizeof(buf), "Hello from %s", "ctypes")
+            self.failUnlessEqual(buf.value, "Hello from ctypes")
 
-        PyOS_snprintf(buf, sizeof(buf), "Hello from %s", "ctypes", 1, 2, 3)
-        self.failUnlessEqual(buf.value, "Hello from ctypes")
+            PyOS_snprintf(buf, sizeof(buf), "Hello from %s (%d, %d, %d)", "ctypes", 1, 2, 3)
+            self.failUnlessEqual(buf.value, "Hello from ctypes")
 
-        # not enough arguments
-        self.failUnlessRaises(TypeError, PyOS_snprintf, buf)
+            # not enough arguments
+            self.failUnlessRaises(TypeError, PyOS_snprintf, buf)
 
     def test_pyobject_repr(self):
         self.failUnlessEqual(repr(py_object()), "py_object(<NULL>)")
diff --git a/Lib/ctypes/test/test_slicing.py b/Lib/ctypes/test/test_slicing.py
index 8e43a39..3db82c3 100644
--- a/Lib/ctypes/test/test_slicing.py
+++ b/Lib/ctypes/test/test_slicing.py
@@ -34,45 +34,47 @@
         # ValueError: Can only assign sequence of same size
         self.assertRaises(ValueError, setslice, a, 0, 5, range(32))
 
-    def test_char_ptr(self):
-        s = "abcdefghijklmnopqrstuvwxyz"
+    from ctypes.test import is_resource_enabled
+    if is_resource_enabled("struni-crash"):
+        def test_char_ptr(self):
+            s = "abcdefghijklmnopqrstuvwxyz"
 
-        dll = CDLL(_ctypes_test.__file__)
-        dll.my_strdup.restype = POINTER(c_char)
-        dll.my_free.restype = None
-        res = dll.my_strdup(s)
-        self.failUnlessEqual(res[:len(s)], s)
-
-        import operator
-        self.assertRaises(TypeError, operator.setslice,
-                          res, 0, 5, "abcde")
-        dll.my_free(res)
-
-        dll.my_strdup.restype = POINTER(c_byte)
-        res = dll.my_strdup(s)
-        self.failUnlessEqual(res[:len(s)], list(range(ord("a"), ord("z")+1)))
-        dll.my_free(res)
-
-    def test_char_ptr_with_free(self):
-        dll = CDLL(_ctypes_test.__file__)
-        s = "abcdefghijklmnopqrstuvwxyz"
-
-        class allocated_c_char_p(c_char_p):
-            pass
-
-        dll.my_free.restype = None
-        def errcheck(result, func, args):
-            retval = result.value
-            dll.my_free(result)
-            return retval
-
-        dll.my_strdup.restype = allocated_c_char_p
-        dll.my_strdup.errcheck = errcheck
-        try:
+            dll = CDLL(_ctypes_test.__file__)
+            dll.my_strdup.restype = POINTER(c_char)
+            dll.my_free.restype = None
             res = dll.my_strdup(s)
-            self.failUnlessEqual(res, s)
-        finally:
-            del dll.my_strdup.errcheck
+            self.failUnlessEqual(res[:len(s)], s)
+
+            import operator
+            self.assertRaises(TypeError, operator.setslice,
+                              res, 0, 5, "abcde")
+            dll.my_free(res)
+
+            dll.my_strdup.restype = POINTER(c_byte)
+            res = dll.my_strdup(s)
+            self.failUnlessEqual(res[:len(s)], list(range(ord("a"), ord("z")+1)))
+            dll.my_free(res)
+
+        def test_char_ptr_with_free(self):
+            dll = CDLL(_ctypes_test.__file__)
+            s = "abcdefghijklmnopqrstuvwxyz"
+
+            class allocated_c_char_p(c_char_p):
+                pass
+
+            dll.my_free.restype = None
+            def errcheck(result, func, args):
+                retval = result.value
+                dll.my_free(result)
+                return retval
+
+            dll.my_strdup.restype = allocated_c_char_p
+            dll.my_strdup.errcheck = errcheck
+            try:
+                res = dll.my_strdup(s)
+                self.failUnlessEqual(res, s)
+            finally:
+                del dll.my_strdup.errcheck
 
 
     def test_char_array(self):
