1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-10-24 13:33:01 +03:00

xpointer: Remove support for XPointer locations

The latest spec for what it essentially an XPath extension seems to be
this working draft from 2002:

    https://www.w3.org/TR/xptr-xpointer/

The xpointer() scheme is listed as "being reviewed" in the XPointer
registry since at least 2006. libxml2 seems to be the only modern
software that tries to implement this spec, but the code has many bugs
and quality issues.

If you configure --with-legacy, old symbols are retained for ABI
compatibility.
This commit is contained in:
Nick Wellnhofer
2024-06-12 18:20:01 +02:00
parent dba1ed85a3
commit 669bd34993
55 changed files with 110 additions and 4498 deletions

488
testapi.c
View File

@@ -52072,40 +52072,6 @@ test_xpathInternals(void) {
return(test_ret);
}
static int
test_xmlXPtrBuildNodeList(void) {
int test_ret = 0;
#if defined(LIBXML_XPTR_ENABLED) && defined(LIBXML_XPTR_LOCS_ENABLED)
int mem_base;
xmlNodePtr ret_val;
xmlXPathObjectPtr obj; /* the XPointer result from the evaluation. */
int n_obj;
for (n_obj = 0;n_obj < gen_nb_xmlXPathObjectPtr;n_obj++) {
mem_base = xmlMemBlocks();
obj = gen_xmlXPathObjectPtr(n_obj, 0);
ret_val = xmlXPtrBuildNodeList(obj);
desret_xmlNodePtr(ret_val);
call_tests++;
des_xmlXPathObjectPtr(n_obj, obj, 0);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlXPtrBuildNodeList",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_obj);
printf("\n");
}
}
function_tests++;
#endif
return(test_ret);
}
static int
test_xmlXPtrEval(void) {
int test_ret = 0;
@@ -52147,72 +52113,6 @@ test_xmlXPtrEval(void) {
}
static int
test_xmlXPtrEvalRangePredicate(void) {
int test_ret = 0;
#if defined(LIBXML_XPTR_ENABLED) && defined(LIBXML_XPTR_LOCS_ENABLED)
int mem_base;
xmlXPathParserContextPtr ctxt; /* the XPointer Parser context */
int n_ctxt;
for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
mem_base = xmlMemBlocks();
ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
xmlXPtrEvalRangePredicate(ctxt);
call_tests++;
des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlXPtrEvalRangePredicate",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_ctxt);
printf("\n");
}
}
function_tests++;
#endif
return(test_ret);
}
static int
test_xmlXPtrNewCollapsedRange(void) {
int test_ret = 0;
#if defined(LIBXML_XPTR_ENABLED) && defined(LIBXML_XPTR_LOCS_ENABLED)
int mem_base;
xmlXPathObjectPtr ret_val;
xmlNodePtr start; /* the starting and ending node */
int n_start;
for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) {
mem_base = xmlMemBlocks();
start = gen_xmlNodePtr(n_start, 0);
ret_val = xmlXPtrNewCollapsedRange(start);
desret_xmlXPathObjectPtr(ret_val);
call_tests++;
des_xmlNodePtr(n_start, start, 0);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlXPtrNewCollapsedRange",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_start);
printf("\n");
}
}
function_tests++;
#endif
return(test_ret);
}
static int
test_xmlXPtrNewContext(void) {
int test_ret = 0;
@@ -52222,399 +52122,13 @@ test_xmlXPtrNewContext(void) {
return(test_ret);
}
static int
test_xmlXPtrNewLocationSetNodeSet(void) {
int test_ret = 0;
#if defined(LIBXML_XPTR_ENABLED) && defined(LIBXML_XPTR_LOCS_ENABLED)
int mem_base;
xmlXPathObjectPtr ret_val;
xmlNodeSetPtr set; /* a node set */
int n_set;
for (n_set = 0;n_set < gen_nb_xmlNodeSetPtr;n_set++) {
mem_base = xmlMemBlocks();
set = gen_xmlNodeSetPtr(n_set, 0);
ret_val = xmlXPtrNewLocationSetNodeSet(set);
desret_xmlXPathObjectPtr(ret_val);
call_tests++;
des_xmlNodeSetPtr(n_set, set, 0);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlXPtrNewLocationSetNodeSet",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_set);
printf("\n");
}
}
function_tests++;
#endif
return(test_ret);
}
static int
test_xmlXPtrNewLocationSetNodes(void) {
int test_ret = 0;
#if defined(LIBXML_XPTR_ENABLED) && defined(LIBXML_XPTR_LOCS_ENABLED)
int mem_base;
xmlXPathObjectPtr ret_val;
xmlNodePtr start; /* the start NodePtr value */
int n_start;
xmlNodePtr end; /* the end NodePtr value or NULL */
int n_end;
for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) {
for (n_end = 0;n_end < gen_nb_xmlNodePtr;n_end++) {
mem_base = xmlMemBlocks();
start = gen_xmlNodePtr(n_start, 0);
end = gen_xmlNodePtr(n_end, 1);
ret_val = xmlXPtrNewLocationSetNodes(start, end);
desret_xmlXPathObjectPtr(ret_val);
call_tests++;
des_xmlNodePtr(n_start, start, 0);
des_xmlNodePtr(n_end, end, 1);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlXPtrNewLocationSetNodes",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_start);
printf(" %d", n_end);
printf("\n");
}
}
}
function_tests++;
#endif
return(test_ret);
}
static int
test_xmlXPtrNewRange(void) {
int test_ret = 0;
#if defined(LIBXML_XPTR_ENABLED) && defined(LIBXML_XPTR_LOCS_ENABLED)
int mem_base;
xmlXPathObjectPtr ret_val;
xmlNodePtr start; /* the starting node */
int n_start;
int startindex; /* the start index */
int n_startindex;
xmlNodePtr end; /* the ending point */
int n_end;
int endindex; /* the ending index */
int n_endindex;
for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) {
for (n_startindex = 0;n_startindex < gen_nb_int;n_startindex++) {
for (n_end = 0;n_end < gen_nb_xmlNodePtr;n_end++) {
for (n_endindex = 0;n_endindex < gen_nb_int;n_endindex++) {
mem_base = xmlMemBlocks();
start = gen_xmlNodePtr(n_start, 0);
startindex = gen_int(n_startindex, 1);
end = gen_xmlNodePtr(n_end, 2);
endindex = gen_int(n_endindex, 3);
ret_val = xmlXPtrNewRange(start, startindex, end, endindex);
desret_xmlXPathObjectPtr(ret_val);
call_tests++;
des_xmlNodePtr(n_start, start, 0);
des_int(n_startindex, startindex, 1);
des_xmlNodePtr(n_end, end, 2);
des_int(n_endindex, endindex, 3);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlXPtrNewRange",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_start);
printf(" %d", n_startindex);
printf(" %d", n_end);
printf(" %d", n_endindex);
printf("\n");
}
}
}
}
}
function_tests++;
#endif
return(test_ret);
}
static int
test_xmlXPtrNewRangeNodeObject(void) {
int test_ret = 0;
#if defined(LIBXML_XPTR_ENABLED) && defined(LIBXML_XPTR_LOCS_ENABLED)
int mem_base;
xmlXPathObjectPtr ret_val;
xmlNodePtr start; /* the starting node */
int n_start;
xmlXPathObjectPtr end; /* the ending object */
int n_end;
for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) {
for (n_end = 0;n_end < gen_nb_xmlXPathObjectPtr;n_end++) {
mem_base = xmlMemBlocks();
start = gen_xmlNodePtr(n_start, 0);
end = gen_xmlXPathObjectPtr(n_end, 1);
ret_val = xmlXPtrNewRangeNodeObject(start, end);
desret_xmlXPathObjectPtr(ret_val);
call_tests++;
des_xmlNodePtr(n_start, start, 0);
des_xmlXPathObjectPtr(n_end, end, 1);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlXPtrNewRangeNodeObject",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_start);
printf(" %d", n_end);
printf("\n");
}
}
}
function_tests++;
#endif
return(test_ret);
}
static int
test_xmlXPtrNewRangeNodePoint(void) {
int test_ret = 0;
#if defined(LIBXML_XPTR_ENABLED) && defined(LIBXML_XPTR_LOCS_ENABLED)
int mem_base;
xmlXPathObjectPtr ret_val;
xmlNodePtr start; /* the starting node */
int n_start;
xmlXPathObjectPtr end; /* the ending point */
int n_end;
for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) {
for (n_end = 0;n_end < gen_nb_xmlXPathObjectPtr;n_end++) {
mem_base = xmlMemBlocks();
start = gen_xmlNodePtr(n_start, 0);
end = gen_xmlXPathObjectPtr(n_end, 1);
ret_val = xmlXPtrNewRangeNodePoint(start, end);
desret_xmlXPathObjectPtr(ret_val);
call_tests++;
des_xmlNodePtr(n_start, start, 0);
des_xmlXPathObjectPtr(n_end, end, 1);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlXPtrNewRangeNodePoint",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_start);
printf(" %d", n_end);
printf("\n");
}
}
}
function_tests++;
#endif
return(test_ret);
}
static int
test_xmlXPtrNewRangeNodes(void) {
int test_ret = 0;
#if defined(LIBXML_XPTR_ENABLED) && defined(LIBXML_XPTR_LOCS_ENABLED)
int mem_base;
xmlXPathObjectPtr ret_val;
xmlNodePtr start; /* the starting node */
int n_start;
xmlNodePtr end; /* the ending node */
int n_end;
for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) {
for (n_end = 0;n_end < gen_nb_xmlNodePtr;n_end++) {
mem_base = xmlMemBlocks();
start = gen_xmlNodePtr(n_start, 0);
end = gen_xmlNodePtr(n_end, 1);
ret_val = xmlXPtrNewRangeNodes(start, end);
desret_xmlXPathObjectPtr(ret_val);
call_tests++;
des_xmlNodePtr(n_start, start, 0);
des_xmlNodePtr(n_end, end, 1);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlXPtrNewRangeNodes",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_start);
printf(" %d", n_end);
printf("\n");
}
}
}
function_tests++;
#endif
return(test_ret);
}
static int
test_xmlXPtrNewRangePointNode(void) {
int test_ret = 0;
#if defined(LIBXML_XPTR_ENABLED) && defined(LIBXML_XPTR_LOCS_ENABLED)
int mem_base;
xmlXPathObjectPtr ret_val;
xmlXPathObjectPtr start; /* the starting point */
int n_start;
xmlNodePtr end; /* the ending node */
int n_end;
for (n_start = 0;n_start < gen_nb_xmlXPathObjectPtr;n_start++) {
for (n_end = 0;n_end < gen_nb_xmlNodePtr;n_end++) {
mem_base = xmlMemBlocks();
start = gen_xmlXPathObjectPtr(n_start, 0);
end = gen_xmlNodePtr(n_end, 1);
ret_val = xmlXPtrNewRangePointNode(start, end);
desret_xmlXPathObjectPtr(ret_val);
call_tests++;
des_xmlXPathObjectPtr(n_start, start, 0);
des_xmlNodePtr(n_end, end, 1);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlXPtrNewRangePointNode",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_start);
printf(" %d", n_end);
printf("\n");
}
}
}
function_tests++;
#endif
return(test_ret);
}
static int
test_xmlXPtrNewRangePoints(void) {
int test_ret = 0;
#if defined(LIBXML_XPTR_ENABLED) && defined(LIBXML_XPTR_LOCS_ENABLED)
int mem_base;
xmlXPathObjectPtr ret_val;
xmlXPathObjectPtr start; /* the starting point */
int n_start;
xmlXPathObjectPtr end; /* the ending point */
int n_end;
for (n_start = 0;n_start < gen_nb_xmlXPathObjectPtr;n_start++) {
for (n_end = 0;n_end < gen_nb_xmlXPathObjectPtr;n_end++) {
mem_base = xmlMemBlocks();
start = gen_xmlXPathObjectPtr(n_start, 0);
end = gen_xmlXPathObjectPtr(n_end, 1);
ret_val = xmlXPtrNewRangePoints(start, end);
desret_xmlXPathObjectPtr(ret_val);
call_tests++;
des_xmlXPathObjectPtr(n_start, start, 0);
des_xmlXPathObjectPtr(n_end, end, 1);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlXPtrNewRangePoints",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_start);
printf(" %d", n_end);
printf("\n");
}
}
}
function_tests++;
#endif
return(test_ret);
}
static int
test_xmlXPtrRangeToFunction(void) {
int test_ret = 0;
#if defined(LIBXML_XPTR_ENABLED) && defined(LIBXML_XPTR_LOCS_ENABLED)
int mem_base;
xmlXPathParserContextPtr ctxt; /* the XPointer Parser context */
int n_ctxt;
int nargs; /* the number of args */
int n_nargs;
for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
mem_base = xmlMemBlocks();
ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
nargs = gen_int(n_nargs, 1);
xmlXPtrRangeToFunction(ctxt, nargs);
call_tests++;
des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
des_int(n_nargs, nargs, 1);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlXPtrRangeToFunction",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_ctxt);
printf(" %d", n_nargs);
printf("\n");
}
}
}
function_tests++;
#endif
return(test_ret);
}
static int
test_xpointer(void) {
int test_ret = 0;
if (quiet == 0) printf("Testing xpointer : 13 of 21 functions ...\n");
test_ret += test_xmlXPtrBuildNodeList();
if (quiet == 0) printf("Testing xpointer : 1 of 2 functions ...\n");
test_ret += test_xmlXPtrEval();
test_ret += test_xmlXPtrEvalRangePredicate();
test_ret += test_xmlXPtrNewCollapsedRange();
test_ret += test_xmlXPtrNewContext();
test_ret += test_xmlXPtrNewLocationSetNodeSet();
test_ret += test_xmlXPtrNewLocationSetNodes();
test_ret += test_xmlXPtrNewRange();
test_ret += test_xmlXPtrNewRangeNodeObject();
test_ret += test_xmlXPtrNewRangeNodePoint();
test_ret += test_xmlXPtrNewRangeNodes();
test_ret += test_xmlXPtrNewRangePointNode();
test_ret += test_xmlXPtrNewRangePoints();
test_ret += test_xmlXPtrRangeToFunction();
if (test_ret != 0)
printf("Module xpointer: %d errors\n", test_ret);