Author: phunt
Date: Thu Nov 19 22:14:16 2009
New Revision: 882328

URL: http://svn.apache.org/viewvc?rev=882328&view=rev
Log:
ZOOKEEPER-554. zkpython can segfault when statting a deleted node

Modified:
    hadoop/zookeeper/branches/branch-3.2/CHANGES.txt
    hadoop/zookeeper/branches/branch-3.2/src/contrib/zkpython/src/c/zookeeper.c
    
hadoop/zookeeper/branches/branch-3.2/src/contrib/zkpython/src/test/get_set_test.py
    
hadoop/zookeeper/branches/branch-3.2/src/contrib/zkpython/src/test/zktestbase.py

Modified: hadoop/zookeeper/branches/branch-3.2/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.2/CHANGES.txt?rev=882328&r1=882327&r2=882328&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.2/CHANGES.txt (original)
+++ hadoop/zookeeper/branches/branch-3.2/CHANGES.txt Thu Nov 19 22:14:16 2009
@@ -18,6 +18,9 @@
 
   ZOOKEEPER-541. zkpython limited to 256 handles (henry robinson via phunt)
 
+  ZOOKEEPER-554. zkpython can segfault when statting a deleted node
+  (henry robinson via phunt)
+
   ZOOKEEPER-562. c client can flood server with pings if tcp send queue
   filled. (ben reed via mahadev)
 

Modified: 
hadoop/zookeeper/branches/branch-3.2/src/contrib/zkpython/src/c/zookeeper.c
URL: 
http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.2/src/contrib/zkpython/src/c/zookeeper.c?rev=882328&r1=882327&r2=882328&view=diff
==============================================================================
--- hadoop/zookeeper/branches/branch-3.2/src/contrib/zkpython/src/c/zookeeper.c 
(original)
+++ hadoop/zookeeper/branches/branch-3.2/src/contrib/zkpython/src/c/zookeeper.c 
Thu Nov 19 22:14:16 2009
@@ -203,6 +203,9 @@
 
 PyObject *build_stat( const struct Stat *stat )
 {
+       if (stat == NULL) { 
+               return Py_None;
+       }
   return Py_BuildValue( "{s:K, s:K, s:K, s:K,"
                        "s:i, s:i, s:i, s:K,"
                        "s:i, s:i, s:K}",

Modified: 
hadoop/zookeeper/branches/branch-3.2/src/contrib/zkpython/src/test/get_set_test.py
URL: 
http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.2/src/contrib/zkpython/src/test/get_set_test.py?rev=882328&r1=882327&r2=882328&view=diff
==============================================================================
--- 
hadoop/zookeeper/branches/branch-3.2/src/contrib/zkpython/src/test/get_set_test.py
 (original)
+++ 
hadoop/zookeeper/branches/branch-3.2/src/contrib/zkpython/src/test/get_set_test.py
 Thu Nov 19 22:14:16 2009
@@ -44,6 +44,33 @@
                           "test",
                           stat["version"]+1)
 
+    def test_stat_deleted_node(self):
+        """
+        Test for a bug that surfaced when trying to build a
+        stat object from a non-existant node.
+
+        """
+        self.ensureDeleted("/zk-python-test-deleteme")
+        self.assertRaises(zookeeper.NoNodeException,
+                          zookeeper.get,
+                          self.handle,
+                          "/zk-python-test-deleteme")
+        self.cv = threading.Condition()
+        def callback(handle, rc, value, stat):
+            self.cv.acquire()
+            self.stat = stat
+            self.rc = rc
+            self.value = value
+            self.callback_flag = True
+            self.cv.notify()
+            self.cv.release()
+        self.cv.acquire()
+        zookeeper.aget(self.handle, "/zk-python-test-deleteme", None, callback)
+        self.cv.wait(15)
+        self.assertEqual(self.callback_flag, True, "aget timed out!")
+        self.assertEqual(self.stat, None, "Stat should be none!")
+        self.assertEqual(self.value, None, "Value should be none!")
+
     def test_async_getset(self):
         self.cv = threading.Condition()
         def get_callback(handle, rc, value, stat):

Modified: 
hadoop/zookeeper/branches/branch-3.2/src/contrib/zkpython/src/test/zktestbase.py
URL: 
http://svn.apache.org/viewvc/hadoop/zookeeper/branches/branch-3.2/src/contrib/zkpython/src/test/zktestbase.py?rev=882328&r1=882327&r2=882328&view=diff
==============================================================================
--- 
hadoop/zookeeper/branches/branch-3.2/src/contrib/zkpython/src/test/zktestbase.py
 (original)
+++ 
hadoop/zookeeper/branches/branch-3.2/src/contrib/zkpython/src/test/zktestbase.py
 Thu Nov 19 22:14:16 2009
@@ -72,7 +72,7 @@
         return handle
 
     def ensureDeleted(self,path):
-        self.assertEqual(zookeeper.STATE_CONNECTED, 
zookeeper.state(self.handle), "Not connected!")
+        self.assertEqual(zookeeper.CONNECTED_STATE, 
zookeeper.state(self.handle), "Not connected!")
         try:
             self.assertEqual(zookeeper.OK, zookeeper.delete(self.handle, path))
         except zookeeper.NoNodeException:


Reply via email to