mldonkey-commits
[Top][All Lists]
Advanced

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

[Mldonkey-commits] mldonkey distrib/ChangeLog src/networks/direct_...


From: mldonkey-commits
Subject: [Mldonkey-commits] mldonkey distrib/ChangeLog src/networks/direct_...
Date: Thu, 08 Apr 2010 19:01:35 +0000

CVSROOT:        /sources/mldonkey
Module name:    mldonkey
Changes by:     spiralvoice <spiralvoice>       10/04/08 19:01:35

Modified files:
        distrib        : ChangeLog 
        src/networks/direct_connect: dcShared.ml 
        src/utils/xml-light: xml.ml xml.mli 

Log message:
        patch #6959 - dcXmpEscape2.patch

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/mldonkey/distrib/ChangeLog?cvsroot=mldonkey&r1=1.1420&r2=1.1421
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/networks/direct_connect/dcShared.ml?cvsroot=mldonkey&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/utils/xml-light/xml.ml?cvsroot=mldonkey&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/mldonkey/src/utils/xml-light/xml.mli?cvsroot=mldonkey&r1=1.1&r2=1.2

Patches:
Index: distrib/ChangeLog
===================================================================
RCS file: /sources/mldonkey/mldonkey/distrib/ChangeLog,v
retrieving revision 1.1420
retrieving revision 1.1421
diff -u -b -r1.1420 -r1.1421
--- distrib/ChangeLog   4 Apr 2010 09:16:01 -0000       1.1420
+++ distrib/ChangeLog   8 Apr 2010 19:01:34 -0000       1.1421
@@ -14,6 +14,10 @@
 ChangeLog
 =========
 
+2010/04/08
+6959: DC: Fix invalid XML (ygrek)
+- enhanced patch (use Xml.escape and properly escape attributes in 
Xml.to_string)
+
 2010/04/04
 7153: BT: correctly handle failed tracker requests (ygrek)
 7155: DC: understand hublist.xml (ygrek)

Index: src/networks/direct_connect/dcShared.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/networks/direct_connect/dcShared.ml,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- src/networks/direct_connect/dcShared.ml     22 Oct 2009 20:02:08 -0000      
1.3
+++ src/networks/direct_connect/dcShared.ml     8 Apr 2010 19:01:34 -0000       
1.4
@@ -79,28 +79,22 @@
 let make_xml_mylist () = 
   let buf = Buffer.create 1000 in
   Printf.bprintf buf "<?xml version=\"1.0\" encoding=\"utf-8\" 
standalone=\"yes\"?>\r\n";
-  Printf.bprintf buf "<FileListing Version=\"1\" CID=\"1,0,2,3,4,5,6\" 
Base=\"/\" Generator=\"MLDC-%s\">\r\n" Autoconf.current_version;
+  Printf.bprintf buf "<FileListing Version=\"1\" CID=\"1,0,2,3,4,5,6\" 
Base=\"/\" Generator=\"MLDC-%s\">\r\n" (Xml.escape Autoconf.current_version);
   let rec iter ntabs node =
     let dirname = node.shared_dirname in
     let ntabs =
       if dirname = "" then ntabs else begin
         buf_tabs buf ntabs;
         let dir = dirname in
