[xslt] Problem with multi-byte characters in str:padding



Hi,

when using  (e.g.)
<xsl:value-of select="str:padding(@no, '&#160;')"/>
via xsltproc I got unexpected errors:
  xmlXPathTranslateFunction: Invalid UTF8 string

AFAIKT the problem is caused by code in libexslt/strings.c
(from git.gnome.org, see my comments //):

static void
exsltStrPaddingFunction (xmlXPathParserContextPtr ctxt, int nargs) {
  int number, str_len = 0;
  xmlChar *str = NULL, *ret = NULL, *tmp;

  if ((nargs < 1) || (nargs > 2)) {
    xmlXPathSetArityError(ctxt);
    return;
  }
// now nargs == 2

  if (nargs == 2) { // always
   str = xmlXPathPopString(ctxt);
   str_len = xmlUTF8Strlen(str);
// now str_len contains number of utf-8 chars(!)
  }
  if (str_len == 0) {
    if (str != NULL) xmlFree(str);
    str = xmlStrdup((const xmlChar *) " ");
    str_len = 1;
  }

  number = (int) xmlXPathPopNumber(ctxt);

  if (number <= 0) {
    xmlXPathReturnEmptyString(ctxt);
    xmlFree(str);
    return;
  }

  while (number >= str_len) {
// xmlStrncat takes _bytes_ as 3rd argument!
    ret = xmlStrncat(ret, str, str_len);
// now multi-byte characters are corrupt
    number -= str_len;
  }
--- snip ---



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]