Skip to content

Commit e4fdbbe

Browse files
author
Bret Ambrose
committed
Seeking zero from the end of a PreallocatedStreamBuf should work properly
1 parent 08f9866 commit e4fdbbe

File tree

3 files changed

+21
-33
lines changed

3 files changed

+21
-33
lines changed

aws-cpp-sdk-core-tests/utils/stream/PreallocatedStreamBufTest.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,21 @@ TEST(PreallocatedStreamBufTest, TestStreamWriteHonorsSizeLimitShorterThanBuffer)
162162
buffer[sizeof(bufferStr) - 5] = 0;
163163
ioStream.write(bufferStr, sizeof(bufferStr));
164164
ASSERT_STREQ(shortenedBuffer, (const char*)buffer.GetUnderlyingData());
165-
}
165+
}
166+
167+
TEST(PreallocatedStreamBufTest, TestZeroLengthSeekFromEnd)
168+
{
169+
Array<uint8_t> buffer((uint8_t*)bufferStr, sizeof(bufferStr));
170+
PreallocatedStreamBuf streamBuf(&buffer, buffer.GetLength());
171+
Aws::IOStream ioStream(&streamBuf);
172+
173+
ioStream.seekg(0, std::ios_base::end);
174+
ASSERT_FALSE(ioStream.eof());
175+
176+
// attempting to read a character should fail and hit eof since we're one position after
177+
// the last character
178+
char ch = 0;
179+
ioStream.get(ch);
180+
// could check ch == 0 but I don't think the standard guarantees that
181+
ASSERT_TRUE(ioStream.eof());
182+
}

aws-cpp-sdk-core/source/utils/stream/PreallocatedStreamBuf.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ namespace Aws
6060

6161
PreallocatedStreamBuf::pos_type PreallocatedStreamBuf::seekpos(pos_type pos, std::ios_base::openmode which)
6262
{
63-
assert(static_cast<size_t>(pos) < m_lengthToRead);
64-
if (static_cast<size_t>(pos) >= m_lengthToRead)
63+
assert(static_cast<size_t>(pos) <= m_lengthToRead);
64+
if (static_cast<size_t>(pos) > m_lengthToRead)
6565
{
6666
return pos_type(off_type(-1));
6767
}

aws-cpp-sdk-transfer-tests/TransferTests.cpp

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -346,12 +346,6 @@ TEST_F(TransferTests, TransferManager_SinglePartUploadTest)
346346

347347
TransferManagerConfiguration transferManagerConfig;
348348
transferManagerConfig.s3Client = m_s3Client;
349-
transferManagerConfig.uploadProgressCallback =
350-
[](const TransferManager*, const TransferHandle& handle)
351-
{ std::cout << "Upload Progress: " << handle.GetBytesTransferred() << " of " << handle.GetBytesTotalSize() << " bytes\n";};
352-
transferManagerConfig.downloadProgressCallback =
353-
[](const TransferManager*, const TransferHandle& handle)
354-
{ std::cout << "Download Progress: " << handle.GetBytesTransferred() << " of " << handle.GetBytesTotalSize() << " bytes\n"; };
355349
TransferManager transferManager(transferManagerConfig);
356350

357351
// Test with default behavior of using file name as key
@@ -506,12 +500,7 @@ TEST_F(TransferTests, TransferManager_MediumTest)
506500

507501
TransferManagerConfiguration transferManagerConfig;
508502
transferManagerConfig.s3Client = m_s3Client;
509-
transferManagerConfig.uploadProgressCallback =
510-
[](const TransferManager*, const TransferHandle& handle)
511-
{ std::cout << "Upload Progress: " << handle.GetBytesTransferred() << " of " << handle.GetBytesTotalSize() << " bytes\n"; };
512-
transferManagerConfig.downloadProgressCallback =
513-
[](const TransferManager*, const TransferHandle& handle)
514-
{ std::cout << "Download Progress: " << handle.GetBytesTransferred() << " of " << handle.GetBytesTotalSize() << " bytes\n"; };
503+
515504
TransferManager transferManager(transferManagerConfig);
516505
std::shared_ptr<TransferHandle> requestPtr = transferManager.UploadFile(MEDIUM_TEST_FILE_NAME, GetTestBucketName(), MEDIUM_FILE_KEY, "text/plain", Aws::Map<Aws::String, Aws::String>());
517506

@@ -582,12 +571,6 @@ TEST_F(TransferTests, TransferManager_BigTest)
582571

583572
TransferManagerConfiguration transferManagerConfig;
584573
transferManagerConfig.s3Client = m_s3Client;
585-
transferManagerConfig.uploadProgressCallback =
586-
[](const TransferManager*, const TransferHandle& handle)
587-
{ std::cout << "Upload Progress: " << handle.GetBytesTransferred() << " of " << handle.GetBytesTotalSize() << " bytes\n"; };
588-
transferManagerConfig.downloadProgressCallback =
589-
[](const TransferManager*, const TransferHandle& handle)
590-
{ std::cout << "Download Progress: " << handle.GetBytesTransferred() << " of "<< handle.GetBytesTotalSize() << " bytes\n"; };
591574

592575
TransferManager transferManager(transferManagerConfig);
593576
std::shared_ptr<TransferHandle> requestPtr = transferManager.UploadFile(BIG_TEST_FILE_NAME, GetTestBucketName(), BIG_FILE_KEY, "text/plain", Aws::Map<Aws::String, Aws::String>());
@@ -672,12 +655,6 @@ TEST_F(TransferTests, TransferManager_CancelAndRetryTest)
672655
}
673656
}
674657
};
675-
transferManagerConfig.uploadProgressCallback =
676-
[](const TransferManager*, const TransferHandle& handle)
677-
{ std::cout << "Upload Progress: " << handle.GetBytesTransferred() << " of " << handle.GetBytesTotalSize() << " bytes\n"; };
678-
transferManagerConfig.downloadProgressCallback =
679-
[](const TransferManager*, const TransferHandle& handle)
680-
{ std::cout << "Download Progress: " << handle.GetBytesTransferred() << " of " << handle.GetBytesTotalSize() << " bytes\n"; };
681658

682659
transferManagerConfig.s3Client = m_s3Client;
683660
TransferManager transferManager(transferManagerConfig);
@@ -774,12 +751,6 @@ TEST_F(TransferTests, TransferManager_AbortAndRetryTest)
774751
}
775752
}
776753
};
777-
transferManagerConfig.uploadProgressCallback =
778-
[](const TransferManager*, const TransferHandle& handle)
779-
{ std::cout << "Upload Progress: " << handle.GetBytesTransferred() << " of " << handle.GetBytesTotalSize() << " bytes\n"; };
780-
transferManagerConfig.downloadProgressCallback =
781-
[](const TransferManager*, const TransferHandle& handle)
782-
{ std::cout << "Download Progress: " << handle.GetBytesTransferred() << " of " << handle.GetBytesTotalSize() << " bytes\n"; };
783754

784755
transferManagerConfig.s3Client = m_s3Client;
785756
TransferManager transferManager(transferManagerConfig);

0 commit comments

Comments
 (0)