Skip to content

Commit da65768

Browse files
committed
Add checks for infinite ranges in many range function signitures
1 parent 1171917 commit da65768

File tree

2 files changed

+31
-26
lines changed

2 files changed

+31
-26
lines changed

std/file.d

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,7 @@ private void removeImpl(const(char)[] name, const(FSChar)* namez) @trusted
761761
}
762762

763763
version(Windows) private WIN32_FILE_ATTRIBUTE_DATA getFileAttributesWin(R)(R name)
764-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R))
764+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R))
765765
{
766766
auto namez = name.tempCString!FSChar();
767767

@@ -1020,7 +1020,7 @@ version(StdDdoc)
10201020
out SysTime fileCreationTime,
10211021
out SysTime fileAccessTime,
10221022
out SysTime fileModificationTime)
1023-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
1023+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
10241024
!isConvertibleToString!R);
10251025
}
10261026
else version(Windows)
@@ -1029,7 +1029,7 @@ else version(Windows)
10291029
out SysTime fileCreationTime,
10301030
out SysTime fileAccessTime,
10311031
out SysTime fileModificationTime)
1032-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
1032+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
10331033
!isConvertibleToString!R)
10341034
{
10351035
with (getFileAttributesWin(name))
@@ -1437,7 +1437,7 @@ version (OSX) {} else
14371437
* true if the filename specified as input exists
14381438
*/
14391439
bool exists(R)(R name)
1440-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
1440+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
14411441
!isConvertibleToString!R)
14421442
{
14431443
return existsImpl(name.tempCString!FSChar());
@@ -1522,7 +1522,7 @@ private bool existsImpl(const(FSChar)* namez) @trusted nothrow @nogc
15221522
Throws: $(D FileException) on error.
15231523
+/
15241524
uint getAttributes(R)(R name)
1525-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
1525+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
15261526
!isConvertibleToString!R)
15271527
{
15281528
version(Windows)
@@ -1592,7 +1592,7 @@ uint getAttributes(R)(auto ref R name)
15921592
$(D FileException) on error.
15931593
+/
15941594
uint getLinkAttributes(R)(R name)
1595-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
1595+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
15961596
!isConvertibleToString!R)
15971597
{
15981598
version(Windows)
@@ -1638,7 +1638,7 @@ uint getLinkAttributes(R)(auto ref R name)
16381638
$(D FileException) if the given file does not exist.
16391639
+/
16401640
void setAttributes(R)(R name, uint attributes)
1641-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
1641+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
16421642
!isConvertibleToString!R)
16431643
{
16441644
version (Windows)
@@ -1700,7 +1700,7 @@ assert("/usr/share/include".isDir);
17001700
--------------------
17011701
+/
17021702
@property bool isDir(R)(R name)
1703-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
1703+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
17041704
!isConvertibleToString!R)
17051705
{
17061706
version(Windows)
@@ -1850,7 +1850,7 @@ assert(!"/usr/share/include".isFile);
18501850
--------------------
18511851
+/
18521852
@property bool isFile(R)(R name)
1853-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
1853+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
18541854
!isConvertibleToString!R)
18551855
{
18561856
version(Windows)
@@ -1984,7 +1984,7 @@ bool attrIsFile(uint attributes) @safe pure nothrow @nogc
19841984
$(D FileException) if the given file does not exist.
19851985
+/
19861986
@property bool isSymlink(R)(R name)
1987-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
1987+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
19881988
!isConvertibleToString!R)
19891989
{
19901990
version(Windows)
@@ -2112,7 +2112,7 @@ bool attrIsSymlink(uint attributes) @safe pure nothrow @nogc
21122112
* Throws: $(D FileException) on error.
21132113
*/
21142114
void chdir(R)(R pathname)
2115-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
2115+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
21162116
!isConvertibleToString!R)
21172117
{
21182118
// Place outside of @trusted block
@@ -2157,7 +2157,7 @@ Throws: $(D FileException) on Posix or $(D WindowsException) on Windows
21572157
if an error occured.
21582158
*/
21592159
void mkdir(R)(R pathname)
2160-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
2160+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
21612161
!isConvertibleToString!R)
21622162
{
21632163
// Place outside of @trusted block
@@ -2308,7 +2308,7 @@ Params:
23082308
Throws: $(D FileException) on error.
23092309
*/
23102310
void rmdir(R)(R pathname)
2311-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
2311+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
23122312
!isConvertibleToString!R)
23132313
{
23142314
// Place outside of @trusted block
@@ -2363,14 +2363,14 @@ void rmdir(R)(auto ref R pathname)
23632363
exists).
23642364
+/
23652365
version(StdDdoc) void symlink(RO, RL)(RO original, RL link)
2366-
if ((isInputRange!RO && isSomeChar!(ElementEncodingType!RO) ||
2366+
if ((isInputRange!RO && !isInfinite!RO && isSomeChar!(ElementEncodingType!RO) ||
23672367
isConvertibleToString!RO) &&
2368-
(isInputRange!RL && isSomeChar!(ElementEncodingType!RL) ||
2368+
(isInputRange!RL && !isInfinite!RL && isSomeChar!(ElementEncodingType!RL) ||
23692369
isConvertibleToString!RL));
23702370
else version(Posix) void symlink(RO, RL)(RO original, RL link)
2371-
if ((isInputRange!RO && isSomeChar!(ElementEncodingType!RO) ||
2371+
if ((isInputRange!RO && !isInfinite!RO && isSomeChar!(ElementEncodingType!RO) ||
23722372
isConvertibleToString!RO) &&
2373-
(isInputRange!RL && isSomeChar!(ElementEncodingType!RL) ||
2373+
(isInputRange!RL && !isInfinite!RL && isSomeChar!(ElementEncodingType!RL) ||
23742374
isConvertibleToString!RL))
23752375
{
23762376
static if (isConvertibleToString!RO || isConvertibleToString!RL)
@@ -2452,10 +2452,10 @@ version(Posix) @safe unittest
24522452
$(D FileException) on error.
24532453
+/
24542454
version(StdDdoc) string readLink(R)(R link)
2455-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) ||
2455+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) ||
24562456
isConvertibleToString!R);
24572457
else version(Posix) string readLink(R)(R link)
2458-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) ||
2458+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) ||
24592459
isConvertibleToString!R)
24602460
{
24612461
static if (isConvertibleToString!R)
@@ -3298,8 +3298,8 @@ Params:
32983298
Throws: $(D FileException) on error.
32993299
*/
33003300
void copy(RF, RT)(RF from, RT to, PreserveAttributes preserve = preserveAttributesDefault)
3301-
if (isInputRange!RF && isSomeChar!(ElementEncodingType!RF) && !isConvertibleToString!RF &&
3302-
isInputRange!RT && isSomeChar!(ElementEncodingType!RT) && !isConvertibleToString!RT)
3301+
if (isInputRange!RF && !isInfinite!RF && isSomeChar!(ElementEncodingType!RF) && !isConvertibleToString!RF &&
3302+
isInputRange!RT && !isInfinite!RT && isSomeChar!(ElementEncodingType!RT) && !isConvertibleToString!RT)
33033303
{
33043304
// Place outside of @trusted block
33053305
auto fromz = from.tempCString!FSChar();

std/path.d

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ version (Windows)
195195
from a path.
196196
*/
197197
private auto ltrimDirSeparators(R)(R path)
198-
if (isInputRange!R && isSomeChar!(ElementType!R) ||
198+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementType!R) ||
199199
isNarrowString!R)
200200
{
201201
static if (isRandomAccessRange!R && hasSlicing!R || isNarrowString!R)
@@ -1277,7 +1277,7 @@ auto withDefaultExtension(R, C)(auto ref R path, C[] ext)
12771277
*/
12781278
immutable(ElementEncodingType!(ElementType!Range))[]
12791279
buildPath(Range)(Range segments)
1280-
if (isInputRange!Range && isSomeString!(ElementType!Range))
1280+
if (isInputRange!Range && !isInfinite!Range && isSomeString!(ElementType!Range))
12811281
{
12821282
if (segments.empty) return null;
12831283

@@ -3026,8 +3026,12 @@ int filenameCharCmp(CaseSensitive cs = CaseSensitive.osDefault)(dchar a, dchar b
30263026
*/
30273027
int filenameCmp(CaseSensitive cs = CaseSensitive.osDefault, Range1, Range2)
30283028
(Range1 filename1, Range2 filename2)
3029-
if (isInputRange!Range1 && isSomeChar!(ElementEncodingType!Range1) && !isConvertibleToString!Range1 &&
3030-
isInputRange!Range2 && isSomeChar!(ElementEncodingType!Range2) && !isConvertibleToString!Range2)
3029+
if (isInputRange!Range1 && !isInfinite!Range1 &&
3030+
isSomeChar!(ElementEncodingType!Range1) &&
3031+
!isConvertibleToString!Range1 &&
3032+
isInputRange!Range2 && !isInfinite!Range2 &&
3033+
isSomeChar!(ElementEncodingType!Range2) &&
3034+
!isConvertibleToString!Range2)
30313035
{
30323036
alias C1 = Unqual!(ElementEncodingType!Range1);
30333037
alias C2 = Unqual!(ElementEncodingType!Range2);
@@ -3164,7 +3168,8 @@ int filenameCmp(CaseSensitive cs = CaseSensitive.osDefault, Range1, Range2)
31643168
bool globMatch(CaseSensitive cs = CaseSensitive.osDefault, C, Range)
31653169
(Range path, const(C)[] pattern)
31663170
@safe pure nothrow
3167-
if (isForwardRange!Range && isSomeChar!(ElementEncodingType!Range) && !isConvertibleToString!Range &&
3171+
if (isForwardRange!Range && !isInfinite!Range &&
3172+
isSomeChar!(ElementEncodingType!Range) && !isConvertibleToString!Range &&
31683173
isSomeChar!C && is(Unqual!C == Unqual!(ElementEncodingType!Range)))
31693174
in
31703175
{

0 commit comments

Comments
 (0)