--- parser3/src/classes/xdoc.C 2007/04/23 10:30:10 1.154 +++ parser3/src/classes/xdoc.C 2009/07/06 12:13:30 1.162 @@ -1,7 +1,7 @@ /** @file Parser: @b xdoc parser class. - Copyright (c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2009 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ @@ -9,7 +9,7 @@ #ifdef XML -static const char * const IDENT_XDOC_C="$Date: 2007/04/23 10:30:10 $"; +static const char * const IDENT_XDOC_C="$Date: 2009/07/06 12:13:30 $"; #include "libxml/tree.h" #include "libxml/HTMLtree.h" @@ -42,7 +42,7 @@ static const char * const IDENT_XDOC_C=" class MXdoc: public MXnode { public: // VStateless_class - Value* create_new_value(Pool&, HashStringValue&) { return new VXdoc(); } + Value* create_new_value(Pool&, HashStringValue*) { return new VXdoc(); } public: MXdoc(); @@ -237,7 +237,7 @@ static void _createElementNS(Request& r, xmlDoc& xmldoc=vdoc.get_xmldoc(); // namespaceURI;localName - xmlChar* namespaceURI=as_xmlchar(r, params, 0, "namespaceURI must be string"); + xmlChar* namespaceURI=as_xmlchar(r, params, 0, NAMESPACEURI_MUST_BE_STRING); xmlChar* qualifiedName=as_xmlchar(r, params, 1, "qualifiedName must be string"); xmlChar* prefix=0; @@ -266,7 +266,7 @@ static void _createTextNode(Request& r, VXdoc& vdoc=GET_SELF(r, VXdoc); xmlDoc& xmldoc=vdoc.get_xmldoc(); - xmlChar* data=as_xmlchar(r, params, 0, "data must be string"); + xmlChar* data=as_xmlchar(r, params, 0, DATA_MUST_BE_STRING); xmlNode *node=xmlNewDocText(&xmldoc, data); writeNode(r, vdoc, node); @@ -276,7 +276,7 @@ static void _createTextNode(Request& r, static void _createComment(Request& r, MethodParams& params) { VXdoc& vdoc=GET_SELF(r, VXdoc); - xmlChar* data=as_xmlchar(r, params, 0, "data must be string"); + xmlChar* data=as_xmlchar(r, params, 0, DATA_MUST_BE_STRING); xmlNode *node=xmlNewComment(data); writeNode(r, vdoc, node); @@ -287,7 +287,7 @@ static void _createCDATASection(Request& VXdoc& vdoc=GET_SELF(r, VXdoc); xmlDoc& xmldoc=vdoc.get_xmldoc(); - xmlChar* data=as_xmlchar(r, params, 0, "data must be string"); + xmlChar* data=as_xmlchar(r, params, 0, DATA_MUST_BE_STRING); xmlNode *node=xmlNewCDataBlock(&xmldoc, data, strlen((const char*)data)); writeNode(r, vdoc, node); @@ -298,8 +298,8 @@ static void _createProcessingInstruction VXdoc& vdoc=GET_SELF(r, VXdoc); xmlDoc& xmldoc=vdoc.get_xmldoc(); - xmlChar* target=as_xmlchar(r, params, 0, "data must be string"); - xmlChar* data=as_xmlchar(r, params, 1, "data must be string"); + xmlChar* target=as_xmlchar(r, params, 0, DATA_MUST_BE_STRING); + xmlChar* data=as_xmlchar(r, params, 1, DATA_MUST_BE_STRING); xmlNode *node=xmlNewDocPI(&xmldoc, target, data); writeNode(r, vdoc, node); @@ -310,7 +310,7 @@ static void _createAttribute(Request& r, VXdoc& vdoc=GET_SELF(r, VXdoc); xmlDoc& xmldoc=vdoc.get_xmldoc(); - xmlChar* name=as_xmlchar(r, params, 0, "name must be string"); + xmlChar* name=as_xmlchar(r, params, 0, NAME_MUST_BE_STRING); xmlNode *node=(xmlNode*)xmlNewDocProp(&xmldoc, name, 0); writeNode(r, vdoc, node); @@ -321,8 +321,8 @@ static void _createAttributeNS(Request& VXdoc& vdoc=GET_SELF(r, VXdoc); xmlDoc& xmldoc=vdoc.get_xmldoc(); - xmlChar* namespaceURI=as_xmlchar(r, params, 0, "namespaceURI must be string"); - xmlChar* qualifiedName=as_xmlchar(r, params, 1, "name must be string"); + xmlChar* namespaceURI=as_xmlchar(r, params, 0, NAMESPACEURI_MUST_BE_STRING); + xmlChar* qualifiedName=as_xmlchar(r, params, 1, NAME_MUST_BE_STRING); xmlChar* prefix=0; xmlChar* localName=xmlSplitQName2(qualifiedName, &prefix); @@ -342,7 +342,7 @@ static void _createEntityReference(Reque VXdoc& vdoc=GET_SELF(r, VXdoc); xmlDoc& xmldoc=vdoc.get_xmldoc(); - xmlChar* name=as_xmlchar(r, params, 0, "name must be string"); + xmlChar* name=as_xmlchar(r, params, 0, NAME_MUST_BE_STRING); xmlNode *node=xmlNewReference(&xmldoc, name); writeNode(r, vdoc, node); @@ -391,7 +391,7 @@ static void _create(Request& r, MethodPa Temp_lang temp_lang(r, String::L_XML); const String& xml=r.process_to_string(param); - const char* cstr=xml.cstr(String::L_UNSPECIFIED, 0, &r.charsets); + const char* cstr=xml.untaint_cstr(String::L_AS_IS, 0, &r.charsets); xmldoc=xmlParseMemory(cstr, strlen(cstr)); //printf("document=0x%p\n", document); if(!xmldoc || xmlHaveGenericErrors()) @@ -424,7 +424,7 @@ static void _create(Request& r, MethodPa set_encoding=true; // must be last action in if, see after if} } else { - VFile* vfile=param.as_vfile(String::L_UNSPECIFIED); + VFile* vfile=param.as_vfile(String::L_AS_IS); xmldoc=xmlParseMemory(vfile->value_ptr(), vfile->value_size()); if(!xmldoc || xmlHaveGenericErrors()) throw XmlException(0); @@ -454,14 +454,14 @@ static void _load(Request& r, MethodPara VXdoc& vdoc=GET_SELF(r, VXdoc); // filespec - const String* uri=¶ms.as_string(0, "uri must be string"); + const String* uri=¶ms.as_string(0, "URI must be string"); const char* uri_cstr; if(uri->pos("://")==STRING_NOT_FOUND) // disk path - uri_cstr=r.absolute(*uri).cstr(String::L_FILE_SPEC); + uri_cstr=r.absolute(*uri).taint_cstr(String::L_FILE_SPEC); else // xxx:// - uri_cstr=uri->cstr(String::L_AS_IS); // leave as-is for xmlParseFile to handle + uri_cstr=uri->taint_cstr(String::L_AS_IS); // leave as-is for xmlParseFile to handle - /// todo!! add SAFE MODE!! + /// @todo!! add SAFE MODE!! xmlDoc* xmldoc=xmlParseFile(uri_cstr); if(!xmldoc || xmlHaveGenericErrors()) throw XmlException(uri); @@ -647,7 +647,7 @@ static void _file(Request& r, MethodPara oo, 0/*not to file, to memory*/); // write out result - r.write_no_lang(String(buf.str, buf.length)); + r.write_no_lang(String(buf.str)); // write out result VFile& vfile=*new VFile; @@ -667,7 +667,7 @@ static void _file(Request& r, MethodPara static void _save(Request& r, MethodParams& params) { VXdoc& vdoc=GET_SELF(r, VXdoc); - const String& file_spec=r.absolute(params.as_string(0, "file name must be string")); + const String& file_spec=r.absolute(params.as_string(0, FILE_NAME_MUST_BE_STRING)); VXdoc::Output_options oo(vdoc.output_options); xdoc2buf(r, vdoc, params, 1, @@ -683,7 +683,7 @@ static void _string(Request& r, MethodPa 0/*not to file, to memory*/, true/*use source charset to render, client charset to put to header*/); // write out result - r.write_no_lang(String(String::Body(buf.str), String::L_AS_IS)); + r.write_no_lang(String(buf.str, String::L_AS_IS)); } #ifndef DOXYGEN