Changeset 233610 in webkit
- Timestamp:
- Jul 6, 2018 7:24:35 PM (6 years ago)
- Location:
- trunk/Tools
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r233594 r233610 1 2018-07-06 Christopher Reid <chris.reid@sony.com> 2 3 [WinCairo] WebKit MiniBrowser crashes when attempting to navigate to certain URLs 4 https://bugs.webkit.org/show_bug.cgi?id=187167 5 6 Reviewed by Alex Christensen. 7 8 A null byte was written past the end of the buffer causing the crash. 9 Some of the heap allocated buffers were also not getting deleted. 10 11 * MiniBrowser/win/WebKitBrowserWindow.cpp: 12 1 13 2018-07-06 Thibault Saunier <tsaunier@igalia.com> 2 14 -
trunk/Tools/MiniBrowser/win/WebKitBrowserWindow.cpp
r232723 r233610 28 28 #include "MiniBrowserLibResource.h" 29 29 #include <WebKit/WKInspector.h> 30 #include <vector> 30 31 31 32 std::wstring 32 33 createString(WKStringRef wkString) 33 34 { 34 size_t maxSize = WKStringGetMaximumUTF8CStringSize(wkString); 35 char* utf8Buffer = new char[maxSize]; 36 size_t utf8Length = WKStringGetUTF8CString(wkString, utf8Buffer, maxSize); 37 38 int wcharLength = MultiByteToWideChar(CP_UTF8, 0, utf8Buffer, utf8Length, 0, 0); 39 wchar_t* wcharBuffer = new wchar_t[wcharLength + 1]; 40 MultiByteToWideChar(CP_UTF8, 0, utf8Buffer, utf8Length, wcharBuffer, wcharLength); 41 wcharBuffer[wcharLength] = L'\0'; 42 std::wstring dest(wcharBuffer); 43 return dest; 35 size_t maxSize = WKStringGetLength(wkString); 36 37 std::vector<WKChar> wkCharBuffer(maxSize); 38 size_t actualLength = WKStringGetCharacters(wkString, wkCharBuffer.data(), maxSize); 39 return std::wstring(wkCharBuffer.data(), actualLength); 44 40 } 45 41 … … 50 46 } 51 47 52 std:: string toUtf8(const wchar_t* src, size_t srcLength)48 std::vector<char> toNullTerminatedUTF8(const wchar_t* src, size_t srcLength) 53 49 { 54 50 int utf8Length = WideCharToMultiByte(CP_UTF8, 0, src, srcLength, 0, 0, nullptr, nullptr); 55 char* utf8Buffer = new char[utf8Length];51 std::vector<char> utf8Buffer(utf8Length + 1); 56 52 WideCharToMultiByte(CP_UTF8, 0, src, srcLength, 57 utf8Buffer , utf8Length, nullptr, nullptr);53 utf8Buffer.data(), utf8Length, nullptr, nullptr); 58 54 utf8Buffer[utf8Length] = '\0'; 59 std::string dest(utf8Buffer); 60 delete[] utf8Buffer; 61 return dest; 55 return utf8Buffer; 62 56 } 63 57 … … 65 59 createWKString(_bstr_t str) 66 60 { 67 auto utf8 = to Utf8(str, str.length());68 return adoptWK(WKStringCreateWithUTF8CString(utf8. c_str()));61 auto utf8 = toNullTerminatedUTF8(str, str.length()); 62 return adoptWK(WKStringCreateWithUTF8CString(utf8.data())); 69 63 } 70 64 … … 72 66 createWKURL(_bstr_t str) 73 67 { 74 auto utf8 = to Utf8(str, str.length());75 return adoptWK(WKURLCreateWithUTF8CString(utf8. c_str()));68 auto utf8 = toNullTerminatedUTF8(str, str.length()); 69 return adoptWK(WKURLCreateWithUTF8CString(utf8.data())); 76 70 } 77 71
Note: See TracChangeset
for help on using the changeset viewer.