Skip to content
GitLab
  • Menu
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • pike pike
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 121
    • Issues 121
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • pikelang
  • pikepike
  • Issues
  • #4576
Closed
Open
Created Sep 11, 2008 by Peter Bortas@zinoOwner

Parser.XML.Validating bails out with error for invalid content within nameless context

Imported from http://bugzilla.roxen.com/bugzilla/show_bug.cgi?id=4576

Reported by Erik Forsberg, Opera Software forsberg@opera.com

Running this example script:

--begin example--
#!/usr/bin/env pike

class MyValidatingParser {
  inherit Parser.XML.Validating;
  string get_external_entity(string sysid, string|void pubid,
                             int|void unparsed, mixed ... extra)
  {
    Standards.URI uri = Standards.URI(sysid);
    if(uri->scheme == "http") {
      Protocols.HTTP.Query q = Protocols.HTTP.get_url(uri);
      if(q->status == 200)
        return q->data();
    }
    return 0;
  }
}

int main(int argc, array(string) argv)
{
    string example = #"
<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\"
        \"http://www.wapforum.org/DTD/wml_1.1.xml\">
<wml>
<card id=\"menu\" title=\"title\">
not allowed here
</card>
</wml>";

    int num_errors=0;
    MyValidatingParser p = MyValidatingParser();

    p->parse(example,
             lambda(string kind, string name, mapping attributes,
                    array|string contents,mapping(string:mixed) info) {
                 if(kind=="error") {
                     werror("Error: %s, character position: %d\n",
                            contents, info->location);
                     num_errors++;
                 }
             });
    if(!num_errors) write("Validated ok.\n");
    return num_errors;
}
--end example--

I get the following traceback:

--begin traceback--
sprintf: Wrong type for argument 2: expected string, got int.
/usr/local/pike/7.7.85/lib/modules/Parser.pmod/XML.pmod/
Validating.pike:262:
    /main()->MyValidatingParser()->__lambda_65649_2_line_261("Invalid
content
    for element
%s.",0)
/usr/local/pike/7.7.85/lib/modules/Parser.pmod/XML.pmod/
Validating.pike:391:
    /main()->MyValidatingParser()->validate
("",0,0,"\n"
    "not allowed here\n",mapping[1],/main()->__lambda_65637_0_line_33,
({}))
export/spare/pike/data/pikefarm/out_work/7.7/Pike/7.7/src/modules/Parser/
xml.cmod:943:
    /main()->MyValidatingParser()->Context()->parse_xml
()
validate_xml.pike:3:
    /main()->MyValidatingParser()->parse(/main()->MyValidatingParser()-
>Contex
    t
())
/usr/local/pike/7.7.85/lib/modules/Parser.pmod/XML.pmod/
Validating.pike:444:
    /main()->MyValidatingParser()->parse
("\n"
    "<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN
\"\n"
    "        \"http://www.wapforum.org/DTD/wml_1.1.xml\">
\n"
    "<wml>
\n"
    "<card id=\"menu\" title=\"title\">
\n"
    "not allowed here
\n"
    "</"+[13],@0)
validate_xml.pike:40:
    /main()->main(1,({"/home/forsberg/dev/validate_xml.pike"}))
--end traceback--
Assignee
Assign to
Time tracking