fixed str:tokenize for case when 2nd argument is an empty string (should
authorWilliam M. Brack <wbrack@src.gnome.org>
Tue, 27 Jul 2004 00:06:37 +0000 (00:06 +0000)
committerWilliam M. Brack <wbrack@src.gnome.org>
Tue, 27 Jul 2004 00:06:37 +0000 (00:06 +0000)
* libexslt/strings.c: fixed str:tokenize for case when 2nd
  argument is an empty string (should produce a token for
  each char in the string).  Reported on the mailing list by
  Peter Pawlowski.

ChangeLog
libexslt/strings.c

index 458e642..2b43575 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Mon Jul 26 17:03:22 PDT 2004 William Brack <wbrack@mmm.com.hk>
+
+       * libexslt/strings.c: fixed str:tokenize for case when 2nd
+         argument is an empty string (should produce a token for
+         each char in the string).  Reported on the mailing list by
+         Peter Pawlowski.
+
 Fri Jul 23 21:55:14 PDT 2004 William Brack <wbrack@mmm.com.hk>
        * libxslt/imports.c: further enhancement for template priorities
          on imported stylesheets (better fix for bug 141279, fixes
index 39c1a3e..6ad6d6c 100644 (file)
@@ -77,7 +77,17 @@ exsltStrTokenizeFunction(xmlXPathParserContextPtr ctxt, int nargs)
             ret->boolval = 0; /* Freeing is not handled there anymore */
             for (cur = str, token = str; *cur != 0; cur += clen) {
                clen = xmlUTF8Size(cur);
-                for (delimiter = delimiters; *delimiter != 0;
+               if (*delimiters == 0) { /* empty string case */
+                   xmlChar ctmp;
+                   ctmp = *(cur+clen);
+                   *(cur+clen) = 0;
+                    node = xmlNewDocRawNode(container, NULL,
+                                       (const xmlChar *) "token", cur);
+                   xmlAddChild((xmlNodePtr) container, node);
+                   xmlXPathNodeSetAddUnique(ret->nodesetval, node);
+                    *(cur+clen) = ctmp; /* restore the changed byte */
+                    token = cur + clen;
+                } else for (delimiter = delimiters; *delimiter != 0;
                                delimiter += xmlUTF8Size(delimiter)) {
                     if (!xmlUTF8Charcmp(cur, delimiter)) {
                         if (cur == token) {