Index: subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c
===================================================================
--- subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c	(revision 21476)
+++ subversion/bindings/swig/perl/libsvn_swig_perl/swigutil_pl.c	(working copy)
@@ -291,6 +291,7 @@
    * S: swigtype
    * r: svn_revnum_t
    * b: svn_boolean_t
+   * t: svn_string_t
    * z: apr_size_t
    
    Please do not add C types here.  Add a new format code if needed.
@@ -323,6 +324,7 @@
 	void *o;
 	SV *obj;
 	swig_type_info *t;
+	svn_string_t *str;
 
 	switch (*fp++) {
 	case 'O':
@@ -357,6 +359,12 @@
 	case 'b': /* svn_boolean_t */
 	    XPUSHs(sv_2mortal(newSViv(va_arg(ap, svn_boolean_t))));
 	    break;
+
+	case 't': /* svn_string_t */
+	    str = va_arg(ap, svn_string_t *);
+	    XPUSHs(str ? sv_2mortal(newSVpv(str->data, str->len))
+		       : &PL_sv_undef);
+	    break;
 	    
 	case 'L': /* apr_int64_t */
 	    /* Pass into perl as a string because some implementations may
@@ -554,9 +562,8 @@
 
     SVN_ERR(svn_swig_pl_callback_thunk(CALL_METHOD,
                                        (void *)"change_dir_prop", NULL,
-                                       "OOssS", ib->editor, ib->baton, name,
-                                       value ? value->data : NULL,
-                                       pool, POOLINFO));
+                                       "OOstS", ib->editor, ib->baton, name,
+                                       value, pool, POOLINFO));
 
     return SVN_NO_ERROR;
 }
@@ -692,9 +699,8 @@
 
     SVN_ERR(svn_swig_pl_callback_thunk(CALL_METHOD,
                                        (void *)"change_file_prop", NULL,
-                                       "OOssS", ib->editor, ib->baton, name,
-                                       value ? value->data : NULL,
-                                       pool, POOLINFO));
+                                       "OOstS", ib->editor, ib->baton, name,
+                                       value, pool, POOLINFO));
   
     return SVN_NO_ERROR;
 }
@@ -874,6 +880,8 @@
                                apr_pool_t *pool)
 {
     SV *result;
+    char *data;
+    STRLEN len;
 
     svn_swig_pl_callback_thunk(CALL_METHOD, (void *)"get_wc_prop",
                                &result, "OssS", baton, relpath, name,
@@ -884,7 +892,8 @@
 	*value = NULL;
     }
     else if (SvPOK(result)) {
-      *value = svn_string_create(SvPV_nolen(result), pool);
+	data = SvPV(result, len);
+	*value = svn_string_ncreate(data, len, pool);
     }
     else {
 	SvREFCNT_dec(result);


