--- parser3/src/classes/string.C 2015/05/16 22:24:38 1.217 +++ parser3/src/classes/string.C 2015/09/03 20:47:21 1.219 @@ -20,7 +20,7 @@ #include "pa_vregex.h" #include "pa_charsets.h" -volatile const char * IDENT_STRING_C="$Id: string.C,v 1.217 2015/05/16 22:24:38 moko Exp $"; +volatile const char * IDENT_STRING_C="$Id: string.C,v 1.219 2015/09/03 20:47:21 moko Exp $"; // class @@ -678,6 +678,8 @@ static void _trim(Request& r, MethodPara kind=String::TRIM_START; else if(skind==TRIM_END_OPTION || skind=="end") kind=String::TRIM_END; + else if(params_count==1) + chars=skind.cstr(); else throw Exception(PARSER_RUNTIME, &skind, @@ -695,9 +697,9 @@ static void _trim(Request& r, MethodPara } static void _base64(Request& r, MethodParams& params) { - if(params.count()) { + if(&r.get_self() == string_class) { // decode: ^string:base64[encoded[;$.strict(true|false)]] - const char* cstr=params.as_string(0, PARAMETER_MUST_BE_STRING).cstr(); + const char* cstr=params.count() ? params.as_string(0, PARAMETER_MUST_BE_STRING).cstr() : ""; char* decoded=0; size_t length=0; @@ -734,9 +736,9 @@ static void _base64(Request& r, MethodPa } static void _idna(Request& r, MethodParams& params) { - if(params.count()) { + if(&r.get_self() == string_class) { // decode: ^string:idna[encoded] - const char* cstr=params.as_string(0, PARAMETER_MUST_BE_STRING).cstr(); + const char* cstr=params.count() ? params.as_string(0, PARAMETER_MUST_BE_STRING).cstr() : ""; r.write_assign_lang(*new String(pa_idna_decode(cstr, r.charsets.source()), String::L_TAINTED)); } else { // encode: ^str.idna[] @@ -835,7 +837,7 @@ MString::MString(): Methoded("string") { add_native_method("idna", Method::CT_ANY, _idna, 0, 1); // ^string.js-escape[] - add_native_method("js-escape", Method::CT_ANY, _escape, 0, 0); + add_native_method("js-escape", Method::CT_DYNAMIC, _escape, 0, 0); // ^string:js-unescape[escaped%uXXXXstring] add_native_method("js-unescape", Method::CT_STATIC, _unescape, 1, 1);