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(©from_url,
©from_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;
}