-        (* Escape some special XML characters that may appear in the dirname *)
-        let dir = Str.global_replace (Str.regexp "'") "&apos;" dir in
-        let dir = Str.global_replace (Str.regexp "&") "&amp;" dir in
-        Printf.bprintf buf "<Directory Name=\"%s\">\r\n" dir;
+        Printf.bprintf buf "<Directory Name=\"%s\">\r\n" (Xml.escape dir);
         ntabs+1
       end
     in
     List.iter (fun dcsh ->
       buf_tabs buf ntabs;
       let fname = Filename2.basename dcsh.dc_shared_codedname in
-      (* Escape some special XML characters that may appear in the filename *)
-      let fname = Str.global_replace (Str.regexp "'") "&apos;" fname in
-      let fname = Str.global_replace (Str.regexp "&") "&amp;" fname in
-      Printf.bprintf buf "<File Name=\"%s\" Size=\"%Ld\" TTH=\"%s\"/>\r\n" 
fname 
-        dcsh.dc_shared_size dcsh.dc_shared_tiger_root
+      Printf.bprintf buf "<File Name=\"%s\" Size=\"%Ld\" TTH=\"%s\"/>\r\n" 
(Xml.escape fname)
+        dcsh.dc_shared_size (Xml.escape dcsh.dc_shared_tiger_root)
     ) node.shared_files;
     List.iter (fun (_, node) ->
         iter ntabs node;

Index: src/utils/xml-light/xml.ml
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/utils/xml-light/xml.ml,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- src/utils/xml-light/xml.ml  26 Jan 2006 10:40:01 -0000      1.2
+++ src/utils/xml-light/xml.ml  8 Apr 2010 19:01:34 -0000       1.3
@@ -125,35 +125,34 @@
        | Element (_,_,clist) -> List.fold_left f v clist
        | x -> raise (Not_element x)
 
-let tmp = Buffer.create 200
-
-let buffer_pcdata text =
+let buffer_escape b text =
   let l = String.length text in
   for p = 0 to l-1 do 
     match text.[p] with
-    | '>' -> Buffer.add_string tmp "&gt;"
-    | '<' -> Buffer.add_string tmp "&lt;"
-    | '&' ->
-        if p < l-1 && text.[p+1] = '#' then
-          Buffer.add_char tmp '&'
-        else
-          Buffer.add_string tmp "&amp;"
-    | '\'' -> Buffer.add_string tmp "&apos;"
-    | '"' -> Buffer.add_string tmp "&quot;"
-    | c -> Buffer.add_char tmp c
+    | '>' -> Buffer.add_string b "&gt;"
+    | '<' -> Buffer.add_string b "&lt;"
+    | '&' -> Buffer.add_string b "&amp;"
+    | '\'' -> Buffer.add_string b "&apos;"
+    | '"' -> Buffer.add_string b "&quot;"
+    | '\x0A' -> Buffer.add_string b "&#x0A;"
+    | '\x0D' -> Buffer.add_string b "&#x0D;"
+    | c -> Buffer.add_char b c
   done
   
+let escape s =
+  let b = Buffer.create (String.length s) in
+  buffer_escape b s;
+  Buffer.contents b
+
+let tmp = Buffer.create 200
+
+let buffer_pcdata = buffer_escape tmp
+
 let buffer_attr (n,v) =
        Buffer.add_char tmp ' ';
        Buffer.add_string tmp n;
        Buffer.add_string tmp "=\"";
-       let l = String.length v in
-       for p = 0 to l-1 do
-               match v.[p] with
-               | '\\' -> Buffer.add_string tmp "\\\\"
-               | '"' -> Buffer.add_string tmp "\\\""
-               | c -> Buffer.add_char tmp c
-       done;
+       buffer_pcdata v;
        Buffer.add_char tmp '"'
 
 let to_string x = 

Index: src/utils/xml-light/xml.mli
===================================================================
RCS file: /sources/mldonkey/mldonkey/src/utils/xml-light/xml.mli,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- src/utils/xml-light/xml.mli 29 Jul 2004 10:25:34 -0000      1.1
+++ src/utils/xml-light/xml.mli 8 Apr 2010 19:01:34 -0000       1.2
@@ -144,6 +144,9 @@
  any user-readable formating ). *)
 val to_string : xml -> string
 
+(** Escape string as xml pcdata *)
+val escape : string -> string
+
 (** Print the xml data structure into an user-readable string with
  tabs and lines break between different nodes. *)
 val to_string_fmt : xml -> string




reply via email to

[Prev in Thread] Current Thread [Next in Thread]