Skip to content

Commit

Permalink
Merge pull request #2336 from AndrewEdwards/master
Browse files Browse the repository at this point in the history
fix Issue 12853 - std.encoding EncodingSchemeUtf16Native and EncodingSch...
  • Loading branch information
yebblies committed Jul 17, 2014
2 parents 1f4c14a + a6c5488 commit 1f39823
Showing 1 changed file with 38 additions and 4 deletions.
42 changes: 38 additions & 4 deletions std/encoding.d
Expand Up @@ -2787,7 +2787,7 @@ class EncodingSchemeUtf16Native : EncodingScheme
{
auto t = cast(const(wchar)[]) s;
dchar c = std.encoding.decode(t);
s = s[$-t.length..$];
s = s[$-t.length * wchar.sizeof..$];
return c;
}

Expand All @@ -2800,7 +2800,7 @@ class EncodingSchemeUtf16Native : EncodingScheme
{
auto t = cast(const(wchar)[]) s;
dchar c = std.encoding.safeDecode(t);
s = s[$-t.length..$];
s = s[$-t.length * wchar.sizeof..$];
return c;
}

Expand All @@ -2810,6 +2810,23 @@ class EncodingSchemeUtf16Native : EncodingScheme
}
}
}
unittest
{
version(LittleEndian)
{
auto efrom = EncodingScheme.create("utf-16le");
ubyte[6] sample = [154,1, 155,1, 156,1];
}
version(BigEndian)
{
auto efrom = EncodingScheme.create("utf-16be");
ubyte[6] sample = [1,154, 1,155, 1,156];
}
const(ubyte)[] ub = cast(const(ubyte)[])sample;
dchar dc = efrom.safeDecode(ub);
assert(dc == 410);
assert(ub.length == 4);
}

/**
EncodingScheme to handle UTF-32 in native byte order
Expand Down Expand Up @@ -2865,7 +2882,7 @@ class EncodingSchemeUtf32Native : EncodingScheme
{
auto t = cast(const(dchar)[]) s;
dchar c = std.encoding.decode(t);
s = s[$-t.length..$];
s = s[$-t.length * dchar.sizeof..$];
return c;
}

Expand All @@ -2878,7 +2895,7 @@ class EncodingSchemeUtf32Native : EncodingScheme
{
auto t = cast(const(dchar)[]) s;
dchar c = std.encoding.safeDecode(t);
s = s[$-t.length..$];
s = s[$-t.length * dchar.sizeof..$];
return c;
}

Expand All @@ -2888,6 +2905,23 @@ class EncodingSchemeUtf32Native : EncodingScheme
}
}
}
unittest
{
version(LittleEndian)
{
auto efrom = EncodingScheme.create("utf-32le");
ubyte[12] sample = [154,1,0,0, 155,1,0,0, 156,1,0,0];
}
version(BigEndian)
{
auto efrom = EncodingScheme.create("utf-32be");
ubyte[12] sample = [0,0,1,154, 0,0,1,155, 0,0,1,156];
}
const(ubyte)[] ub = cast(const(ubyte)[])sample;
dchar dc = efrom.safeDecode(ub);
assert(dc == 410);
assert(ub.length == 8);
}

//=============================================================================

Expand Down

0 comments on commit 1f39823

Please sign in to comment.