Several fixes reported by jim F.
diff --git a/Objects/abstract.c b/Objects/abstract.c
index cac767f..e668b08 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -671,7 +671,7 @@
 
   if(i < 0)
     {
-      if(0 > (l=m->sq_length(s))) return NULL;
+      if(! m->sq_length || 0 > (l=m->sq_length(s))) return NULL;
       i += l;
     }
       
@@ -689,13 +689,17 @@
 
   if(! s) return Py_ReturnNullError();
 
-  if(! ((m=s->ob_type->tp_as_sequence) && m->sq_length && m->sq_slice))
+  if(! ((m=s->ob_type->tp_as_sequence) && m->sq_slice))
     return Py_ReturnMethodError("__getslice__");  
 
-  if(0 > (l=m->sq_length(s))) return NULL;
+  if(i1 < 0 || i2 < 0)
+    {
 
-  if(i1 < 0) i1 += l;
-  if(i2 < 0) i2 += l;
+      if(! m->sq_length || 0 > (l=m->sq_length(s))) return NULL;
+
+      if(i1 < 0) i1 += l;
+      if(i2 < 0) i2 += l;
+    }
       
   return m->sq_slice(s,i1,i2);
 }
@@ -802,16 +806,8 @@
 
   for(i=0; i < l; i++)
     {
-      if((item=PySequence_GetItem(s,i)))
-	{
-	  if(PyTuple_SetItem(t,i,item) == -1)
-	    {
-	      Py_DECREF(item);
-	      Py_DECREF(t);
-	      return NULL;
-	    }
-	}
-      else
+      if(((item=PySequence_GetItem(s,i))) ||
+	 PyTuple_SetItem(t,i,item) == -1)
 	{
 	  Py_DECREF(t);
 	  return NULL;
@@ -826,25 +822,20 @@
 {
   int l, i;
   PyObject *t, *item;
+
   if(! s) return Py_ReturnNullError();
+
   Py_TRY((l=PySequence_Length(s)) != -1);
   Py_TRY(t=PyList_New(l));
+
   for(i=0; i < l; i++)
     {
-      if((item=PySequence_GetItem(s,i)))
-      {
-        if(PyList_SetItem(t,i,item) == -1)
-          {
-            Py_DECREF(item);
-            Py_DECREF(t);
-            return NULL;
-          }
-      }
-      else
-      {
-        Py_DECREF(t);
-        return NULL;
-      }
+      if((item=PySequence_GetItem(s,i)) ||
+	 PyList_SetItem(t,i,item) == -1)
+	{
+	  Py_DECREF(t);
+	  return NULL;
+	}
     }
   return t;
 }
@@ -946,7 +937,10 @@
   PyObject *v;
 
   v=PyMapping_GetItemString(o,key);
-  if(v) return 1;
+  if(v) {
+    Py_DECREF(v);
+    return 1;
+  }
   PyErr_Clear();
   return 0;
 }
@@ -959,7 +953,10 @@
   PyObject *v;
 
   v=PyObject_GetItem(o,key);
-  if(v) return 1;
+  if(v) {
+    Py_DECREF(v);
+    return 1;
+  }
   PyErr_Clear();
   return 0;
 }