Skip to content
This repository has been archived by the owner on Oct 12, 2022. It is now read-only.

Commit

Permalink
Issue 7942 - Appending different string types corrupts memory
Browse files Browse the repository at this point in the history
  • Loading branch information
yebblies committed Jul 30, 2014
1 parent 4e051f9 commit d0f8bca
Showing 1 changed file with 84 additions and 0 deletions.
84 changes: 84 additions & 0 deletions src/rt/lifetime.d
Expand Up @@ -1938,6 +1938,90 @@ extern (C) void[] _d_arrayappendwd(ref byte[] x, dchar c)
}


/**
* Append wchar[] to char[]
*/
extern (C) void _d_arrayappendcwa(ref char[] chars, in wchar[] wchars)
{
auto arr = cast(byte[]*)&chars;
foreach(dchar c; wchars)
*arr = cast(byte[])_d_arrayappendcd(*arr, c);
}


/**
* Append dchar[] to char[]
*/
extern (C) void _d_arrayappendcda(ref char[] chars, in dchar[] dchars)
{
auto arr = cast(byte[]*)&chars;
foreach(dchar c; dchars)
*arr = cast(byte[])_d_arrayappendcd(*arr, c);
}


/**
* Append char[] to wchar[]
*/
extern (C) void _d_arrayappendwca(ref wchar[] wchars, in char[] chars)
{
auto arr = cast(byte[]*)&wchars;
foreach(dchar c; chars)
*arr = cast(byte[])_d_arrayappendwd(*arr, c);
}


/**
* Append dchar[] to wchar[]
*/
extern (C) void _d_arrayappendwda(ref wchar[] wchars, in dchar[] dchars)
{
auto arr = cast(byte[]*)&wchars;
foreach(dchar c; dchars)
*arr = cast(byte[])_d_arrayappendwd(*arr, c);
}


/**
* Append char[] to dchar[]
*/
extern (C) void _d_arrayappenddca(ref dchar[] dchars, in char[] chars)
{
foreach(dchar c; chars)
dchars ~= c;
}


/**
* Append wchar[] to dchar[]
*/
extern (C) void _d_arrayappenddwa(ref dchar[] dchars, in wchar[] wchars)
{
foreach(dchar c; wchars)
dchars ~= c;
}


unittest
{
auto chars = "a"c.dup;
auto wchars = "b"w.dup;
auto dchars = "c"d.dup;

_d_arrayappendcwa(chars, "b"w);
_d_arrayappendcda(chars, "c"d);
assert(chars == "abc");

_d_arrayappendwca(wchars, "a"c);
_d_arrayappendwda(wchars, "c"d);
assert(wchars == "bac");

_d_arrayappenddca(dchars, "a"c);
_d_arrayappenddwa(dchars, "b"w);
assert(dchars == "cab");
}


/**
*
*/
Expand Down

0 comments on commit d0f8bca

Please sign in to comment.