mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-03-31 06:50:06 +03:00
xpath: Fix popping of values in xmlXPathPopNodeset
After 6a12be77, valuePop can fail even if ctxt->value is non-NULL. If it turns out that too much code relies on this assumption, a better fix is needed.
This commit is contained in:
parent
359313c1a7
commit
47b0e0a620
13
xpath.c
13
xpath.c
@ -3049,16 +3049,15 @@ xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt) {
|
||||
xmlXPathObjectPtr obj;
|
||||
xmlNodeSetPtr ret;
|
||||
|
||||
if (ctxt == NULL) return(NULL);
|
||||
if (ctxt->value == NULL) {
|
||||
obj = valuePop(ctxt);
|
||||
if (obj == NULL) {
|
||||
xmlXPathSetError(ctxt, XPATH_INVALID_OPERAND);
|
||||
return(NULL);
|
||||
}
|
||||
if (!xmlXPathStackIsNodeSet(ctxt)) {
|
||||
if (obj->type != XPATH_NODESET) {
|
||||
xmlXPathSetTypeError(ctxt);
|
||||
return(NULL);
|
||||
}
|
||||
obj = valuePop(ctxt);
|
||||
ret = obj->nodesetval;
|
||||
#if 0
|
||||
/* to fix memory leak of not clearing obj->user */
|
||||
@ -3084,15 +3083,15 @@ xmlXPathPopExternal (xmlXPathParserContextPtr ctxt) {
|
||||
xmlXPathObjectPtr obj;
|
||||
void * ret;
|
||||
|
||||
if ((ctxt == NULL) || (ctxt->value == NULL)) {
|
||||
obj = valuePop(ctxt);
|
||||
if (obj == NULL) {
|
||||
xmlXPathSetError(ctxt, XPATH_INVALID_OPERAND);
|
||||
return(NULL);
|
||||
}
|
||||
if (ctxt->value->type != XPATH_USERS) {
|
||||
if (obj->type != XPATH_USERS) {
|
||||
xmlXPathSetTypeError(ctxt);
|
||||
return(NULL);
|
||||
}
|
||||
obj = valuePop(ctxt);
|
||||
ret = obj->user;
|
||||
obj->user = NULL;
|
||||
xmlXPathReleaseObject(ctxt->context, obj);
|
||||
|
Loading…
x
Reference in New Issue
Block a user