diff options
| author | Rob Richards <rrichards@php.net> | 2008-10-20 12:45:47 +0000 |
|---|---|---|
| committer | Rob Richards <rrichards@php.net> | 2008-10-20 12:45:47 +0000 |
| commit | f3f71b7351177dd7962b5482393411c38a9fa796 (patch) | |
| tree | 606a9ef8c9da687a4f19d00282df6f7267b31faa | |
| parent | 02fee775842311c3e4a37406b19213e1de6ed082 (diff) | |
| download | php-git-f3f71b7351177dd7962b5482393411c38a9fa796.tar.gz | |
MFH: fix bug #46335 (DOMText::splitText doesn't handle multibyte characters)
add test
| -rw-r--r-- | ext/dom/tests/bug46335.phpt | 35 | ||||
| -rw-r--r-- | ext/dom/text.c | 8 |
2 files changed, 39 insertions, 4 deletions
diff --git a/ext/dom/tests/bug46335.phpt b/ext/dom/tests/bug46335.phpt new file mode 100644 index 0000000000..bea4ae9e7d --- /dev/null +++ b/ext/dom/tests/bug46335.phpt @@ -0,0 +1,35 @@ +--TEST-- +Bug #46335 (DOMText::splitText doesn't handle multibyte characters). +--SKIPIF-- +<?php require_once('skipif.inc'); ?> +--FILE-- +<?php +$textascii = 'This is an "example" of using DOM splitText'; +$text = 'This is an ‘example’ of using DOM splitText'; +$start = 30; +$length = 3; + +$dom = new DOMDocument('1.0', 'UTF-8'); +$node = $dom->createTextNode($textascii); +$dom->appendChild($node); + +print "Text: $node->textContent\n"; + +$matched = $node->splitText($start); +$matched->splitText($length); +print "splitText (ASCII): $matched->textContent\n"; + +$node = $dom->createTextNode($text); +$dom->appendChild($node); + +print "Text: $node->textContent\n"; + +$matched = $node->splitText($start); +$matched->splitText($length); +print "splitText (UTF-8): $matched->textContent\n"; +?> +--EXPECT-- +Text: This is an "example" of using DOM splitText +splitText (ASCII): DOM +Text: This is an ‘example’ of using DOM splitText +splitText (UTF-8): DOM diff --git a/ext/dom/text.c b/ext/dom/text.c index f5517f4b76..3d6aab75c1 100644 --- a/ext/dom/text.c +++ b/ext/dom/text.c @@ -171,19 +171,19 @@ PHP_FUNCTION(dom_text_split_text) if (cur == NULL) { RETURN_FALSE; } - length = xmlStrlen(cur); + length = xmlUTF8Strlen(cur); if (offset > length || offset < 0) { xmlFree(cur); RETURN_FALSE; } - first = xmlStrndup(cur, offset); - second = xmlStrdup(cur + offset); + first = xmlUTF8Strndup(cur, offset); + second = xmlUTF8Strsub(cur, offset, length - offset); xmlFree(cur); - xmlNodeSetContentLen(node, first, offset); + xmlNodeSetContent(node, first); nnode = xmlNewDocText(node->doc, second); xmlFree(first); |
