Skip to content

Commit ee1bb66

Browse files
authored
Merge pull request #5127 from JackStouffer/isInfinite
Add checks for infinite ranges in many range function signitures
2 parents 53aa2be + 360a42e commit ee1bb66

File tree

4 files changed

+19
-17
lines changed

4 files changed

+19
-17
lines changed

std/conv.d

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1732,7 +1732,7 @@ private T toImpl(T, S)(S value)
17321732

17331733
/// ditto
17341734
private T toImpl(T, S)(S value, uint radix)
1735-
if (isInputRange!S && isSomeChar!(ElementEncodingType!S) &&
1735+
if (isInputRange!S && !isInfinite!S && isSomeChar!(ElementEncodingType!S) &&
17361736
!isExactSomeString!T && is(typeof(parse!T(value, radix))))
17371737
{
17381738
scope(success)

std/file.d

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ Throws: $(LREF FileException) on error.
233233
*/
234234

235235
void[] read(R)(R name, size_t upTo = size_t.max)
236-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
236+
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) && !isInfinite!R &&
237237
!isConvertibleToString!R)
238238
{
239239
static if (isNarrowString!R && is(Unqual!(ElementEncodingType!R) == char))
@@ -420,7 +420,7 @@ decoding error.
420420

421421
S readText(S = string, R)(R name)
422422
if (isSomeString!S &&
423-
(isInputRange!R && isSomeChar!(ElementEncodingType!R) || isSomeString!R) &&
423+
(isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) || isSomeString!R) &&
424424
!isConvertibleToString!R)
425425
{
426426
import std.utf : validate;
@@ -463,7 +463,7 @@ Throws: $(D FileException) on error.
463463
See_also: $(REF toFile, std,stdio)
464464
*/
465465
void write(R)(R name, const void[] buffer)
466-
if ((isInputRange!R && isSomeChar!(ElementEncodingType!R) || isSomeString!R) &&
466+
if ((isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) || isSomeString!R) &&
467467
!isConvertibleToString!R)
468468
{
469469
static if (isNarrowString!R && is(Unqual!(ElementEncodingType!R) == char))
@@ -507,7 +507,7 @@ Params:
507507
Throws: $(D FileException) on error.
508508
*/
509509
void append(R)(R name, const void[] buffer)
510-
if ((isInputRange!R && isSomeChar!(ElementEncodingType!R) || isSomeString!R) &&
510+
if ((isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) || isSomeString!R) &&
511511
!isConvertibleToString!R)
512512
{
513513
static if (isNarrowString!R && is(Unqual!(ElementEncodingType!R) == char))
@@ -625,8 +625,10 @@ version(Windows) private void writeImpl(const(char)[] name, const(FSChar)* namez
625625
* Throws: $(D FileException) on error.
626626
*/
627627
void rename(RF, RT)(RF from, RT to)
628-
if ((isInputRange!RF && isSomeChar!(ElementEncodingType!RF) || isSomeString!RF) && !isConvertibleToString!RF &&
629-
(isInputRange!RT && isSomeChar!(ElementEncodingType!RT) || isSomeString!RT) && !isConvertibleToString!RT)
628+
if ((isInputRange!RF && !isInfinite!RF && isSomeChar!(ElementEncodingType!RF) || isSomeString!RF)
629+
&& !isConvertibleToString!RF &&
630+
(isInputRange!RT && !isInfinite!RT && isSomeChar!(ElementEncodingType!RT) || isSomeString!RT)
631+
&& !isConvertibleToString!RT)
630632
{
631633
// Place outside of @trusted block
632634
auto fromz = from.tempCString!FSChar();
@@ -717,7 +719,7 @@ Params:
717719
Throws: $(D FileException) on error.
718720
*/
719721
void remove(R)(R name)
720-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
722+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
721723
!isConvertibleToString!R)
722724
{
723725
static if (isNarrowString!R && is(Unqual!(ElementEncodingType!R) == char))
@@ -808,7 +810,7 @@ Params:
808810
Throws: $(D FileException) on error (e.g., file not found).
809811
*/
810812
ulong getSize(R)(R name)
811-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
813+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
812814
!isConvertibleToString!R)
813815
{
814816
version(Windows)
@@ -894,7 +896,7 @@ private SysTime statTimeToStdTime(char which)(ref stat_t statbuf)
894896
void getTimes(R)(R name,
895897
out SysTime accessTime,
896898
out SysTime modificationTime)
897-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
899+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
898900
!isConvertibleToString!R)
899901
{
900902
version(Windows)
@@ -1133,7 +1135,7 @@ version(Windows) @system unittest
11331135
void setTimes(R)(R name,
11341136
SysTime accessTime,
11351137
SysTime modificationTime)
1136-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
1138+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
11371139
!isConvertibleToString!R)
11381140
{
11391141
version(Windows)
@@ -1276,7 +1278,7 @@ void setTimes(R)(auto ref R name,
12761278
$(D FileException) if the given file does not exist.
12771279
+/
12781280
SysTime timeLastModified(R)(R name)
1279-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R) &&
1281+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R) &&
12801282
!isConvertibleToString!R)
12811283
{
12821284
version(Windows)
@@ -1349,7 +1351,7 @@ else
13491351
--------------------
13501352
+/
13511353
SysTime timeLastModified(R)(R name, SysTime returnIfMissing)
1352-
if (isInputRange!R && isSomeChar!(ElementEncodingType!R))
1354+
if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R))
13531355
{
13541356
version(Windows)
13551357
{

std/string.d

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2871,7 +2871,7 @@ auto lineSplitter(KeepTerminator keepTerm = No.keepTerminator, Range)(auto ref R
28712871
+/
28722872
auto stripLeft(Range)(Range input)
28732873
if (isForwardRange!Range && isSomeChar!(ElementEncodingType!Range) &&
2874-
!isConvertibleToString!Range)
2874+
!isInfinite!Range && !isConvertibleToString!Range)
28752875
{
28762876
static import std.ascii;
28772877
static import std.uni;

std/utf.d

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2707,7 +2707,7 @@ char[] toUTF8(return out char[4] buf, dchar c) nothrow @nogc @safe pure
27072707
* See_Also:
27082708
* For a lazy, non-allocating version of these functions, see $(LREF byUTF).
27092709
*/
2710-
string toUTF8(S)(S s) if (isInputRange!S && isSomeChar!(ElementEncodingType!S))
2710+
string toUTF8(S)(S s) if (isInputRange!S && !isInfinite!S && isSomeChar!(ElementEncodingType!S))
27112711
{
27122712
return toUTFImpl!string(s);
27132713
}
@@ -2769,7 +2769,7 @@ body
27692769
* See_Also:
27702770
* For a lazy, non-allocating version of these functions, see $(LREF byUTF).
27712771
*/
2772-
wstring toUTF16(S)(S s) if (isInputRange!S && isSomeChar!(ElementEncodingType!S))
2772+
wstring toUTF16(S)(S s) if (isInputRange!S && !isInfinite!S && isSomeChar!(ElementEncodingType!S))
27732773
{
27742774
return toUTFImpl!wstring(s);
27752775
}
@@ -2811,7 +2811,7 @@ wstring toUTF16(S)(S s) if (isInputRange!S && isSomeChar!(ElementEncodingType!S)
28112811
* See_Also:
28122812
* For a lazy, non-allocating version of these functions, see $(LREF byUTF).
28132813
*/
2814-
dstring toUTF32(S)(S s) if (isInputRange!S && isSomeChar!(ElementEncodingType!S))
2814+
dstring toUTF32(S)(S s) if (isInputRange!S && !isInfinite!S && isSomeChar!(ElementEncodingType!S))
28152815
{
28162816
return toUTFImpl!dstring(s);
28172817
}

0 commit comments

Comments
 (0)