Package: libxml2-utils

I've done some follow-up debugging (on upstream git) to be sure the problem seems to exist upstream - unless I'm severely misunderstanding what --output is supposed to do. Anyhow; the trace shows it reaches doXPathDump(). Note that 'buf' is hard-coded to use stdout. The call to xmlOutputBufferClose(buf) causes the output to be sent. In gdb I confirm 'output' is set immediately after that:

$ gdb -directory /srv/NAS/Sunny/SourceCode/libxml2/libxml2 -args /srv/NAS/Sunny/SourceCode/libxml2/libxml2/.libs/xmllint --output test.txt --html --xpath '//div[contains(@class, '\''test'\'')]/div/ul/li/a/@href' xmllint-test.html

2038                break;
(gdb) p output
$1 = 0x7fffffffe1d5 "test.txt"

xmllint.c:

static void doXPathDump(xmlXPathObjectPtr cur) {
    switch(cur->type) {
        case XPATH_NODESET: {
            int i;
            xmlNodePtr node;
#ifdef LIBXML_OUTPUT_ENABLED
            xmlOutputBufferPtr buf;

if ((cur->nodesetval == NULL) || (cur->nodesetval->nodeNr <= 0)) {
                if (!quiet) {
                    fprintf(stderr, "XPath set is empty\n");
                }
                break;
            }
            buf = xmlOutputBufferCreateFile(stdout, NULL);
            if (buf == NULL) {
                fprintf(stderr, "Out of memory for XPath\n");
                progresult = XMLLINT_ERR_MEM;
                return;
            }
            for (i = 0;i < cur->nodesetval->nodeNr;i++) {
                node = cur->nodesetval->nodeTab[i];
                xmlNodeDumpOutput(buf, NULL, node, 0, 0, NULL);
                xmlOutputBufferWrite(buf, 1, "\n");
            }
            xmlOutputBufferClose(buf);

Reply via email to