Skip to content

Commit ad99bca

Browse files
committed
remove unsafe use of .ptr in std.string
1 parent c027225 commit ad99bca

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

std/string.d

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ out (result)
273273
auto slen = s.length;
274274
while (slen > 0 && s[slen-1] == 0) --slen;
275275
assert(strlen(result) == slen);
276-
assert(memcmp(result, s.ptr, slen) == 0);
276+
assert(result[0 .. slen] == s[0 .. slen]);
277277
}
278278
}
279279
body
@@ -299,7 +299,7 @@ body
299299
copy[0..s.length] = s[];
300300
copy[s.length] = 0;
301301

302-
return assumeUnique(copy).ptr;
302+
return &assumeUnique(copy)[0];
303303
}
304304

305305
/++ Ditto +/
@@ -318,7 +318,7 @@ immutable(char)* toStringz(in string s) @trusted pure nothrow
318318
// unreadable. Otherwise, it's definitely pointing to valid
319319
// memory.
320320
if ((cast(size_t) p & 3) && *p == 0)
321-
return s.ptr;
321+
return &s[0];
322322
return toStringz(cast(const char[]) s);
323323
}
324324

@@ -394,15 +394,16 @@ ptrdiff_t indexOf(Range)(Range s, in dchar c,
394394
{
395395
static if (Char.sizeof == 1 && isSomeString!Range)
396396
{
397-
import core.stdc.string : memchr;
398397
if (std.ascii.isASCII(c) && !__ctfe)
399398
{ // Plain old ASCII
400-
auto trustedmemchr() @trusted { return cast(Char*)memchr(s.ptr, c, s.length); }
401-
const p = trustedmemchr();
402-
if (p)
403-
return p - s.ptr;
404-
else
405-
return -1;
399+
static ptrdiff_t trustedmemchr(Range s, char c) @trusted
400+
{
401+
import core.stdc.string : memchr;
402+
const p = cast(const(Char)*)memchr(s.ptr, c, s.length);
403+
return p ? p - s.ptr : -1;
404+
}
405+
406+
return trustedmemchr(s, cast(char)c);
406407
}
407408
}
408409

@@ -730,7 +731,7 @@ ptrdiff_t indexOf(Range, Char)(Range s, const(Char)[] sub,
730731
((a, b) => toLower(a) == toLower(b))
731732
(s, sub);
732733
}
733-
return balance.empty ? -1 : balance.ptr - s.ptr;
734+
return () @trusted { return balance.empty ? -1 : balance.ptr - s.ptr; } ();
734735
}
735736
else
736737
{
@@ -6246,11 +6247,11 @@ char[] soundex(const(char)[] str, char[] buffer = null)
62466247
@safe pure nothrow
62476248
in
62486249
{
6249-
assert(!buffer.ptr || buffer.length >= 4);
6250+
assert(buffer is null || buffer.length >= 4);
62506251
}
62516252
out (result)
62526253
{
6253-
if (result.ptr)
6254+
if (result !is null)
62546255
{
62556256
assert(result.length == 4);
62566257
assert(result[0] >= 'A' && result[0] <= 'Z');
@@ -6263,7 +6264,7 @@ body
62636264
char[4] result = soundexer(str);
62646265
if (result[0] == 0)
62656266
return null;
6266-
if (!buffer.ptr)
6267+
if (buffer is null)
62676268
buffer = new char[4];
62686269
buffer[] = result[];
62696270
return buffer;

0 commit comments

Comments
 (0)