aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--src/xml_stream.erl9
2 files changed, 13 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 4629a3ce8..a4f07cdc6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2007-07-30 Mickael Remond <mickael.remond@process-one.net>
+ * src/xml_stream.erl: Group CDATA on a single xmlcdata
+ node (splitting is not relevant as dependant on TCP/IP packet
+ fragmentation) (EJAB-292).
+
* src/xml.erl: Remove compilation warnings (EJAB-290).
* src/xml.erl: Do not crypt binary CData, but enclose the value in
diff --git a/src/xml_stream.erl b/src/xml_stream.erl
index c923b6ae7..7dedbeb14 100644
--- a/src/xml_stream.erl
+++ b/src/xml_stream.erl
@@ -59,6 +59,15 @@ process_data(CallbackPid, Stack, Data) ->
case Stack of
[El] ->
[El];
+ %% Merge CDATA nodes if they are contiguous
+ %% This does not change the semantic: the split in
+ %% several CDATA nodes depends on the TCP/IP packet
+ %% fragmentation
+ [{xmlelement, Name, Attrs,
+ [{xmlcdata, PreviousCData}|Els]} | Tail] ->
+ [{xmlelement, Name, Attrs,
+ [{xmlcdata, concat_binary([PreviousCData, CData])} | Els]} | Tail];
+ %% No previous CDATA
[{xmlelement, Name, Attrs, Els} | Tail] ->
[{xmlelement, Name, Attrs, [{xmlcdata, CData} | Els]} |
Tail];