You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by sv...@apache.org on 2013/10/22 06:02:15 UTC
svn commit: r1534479 - in /subversion/branches/1.8.x: ./ STATUS
subversion/libsvn_ra_serf/util.c
Author: svn-role
Date: Tue Oct 22 04:02:15 2013
New Revision: 1534479
URL: http://svn.apache.org/r1534479
Log:
Merge the r1501199 group from trunk:
* r1501199, r1501207, r1502777
Verify the result of the xml parser in ra serf, instead of assuming the
parsing always succeeds.
Justification:
While in general we can just rely on the parsed result being incomplete,
this makes many network (and server implementation) problems easier to
diagnose.
Votes:
+1: rhuijben, stefan2, ivan
Modified:
subversion/branches/1.8.x/ (props changed)
subversion/branches/1.8.x/STATUS
subversion/branches/1.8.x/subversion/libsvn_ra_serf/util.c
Propchange: subversion/branches/1.8.x/
------------------------------------------------------------------------------
Merged /subversion/trunk:r1501199,1501207,1502777
Modified: subversion/branches/1.8.x/STATUS
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x/STATUS?rev=1534479&r1=1534478&r2=1534479&view=diff
==============================================================================
--- subversion/branches/1.8.x/STATUS (original)
+++ subversion/branches/1.8.x/STATUS Tue Oct 22 04:02:15 2013
@@ -118,16 +118,6 @@ Veto-blocked changes:
Approved changes:
=================
- * r1501199, r1501207, r1502777
- Verify the result of the xml parser in ra serf, instead of assuming the
- parsing always succeeds.
- Justification:
- While in general we can just rely on the parsed result being incomplete,
- this makes many network (and server implementation) problems easier to
- diagnose.
- Votes:
- +1: rhuijben, stefan2, ivan
-
* r1532023
Resolve possible segfault in the win32 crash handler.
Justification:
Modified: subversion/branches/1.8.x/subversion/libsvn_ra_serf/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/1.8.x/subversion/libsvn_ra_serf/util.c?rev=1534479&r1=1534478&r2=1534479&view=diff
==============================================================================
--- subversion/branches/1.8.x/subversion/libsvn_ra_serf/util.c (original)
+++ subversion/branches/1.8.x/subversion/libsvn_ra_serf/util.c Tue Oct 22 04:02:15 2013
@@ -1487,19 +1487,22 @@ inject_to_parser(svn_ra_serf__xml_parser
int xml_status;
xml_status = XML_Parse(ctx->xmlp, data, (int) len, 0);
- if (xml_status == XML_STATUS_ERROR && !ctx->ignore_errors)
+
+ if (! ctx->ignore_errors)
{
- if (sl == NULL)
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("XML parsing failed"));
+ SVN_ERR(ctx->error);
- return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
- _("XML parsing failed: (%d %s)"),
- sl->code, sl->reason);
- }
+ if (xml_status != XML_STATUS_OK)
+ {
+ if (sl == NULL)
+ return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("XML parsing failed"));
- if (ctx->error && !ctx->ignore_errors)
- return svn_error_trace(ctx->error);
+ return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("XML parsing failed: (%d %s)"),
+ sl->code, sl->reason);
+ }
+ }
return SVN_NO_ERROR;
}
@@ -1580,14 +1583,26 @@ svn_ra_serf__process_pending(svn_ra_serf
if (pending_empty &&
parser->pending->network_eof)
{
+ int xml_status;
SVN_ERR_ASSERT(parser->xmlp != NULL);
- /* Tell the parser that no more content will be parsed. Ignore the
- return status. We just don't care. */
- (void) XML_Parse(parser->xmlp, NULL, 0, 1);
+ /* Tell the parser that no more content will be parsed. */
+ xml_status = XML_Parse(parser->xmlp, NULL, 0, 1);
apr_pool_cleanup_run(parser->pool, &parser->xmlp, xml_parser_cleanup);
parser->xmlp = NULL;
+
+ if (! parser->ignore_errors)
+ {
+ SVN_ERR(parser->error);
+
+ if (xml_status != XML_STATUS_OK)
+ {
+ return svn_error_createf(SVN_ERR_RA_DAV_MALFORMED_DATA, NULL,
+ _("XML parsing failed"));
+ }
+ }
+
add_done_item(parser);
}
@@ -1756,12 +1771,25 @@ svn_ra_serf__handle_xml_parser(serf_requ
in the PENDING structures, then we're completely done. */
if (!HAS_PENDING_DATA(ctx->pending))
{
+ int xml_status;
SVN_ERR_ASSERT(ctx->xmlp != NULL);
- /* Ignore the return status. We just don't care. */
- (void) XML_Parse(ctx->xmlp, NULL, 0, 1);
+ xml_status = XML_Parse(ctx->xmlp, NULL, 0, 1);
apr_pool_cleanup_run(ctx->pool, &ctx->xmlp, xml_parser_cleanup);
+
+ if (! ctx->ignore_errors)
+ {
+ SVN_ERR(ctx->error);
+
+ if (xml_status != XML_STATUS_OK)
+ {
+ return svn_error_create(
+ SVN_ERR_XML_MALFORMED, NULL,
+ _("The XML response contains invalid XML"));
+ }
+ }
+
add_done_item(ctx);
}