| This patch fixes security problems described in issue 5533654. Since the original fixes in libxml2 includes multiple amendments and are somewhat larger in scope, we limit the fix to just this particular issue to play it safe. |
| The patch does what Chrome does to fix it. |
| |
| Eventually, when we upgrade libxml2 library, the patch will be unnecessary. |
| |
| |
| --- a/xpath.c 2011-10-31 14:31:20.201049035 -0700 |
| +++ b/xpath.c 2011-11-01 13:50:00.751736494 -0700 |
| @@ -11736,11 +11736,16 @@ |
| |
| if ((ctxt->error != XPATH_EXPRESSION_OK) || (res == -1)) { |
| xmlXPathObjectPtr tmp; |
| - /* pop the result */ |
| - tmp = valuePop(ctxt); |
| - xmlXPathReleaseObject(xpctxt, tmp); |
| - /* then pop off contextObj, which will be freed later */ |
| - valuePop(ctxt); |
| + /* pop the result if any */ |
| + tmp = valuePop(ctxt); |
| + while (tmp != contextObj) { |
| + /* |
| + * Free up the result |
| + * then pop off contextObj, which will be freed later |
| + */ |
| + xmlXPathReleaseObject(xpctxt, tmp); |
| + tmp = valuePop(ctxt); |
| + } |
| goto evaluation_error; |
| } |
| |