-rw-r--r-- | lib/discovery.cc | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/lib/discovery.cc b/lib/discovery.cc index 81727c0..8729cfb 100644 --- a/lib/discovery.cc +++ b/lib/discovery.cc @@ -4,8 +4,9 @@ #include <opkele/uris.h> #include <opkele/discovery.h> #include <opkele/exception.h> #include <opkele/util.h> +#include <opkele/debug.h> #include "config.h" #define XRDS_HEADER "X-XRDS-Location" @@ -174,9 +175,13 @@ namespace opkele { size_t write(void *p,size_t s,size_t nm) { if(skipping<0) return 0; /* TODO: limit total size */ size_t bytes = s*nm; - parse((const char *)p,bytes,false); + bool rp = parse((const char *)p,bytes,false); + if(!rp) { + skipping = -1; + bytes = 0; + } return bytes; } size_t header(void *p,size_t s,size_t nm) { size_t bytes = s*nm; @@ -224,9 +229,9 @@ namespace opkele { pt_stack.push_back(n); }else if(xmode&xmode_html) { html_start_element(n,a); }else{ - skipping = -1; + skipping = -1; stop_parser(); } }else{ int pt_s = pt_stack.size(); if(pt_s==1) { @@ -309,16 +314,17 @@ namespace opkele { assert(xrd); if(is_qelement(pt_stack.back().c_str(),n)) { assert(cdata==&status_string); pt_stack.pop_back(); - if(status_code!=100) - skipping = -1; + if(status_code!=100) { + skipping = -1; stop_parser(); + } } }else if(is_qelement(n,NSURI_XRD "\tExpires")) { assert(xrd); xrd->expires = util::w3c_to_time(cdata_buf); }else if((xmode&xmode_html) && is_element(n,"head")) { - skipping = -1; + skipping = -1; stop_parser(); } cdata = 0; } void character_data(const XML_Char *s,int l) { @@ -373,9 +379,9 @@ namespace opkele { else if(rel=="openid2.local_id") html_openid2.local_ids.add(-1,href); } }else if(is_element(n,"body")) { - skipping = -1; + skipping = -1; stop_parser(); } } }; |