[Issue 5366] New: std.json parseJSON incorrectly parses unicode entities

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Dec 23 10:05:19 PST 2010


http://d.puremagic.com/issues/show_bug.cgi?id=5366

           Summary: std.json parseJSON incorrectly parses unicode entities
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Phobos
        AssignedTo: nobody at puremagic.com
        ReportedBy: ibuclaw at ubuntu.com


--- Comment #0 from Iain Buclaw <ibuclaw at ubuntu.com> 2010-12-23 10:03:20 PST ---
import std.json;
import std.stdio;

void main()
{
    auto res = parseJSON(`"\u00F6"`);
    writefln("%s",res.str); // this should write "ö"
}



Patch:
--- d~/phobos/std/json.d
+++ d/phobos/std/json.d
@@ -156,7 +156,7 @@
                                 foreach_reverse(i; 0 .. 4) {
                                         auto hex = toupper(getChar());
                                         if(!isxdigit(hex)) error("Expecting
hex character");
-                                        val += (isdigit(hex) ? hex - '0' : hex
- 'A') << (4 * i);
+                                        val += (isdigit(hex) ? hex - '0' : hex
- '7') << (4 * i);
                                 }
                                 char[4] buf = void;
                                 str.put(toUTF8(buf, val));



Or (somewhat easier to under):
--- d~/phobos2/std/json.d
+++ d/phobos2/std/json.d
@@ -156,7 +156,7 @@
                                 foreach_reverse(i; 0 .. 4) {
                                         auto hex = toupper(getChar());
                                         if(!isxdigit(hex)) error("Expecting
hex character");
-                                        val += (isdigit(hex) ? hex - '0' : hex
- 'A') << (4 * i);
+                                        val += (isdigit(hex) ? hex - '0' : hex
- 'A' + 10) << (4 * i);
                                 }
                                 char[4] buf = void;
                                 str.put(toUTF8(buf, val));


Regards

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list