You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2010/06/24 17:51:01 UTC

svn commit: r957586 - in /subversion/trunk/subversion: bindings/javahl/native/CreateJ.cpp include/private/svn_wc_private.h libsvn_wc/node.c

Author: rhuijben
Date: Thu Jun 24 15:51:00 2010
New Revision: 957586

URL: http://svn.apache.org/viewvc?rev=957586&view=rev
Log:
Following up on r957569, fix segfaults in javahl.

* subversion/bindings/javahl/native/CreateJ.cpp
  (CreateJ::Status): Don't use uninitialized entry.

* subversion/include/private/svn_wc_private.h
  (svn_wc__node_get_info_bits): Make output arguments optional.

* subversion/libsvn_wc/node.c
  (svn_wc__node_get_info_bits): Make output arguments optional.

Modified:
    subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp
    subversion/trunk/subversion/include/private/svn_wc_private.h
    subversion/trunk/subversion/libsvn_wc/node.c

Modified: subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp?rev=957586&r1=957585&r2=957586&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/CreateJ.cpp Thu Jun 24 15:51:00 2010
@@ -542,13 +542,12 @@ CreateJ::Status(svn_wc_context_t *wc_ctx
             POP_AND_RETURN_NULL;
         }
 
-      const svn_wc_entry_t *entry = NULL;
-
       if (status->versioned)
         {
           const char *conflict_new, *conflict_old, *conflict_wrk;
           const char *copyfrom_url;
           svn_revnum_t copyfrom_rev;
+          svn_boolean_t is_copy_target;
 
           /* This call returns SVN_ERR_ENTRY_NOT_FOUND for some hidden
              cases, which we can just ignore here as hidden nodes
@@ -584,15 +583,17 @@ CreateJ::Status(svn_wc_context_t *wc_ctx
 
           SVN_JNI_ERR(svn_wc__node_get_copyfrom_info(&copyfrom_url,
                                                      &copyfrom_rev,
-                                                     NULL,
+                                                     &is_copy_target,
                                                      wc_ctx, local_abspath,
                                                      pool, pool), NULL);
 
-          jURLCopiedFrom = JNIUtil::makeJString(entry->copyfrom_url);
+          jURLCopiedFrom = JNIUtil::makeJString(is_copy_target ? copyfrom_url
+                                                               : NULL);
           if (JNIUtil::isJavaExceptionThrown())
             POP_AND_RETURN_NULL;
 
-          jRevisionCopiedFrom = entry->copyfrom_rev;
+          jRevisionCopiedFrom = is_copy_target ? copyfrom_rev
+                                               : SVN_INVALID_REVNUM;
         }
     }
 

Modified: subversion/trunk/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_wc_private.h?rev=957586&r1=957585&r2=957586&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_wc_private.h (original)
+++ subversion/trunk/subversion/include/private/svn_wc_private.h Thu Jun 24 15:51:00 2010
@@ -607,7 +607,8 @@ svn_wc__node_check_conflicts(svn_boolean
 /**
  * A hack to remove the last entry from libsvn_client.  This simply fetches an
  * entry, and puts the needed bits into the output parameters, allocated in
- * @a result_pool.
+ * @a result_pool. All output arguments can be NULL to indicate that the
+ * caller is not interested in the specific result.
  *
  * @a local_abspath and @a wc_ctx are what you think they are.
  */

Modified: subversion/trunk/subversion/libsvn_wc/node.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_wc/node.c?rev=957586&r1=957585&r2=957586&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_wc/node.c (original)
+++ subversion/trunk/subversion/libsvn_wc/node.c Thu Jun 24 15:51:00 2010
@@ -1154,12 +1154,23 @@ svn_wc__node_get_info_bits(svn_wc_schedu
                                       svn_node_unknown, TRUE, FALSE,
                                       result_pool, scratch_pool));
 
-  *schedule = entry->schedule;
-  *text_time = entry->text_time;
-  *conflict_old = entry->conflict_old;
-  *conflict_new = entry->conflict_new;
-  *conflict_wrk = entry->conflict_wrk;
-  *prejfile = entry->prejfile;
+  if (schedule)
+    *schedule = entry->schedule;
+
+  if (text_time)
+    *text_time = entry->text_time;
+
+  if (conflict_old)
+    *conflict_old = entry->conflict_old;
+
+  if (conflict_new)
+    *conflict_new = entry->conflict_new;
+
+  if (conflict_wrk)
+    *conflict_wrk = entry->conflict_wrk;
+
+  if (prejfile)
+    *prejfile = entry->prejfile;
 
   return SVN_NO_ERROR;
 }