diff --git a/libxslt/functions.c b/libxslt/functions.c index c4399771d24be5a43cedd7a7a5b69d30f47bf27f_bGlieHNsdC9mdW5jdGlvbnMuYw==..2d178bddf99d9a929e0db6fdda7e690b10b76898_bGlieHNsdC9mdW5jdGlvbnMuYw== 100644 --- a/libxslt/functions.c +++ b/libxslt/functions.c @@ -608,7 +608,8 @@ switch (nargs) { case 3: - CAST_TO_STRING; + if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING)) + xmlXPathStringFunction(ctxt, 1); decimalObj = valuePop(ctxt); ncname = xsltSplitQName(sheet->dict, decimalObj->stringval, &prefix); if (prefix != NULL) { @@ -634,5 +635,6 @@ } /* Intentional fall-through */ case 2: - CAST_TO_STRING; + if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING)) + xmlXPathStringFunction(ctxt, 1); formatObj = valuePop(ctxt); @@ -638,5 +640,6 @@ formatObj = valuePop(ctxt); - CAST_TO_NUMBER; + if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER)) + xmlXPathNumberFunction(ctxt, 1); numberObj = valuePop(ctxt); break; default: @@ -640,7 +643,8 @@ numberObj = valuePop(ctxt); break; default: - XP_ERROR(XPATH_INVALID_ARITY); + xmlXPathErr(ctxt, XPATH_INVALID_ARITY); + return; } if (formatValues != NULL) { diff --git a/libxslt/pattern.c b/libxslt/pattern.c index c4399771d24be5a43cedd7a7a5b69d30f47bf27f_bGlieHNsdC9wYXR0ZXJuLmM=..2d178bddf99d9a929e0db6fdda7e690b10b76898_bGlieHNsdC9wYXR0ZXJuLmM= 100644 --- a/libxslt/pattern.c +++ b/libxslt/pattern.c @@ -1264,7 +1264,6 @@ cur += len; CUR_PTR = cur; } else { - /* XP_ERROR(XPATH_START_LITERAL_ERROR); */ ctxt->error = 1; return(NULL); }