X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/330ca4d434414ab78d490a632c2f198bebbe3f3b..f2ae0da1b5d52489f21d04e3c8c88c2498aea0e7:/src/common/http.cpp diff --git a/src/common/http.cpp b/src/common/http.cpp index 873ac6db43..e238364ece 100644 --- a/src/common/http.cpp +++ b/src/common/http.cpp @@ -159,6 +159,8 @@ wxString wxHTTP::GetCookie(const wxString& cookie) const wxString wxHTTP::GenerateAuthString(const wxString& user, const wxString& pass) const { + // TODO: Use wxBase64Encode() now that we have it instead of reproducing it + static const char *base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; wxString buf; @@ -223,7 +225,7 @@ bool wxHTTP::ParseHeaders() if (m_lastError != wxPROTO_NOERR) return false; - if (line.length() == 0) + if ( line.empty() ) break; wxString left_str = line.BeforeFirst(':'); @@ -249,16 +251,14 @@ bool wxHTTP::Connect(const wxString& host, unsigned short port) wxIPV4address *addr; if (m_addr) { - delete m_addr; - m_addr = NULL; + wxDELETE(m_addr); Close(); } m_addr = addr = new wxIPV4address(); if (!addr->Hostname(host)) { - delete m_addr; - m_addr = NULL; + wxDELETE(m_addr); m_lastError = wxPROTO_NETERR; return false; } @@ -312,7 +312,7 @@ bool wxHTTP::BuildRequest(const wxString& path, wxHTTP_Req req) case wxHTTP_POST: request = wxT("POST"); - if ( GetHeader( wxT("Content-Length") ).IsNull() ) + if ( GetHeader( wxT("Content-Length") ).empty() ) SetHeader( wxT("Content-Length"), wxString::Format( wxT("%lu"), (unsigned long)m_post_buf.Len() ) ); break; @@ -323,7 +323,7 @@ bool wxHTTP::BuildRequest(const wxString& path, wxHTTP_Req req) m_http_response = 0; // If there is no User-Agent defined, define it. - if (GetHeader(wxT("User-Agent")).IsNull()) + if ( GetHeader(wxT("User-Agent")).empty() ) SetHeader(wxT("User-Agent"), wxT("wxWidgets 2.x")); // Send authentication information @@ -346,7 +346,17 @@ bool wxHTTP::BuildRequest(const wxString& path, wxHTTP_Req req) Write("\r\n", 2); if ( req == wxHTTP_POST ) { - Write(m_post_buf.mbc_str(), m_post_buf.Len()); + // Post data can be arbitrary binary data when the "binary" content + // transfer encoding is used so don't assume it's ASCII only or + // NUL-terminated. + { + const wxScopedCharBuffer buf(m_post_buf.To8BitData()); + Write(buf, buf.length()); + } // delete the buffer before modifying the string it points to, it + // wouldn't really be a problem here even if we didn't do this + // because we won't use this buffer again but this will avoid any + // nasty surprises in the future if this code changes + m_post_buf = wxEmptyString; } @@ -430,7 +440,7 @@ protected: size_t wxHTTPStream::OnSysRead(void *buffer, size_t bufsize) { - if (m_httpsize >= 0 && m_read_bytes >= m_httpsize) + if (m_read_bytes >= m_httpsize) { m_lasterror = wxSTREAM_EOF; return 0;