mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	Fixes:
- Add missing virtual destructor on `SSLBackend`. - On Windows, filter out `POLLWRBAND` (one of the new flags added) when calling `WSAPoll`, because despite the constant being defined on Windows, passing it calls `WSAPoll` to yield `EINVAL`. - Reduce OpenSSL version requirement to satisfy CI; I haven't tested whether it actually builds (or runs) against 1.1.1, but if not, I'll figure it out. - Change an instance of memcpy to memmove, even though the arguments cannot overlap, to avoid a [strange GCC error](https://github.com/yuzu-emu/yuzu/pull/10912#issuecomment-1606283351).
This commit is contained in:
		@@ -325,7 +325,7 @@ if (MINGW)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(ENABLE_OPENSSL)
 | 
			
		||||
    find_package(OpenSSL 3.0.0 REQUIRED)
 | 
			
		||||
    find_package(OpenSSL 1.1.1 REQUIRED)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# Please consider this as a stub
 | 
			
		||||
 
 | 
			
		||||
@@ -96,7 +96,7 @@ static void Append(std::vector<u8>& vec, T t) {
 | 
			
		||||
static void AppendNulTerminated(std::vector<u8>& vec, std::string_view str) {
 | 
			
		||||
    size_t off = vec.size();
 | 
			
		||||
    vec.resize(off + str.size() + 1);
 | 
			
		||||
    std::memcpy(vec.data() + off, str.data(), str.size());
 | 
			
		||||
    std::memmove(vec.data() + off, str.data(), str.size());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// We implement gethostbyname using the host's getaddrinfo rather than the
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,7 @@ constexpr Result ResultWouldBlock{ErrorModule::SSLSrv, 204};
 | 
			
		||||
 | 
			
		||||
class SSLConnectionBackend {
 | 
			
		||||
public:
 | 
			
		||||
    virtual ~SSLConnectionBackend() {}
 | 
			
		||||
    virtual void SetSocket(std::shared_ptr<Network::SocketBase> socket) = 0;
 | 
			
		||||
    virtual Result SetHostName(const std::string& hostname) = 0;
 | 
			
		||||
    virtual Result DoHandshake() = 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -97,6 +97,8 @@ bool EnableNonBlock(SOCKET fd, bool enable) {
 | 
			
		||||
 | 
			
		||||
Errno TranslateNativeError(int e) {
 | 
			
		||||
    switch (e) {
 | 
			
		||||
    case 0:
 | 
			
		||||
        return Errno::SUCCESS;
 | 
			
		||||
    case WSAEBADF:
 | 
			
		||||
        return Errno::BADF;
 | 
			
		||||
    case WSAEINVAL:
 | 
			
		||||
@@ -421,9 +423,14 @@ short TranslatePollEvents(PollEvents events) {
 | 
			
		||||
    translate(PollEvents::WrBand, POLLWRBAND);
 | 
			
		||||
 | 
			
		||||
#ifdef _WIN32
 | 
			
		||||
    if (True(events & PollEvents::Pri)) {
 | 
			
		||||
        LOG_WARNING(Service, "Winsock doesn't support POLLPRI");
 | 
			
		||||
    short allowed_events = POLLRDBAND | POLLRDNORM | POLLWRNORM;
 | 
			
		||||
    // Unlike poll on other OSes, WSAPoll will complain if any other flags are set on input.
 | 
			
		||||
    if (result & ~allowed_events) {
 | 
			
		||||
        LOG_DEBUG(Network,
 | 
			
		||||
                  "Removing WSAPoll input events 0x{:x} because Windows doesn't support them",
 | 
			
		||||
                  result & ~allowed_events);
 | 
			
		||||
    }
 | 
			
		||||
    result &= allowed_events;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    UNIMPLEMENTED_IF_MSG((u16)events != 0, "Unhandled guest events=0x{:x}", (u16)events);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user