Skip to content

Commit 79d67fb

Browse files
authored
Fixing EasyCurl AddHeader logic (#922)
1 parent a07bebd commit 79d67fb

1 file changed

Lines changed: 20 additions & 6 deletions

File tree

Source/HTTP/Curl/CurlEasyRequest.cpp

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -222,18 +222,32 @@ void CurlEasyRequest::Fail(HRESULT hr)
222222
HRESULT CurlEasyRequest::AddHeader(char const* name, char const* value) noexcept
223223
{
224224
int required = std::snprintf(nullptr, 0, "%s: %s", name, value);
225-
assert(required > 0);
225+
if (required <= 0)
226+
{
227+
return E_FAIL;
228+
}
226229

227230
m_headersBuffer.emplace_back();
228231
auto& header = m_headersBuffer.back();
229232

230-
header.resize(static_cast<size_t>(required), '\0');
231-
int written = std::snprintf(&header[0], header.size() + 1, "%s: %s", name, value);
232-
assert(written == required);
233-
(void)written;
233+
header.resize(static_cast<size_t>(required) + 1);
234+
int written = std::snprintf(&header[0], header.size(), "%s: %s", name, value);
235+
if (written != required)
236+
{
237+
// snprintf failed or truncated; drop this header so we never expose a corrupt entry
238+
m_headersBuffer.pop_back();
239+
return E_FAIL;
240+
}
241+
header.resize(static_cast<size_t>(written));
234242

235-
m_headers = CURL_CALL(curl_slist_append)(m_headers, header.c_str());
243+
curl_slist* appended = CURL_CALL(curl_slist_append)(m_headers, header.c_str());
244+
if (!appended)
245+
{
246+
m_headersBuffer.pop_back();
247+
return E_OUTOFMEMORY;
248+
}
236249

250+
m_headers = appended;
237251
return S_OK;
238252
}
239253

0 commit comments

Comments
 (0)