Merge branch 'appveyor-webrequest' of https://github.com/MaartenBent/wxWidgets

Fix bug in wxWebRequest data upload code in WinHTTP implementation.

See https://github.com/wxWidgets/wxWidgets/pull/2199
This commit is contained in:
Vadim Zeitlin
2021-01-31 14:08:48 +01:00
2 changed files with 14 additions and 7 deletions

View File

@@ -184,8 +184,12 @@ wxWebRequestWinHTTP::HandleCallback(DWORD dwInternetStatus,
break; break;
case WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE: case WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE:
{
DWORD written = *(reinterpret_cast<LPDWORD>(lpvStatusInformation));
m_dataWritten += written;
WriteData(); WriteData();
break; break;
}
case WINHTTP_CALLBACK_STATUS_REQUEST_ERROR: case WINHTTP_CALLBACK_STATUS_REQUEST_ERROR:
{ {
@@ -218,8 +222,8 @@ void wxWebRequestWinHTTP::WriteData()
} }
m_dataWriteBuffer.Clear(); m_dataWriteBuffer.Clear();
m_dataWriteBuffer.GetWriteBuf(dataWriteSize); void* buffer = m_dataWriteBuffer.GetWriteBuf(dataWriteSize);
m_dataStream->Read(m_dataWriteBuffer.GetData(), dataWriteSize); m_dataStream->Read(buffer, dataWriteSize);
if ( !::WinHttpWriteData if ( !::WinHttpWriteData
( (
@@ -230,10 +234,7 @@ void wxWebRequestWinHTTP::WriteData()
) ) ) )
{ {
SetFailedWithLastError(); SetFailedWithLastError();
return;
} }
m_dataWritten += dataWriteSize;
} }
void wxWebRequestWinHTTP::CreateResponse() void wxWebRequestWinHTTP::CreateResponse()

View File

@@ -133,6 +133,14 @@ public:
REQUIRE( request.GetState() == wxWebRequest::State_Idle ); REQUIRE( request.GetState() == wxWebRequest::State_Idle );
request.Start(); request.Start();
RunLoopWithTimeout(); RunLoopWithTimeout();
if ( request.GetState() != requiredState )
{
errorDescription.Trim();
if ( !errorDescription.empty() )
WARN("Error: " << errorDescription);
}
REQUIRE( request.GetState() == requiredState ); REQUIRE( request.GetState() == requiredState );
if (requiredStatus) if (requiredStatus)
CHECK( request.GetResponse().GetStatus() == requiredStatus ); CHECK( request.GetResponse().GetStatus() == requiredStatus );
@@ -378,8 +386,6 @@ TEST_CASE_METHOD(RequestFixture,
request.Start(); request.Start();
request.Cancel(); request.Cancel();
RunLoopWithTimeout(); RunLoopWithTimeout();
if ( !errorDescription.empty() )
INFO( "Error:" << errorDescription );
REQUIRE( request.GetState() == wxWebRequest::State_Cancelled ); REQUIRE( request.GetState() == wxWebRequest::State_Cancelled );
} }