mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-02-25 07:19:02 +00:00
parent
52f1db7220
commit
4de2cf34e6
2 changed files with 20 additions and 5 deletions
|
@ -77,8 +77,11 @@ bool ParseHttpRange(const char *p, size_t n, long resourcelength,
|
|||
if (n) return false;
|
||||
if (start < 0) return false;
|
||||
if (length < 1) return false;
|
||||
if (start > resourcelength) return false;
|
||||
if (__builtin_add_overflow(start, length, &ending)) return false;
|
||||
if (ending > resourcelength) return false;
|
||||
if (ending > resourcelength) {
|
||||
length = resourcelength - start;
|
||||
}
|
||||
*out_start = start;
|
||||
*out_length = length;
|
||||
return true;
|
||||
|
|
|
@ -46,7 +46,11 @@ TEST(ParseHttpRange, testEmptyRangeOfOneByteFile_itWorks) {
|
|||
|
||||
TEST(ParseHttpRange, testEmptyRangeOfEmptyFile_outOfRange) {
|
||||
long start, length;
|
||||
const char *s = "bytes=0-0";
|
||||
const char *s = "bytes=0-0"; // requesting 1 byte, but have 0
|
||||
EXPECT_TRUE(ParseHttpRange(s, strlen(s), 0, &start, &length));
|
||||
EXPECT_EQ(0, start);
|
||||
EXPECT_EQ(0, length);
|
||||
s = "bytes=1-1"; // but this can't be truncated
|
||||
EXPECT_FALSE(ParseHttpRange(s, strlen(s), 0, &start, &length));
|
||||
EXPECT_EQ(0, start);
|
||||
EXPECT_EQ(0, length);
|
||||
|
@ -94,10 +98,10 @@ TEST(ParseHttpRange, testFromEnd) {
|
|||
|
||||
TEST(ParseHttpRange, testOutOfRange) {
|
||||
long start, length;
|
||||
const char *s = "bytes=0-100";
|
||||
EXPECT_FALSE(ParseHttpRange(s, strlen(s), 100, &start, &length));
|
||||
const char *s = "bytes=0-100"; // requesting 101 bytes, but have 100
|
||||
EXPECT_TRUE(ParseHttpRange(s, strlen(s), 100, &start, &length));
|
||||
EXPECT_EQ(0, start);
|
||||
EXPECT_EQ(0, length);
|
||||
EXPECT_EQ(100, length);
|
||||
}
|
||||
|
||||
TEST(ParseHttpRange, testInvalidRange) {
|
||||
|
@ -131,3 +135,11 @@ TEST(ParseHttpRange, testMultipartRange_notImplemented) {
|
|||
EXPECT_EQ(0, start);
|
||||
EXPECT_EQ(0, length);
|
||||
}
|
||||
|
||||
TEST(ParseHttpRange, rangeTooLong_shortensToActualLength) {
|
||||
long start, length;
|
||||
const char *s = "bytes=0-134217727";
|
||||
EXPECT_TRUE(ParseHttpRange(s, strlen(s), 1000, &start, &length));
|
||||
EXPECT_EQ(0, start);
|
||||
EXPECT_EQ(1000, length);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue