Author: gstein
Date: Wed Jun 15 23:09:58 2011
New Revision: 1136243

URL: http://svn.apache.org/viewvc?rev=1136243&view=rev
Log:
Have inject_to_parser() avoid raising an error when IGNORE_ERRORS is set.
In particular, avoid a situation where the caller may attempt to use
svn_error_clear(ctx->error) (which would be Bad).

* subversion/libsvn_ra_serf/util.c:
  (inject_to_parser): avoid returning an error when IGNORE_ERRORS
  (svn_ra_serf__handle_xml_parser): simplify the inject_to_parser() call
    since we don't have to investigate IGNORE_ERRORS.

Modified:
    subversion/trunk/subversion/libsvn_ra_serf/util.c

Modified: subversion/trunk/subversion/libsvn_ra_serf/util.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_ra_serf/util.c?rev=1136243&r1=1136242&r2=1136243&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_ra_serf/util.c (original)
+++ subversion/trunk/subversion/libsvn_ra_serf/util.c Wed Jun 15 23:09:58 2011
@@ -1180,12 +1180,12 @@ inject_to_parser(svn_ra_serf__xml_parser
   int xml_status;
 
   xml_status = XML_Parse(ctx->xmlp, data, len, 0);
-  if (xml_status == XML_STATUS_ERROR)
+  if (xml_status == XML_STATUS_ERROR && !ctx->ignore_errors)
     return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
                              _("XML parsing failed: (%d %s)"),
                              sl->code, sl->reason);
 
-  if (ctx->error)
+  if (ctx->error && !ctx->ignore_errors)
     return svn_error_return(ctx->error);
 
   return SVN_NO_ERROR;
@@ -1262,14 +1262,12 @@ svn_ra_serf__handle_xml_parser(serf_requ
       err = inject_to_parser(ctx, data, len, &sl);
       if (err)
         {
-          if (!ctx->ignore_errors)
-            {
-              XML_ParserFree(ctx->xmlp);
-              add_done_item(ctx);
-              return svn_error_return(err);
-            }
+          /* Should have no errors if IGNORE_ERRORS is set.  */
+          SVN_ERR_ASSERT(!ctx->ignore_errors);
 
-          svn_error_clear(err);
+          XML_ParserFree(ctx->xmlp);
+          add_done_item(ctx);
+          return svn_error_return(err);
         }
 
       if (APR_STATUS_IS_EAGAIN(status))


Reply via email to