summaryrefslogtreecommitdiffabout
path: root/lib
Unidiff
Diffstat (limited to 'lib') (more/less context) (show whitespace changes)
-rw-r--r--lib/basic_rp.cc3
-rw-r--r--lib/discovery.cc31
-rw-r--r--lib/expat.cc9
3 files changed, 38 insertions, 5 deletions
diff --git a/lib/basic_rp.cc b/lib/basic_rp.cc
index 3cad71c..9c7113b 100644
--- a/lib/basic_rp.cc
+++ b/lib/basic_rp.cc
@@ -219,5 +219,6 @@ namespace opkele {
219 reset_vars(); 219 reset_vars();
220 bool o2 = om.has_field("ns") 220 bool o2 = om.has_field("ns")
221 && om.get_field("ns")==OIURI_OPENID20; 221 && om.get_field("ns")==OIURI_OPENID20
222 && om.has_field("op_endpoint") && !om.get_field("op_endpoint").empty();
222 if( (!o2) && om.has_field("user_setup_url")) 223 if( (!o2) && om.has_field("user_setup_url"))
223 throw id_res_setup(OPKELE_CP_ "assertion failed, setup url provided", 224 throw id_res_setup(OPKELE_CP_ "assertion failed, setup url provided",
diff --git a/lib/discovery.cc b/lib/discovery.cc
index bd1f917..b4ed3b6 100644
--- a/lib/discovery.cc
+++ b/lib/discovery.cc
@@ -284,4 +284,5 @@ namespace opkele {
284 set_user_data(); set_element_handler(); 284 set_user_data(); set_element_handler();
285 set_character_data_handler(); 285 set_character_data_handler();
286 set_unknown_encoding_handler();
286 287
287 if(xmode&xmode_html) { 288 if(xmode&xmode_html) {
@@ -454,14 +455,21 @@ namespace opkele {
454 } 455 }
455 if(is_qelement(n,NSURI_XRD "\tType")) { 456 if(is_qelement(n,NSURI_XRD "\tType")) {
456 assert(xrd); assert(xrd_service); assert(cdata==&cdata_buf); 457 if(xrd && xrd_service) {
458 assert(cdata==&cdata_buf);
457 xrd_service->types.insert(cdata_buf); 459 xrd_service->types.insert(cdata_buf);
460 }
458 }else if(is_qelement(n,NSURI_XRD "\tService")) { 461 }else if(is_qelement(n,NSURI_XRD "\tService")) {
459 assert(xrd); assert(xrd_service); 462 if(!(xrd && xrd_service)) {
463 skipping = -1;
464 }else{
460 assert(!pt_stack.empty()); 465 assert(!pt_stack.empty());
461 assert(pt_stack.back()==(NSURI_XRD "\tService")); 466 assert(pt_stack.back()==(NSURI_XRD "\tService"));
462 pt_stack.pop_back(); 467 pt_stack.pop_back();
463 xrd_service = 0; 468 xrd_service = 0;
469 }
464 }else if(is_qelement(n,NSURI_XRD "\tStatus")) { 470 }else if(is_qelement(n,NSURI_XRD "\tStatus")) {
465 assert(xrd); 471 if(!xrd) {
472 skipping=-1;
473 }else{
466 if(is_qelement(pt_stack.back().c_str(),n)) { 474 if(is_qelement(pt_stack.back().c_str(),n)) {
467 assert(cdata==&status_string); 475 assert(cdata==&status_string);
@@ -470,7 +478,15 @@ namespace opkele {
470 skipping = -1; 478 skipping = -1;
471 } 479 }
480 }
472 }else if(is_qelement(n,NSURI_XRD "\tExpires")) { 481 }else if(is_qelement(n,NSURI_XRD "\tExpires")) {
473 assert(xrd); 482 if(!xrd) {
483 skipping=-1;
484 }else{
474 xrd->expires = util::w3c_to_time(cdata_buf); 485 xrd->expires = util::w3c_to_time(cdata_buf);
486 }
487 }else if(is_qelement(n,NSURI_XRD "\tXRD")) {
488 assert(!pt_stack.empty());
489 assert(pt_stack.back()==(NSURI_XRD "\tXRD"));
490 pt_stack.pop_back();
475 }else if((xmode&xmode_html) && is_element(n,"head")) { 491 }else if((xmode&xmode_html) && is_element(n,"head")) {
476 skipping = -1; 492 skipping = -1;
@@ -570,4 +586,11 @@ namespace opkele {
570 } 586 }
571 587
588 int unknown_encoding(const XML_Char* /* n */,XML_Encoding *i) {
589 for(unsigned int ii=0;ii < sizeof(i->map)/sizeof(i->map[0]);++ii)
590 i->map[ii] = ii;
591 i->convert = 0; i->release = 0;
592 return XML_STATUS_OK;
593 }
594
572 }; 595 };
573 596
diff --git a/lib/expat.cc b/lib/expat.cc
index c4dab7e..fb58a9a 100644
--- a/lib/expat.cc
+++ b/lib/expat.cc
@@ -93,4 +93,13 @@ namespace opkele {
93 } 93 }
94 94
95 static int _unknown_encoding(void *ehd,const XML_Char *n,XML_Encoding *i) {
96 return ((expat_t*)ehd)->unknown_encoding(n,i);
97 }
98
99 void expat_t::set_unknown_encoding_handler() {
100 assert(_x);
101 XML_SetUnknownEncodingHandler(_x,_unknown_encoding,this);
102 }
103
95 } 104 }
96 105