[VM / IO] Assert When a socket exception is being thrown with an error code of 0.

TEST=ci

Change-Id: Ie0ea5329dfe0307f47fc04db693dae4e352d0f64
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/239846
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
This commit is contained in:
asiva
2022-04-04 21:34:21 +00:00
committed by Commit Bot
parent d3099e78fe
commit 4f76b9535d
2 changed files with 23 additions and 6 deletions
+12 -1
View File
@@ -914,7 +914,18 @@ void FUNCTION_NAME(Socket_GetError)(Dart_NativeArguments args) {
Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
OSError os_error;
SocketBase::GetError(socket->fd(), &os_error);
Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
if (os_error.code() != 0) {
Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
} else {
Dart_SetReturnValue(args, Dart_Null());
}
}
void FUNCTION_NAME(Socket_Fatal)(Dart_NativeArguments args) {
Dart_Handle msg = Dart_GetNativeArgument(args, 0);
const char* msgStr =
(!Dart_IsNull(msg)) ? DartUtils::GetStringValue(msg) : nullptr;
FATAL("Fatal error in dart:io (socket): %s", msgStr);
}
void FUNCTION_NAME(Socket_GetFD)(Dart_NativeArguments args) {
+11 -5
View File
@@ -877,8 +877,8 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
// the SO_ERROR option at level SOL_SOCKET to determine whether
// connect() completed successfully (SO_ERROR is zero) or
// unsuccessfully.
final OSError osError = socket.nativeGetError();
if (osError.errorCode != 0) {
final osError = socket.nativeGetError();
if (osError != null) {
socket.close();
error ??= osError;
connectNext();
@@ -1404,8 +1404,12 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
if (i == errorEvent) {
if (!isClosing) {
final err = nativeGetError();
reportError(err, null, err.message);
final osError = nativeGetError();
if (osError == null) {
_nativeFatal("Reporting error with OSError code of 0");
} else {
reportError(osError, null, osError.message);
}
}
} else if (!isClosed) {
// If the connection is closed right after it's accepted, there's a
@@ -1688,7 +1692,7 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
@pragma("vm:external-name", "Socket_GetFD")
external int get fd;
@pragma("vm:external-name", "Socket_GetError")
external OSError nativeGetError();
external OSError? nativeGetError();
@pragma("vm:external-name", "Socket_GetOption")
external nativeGetOption(int option, int protocol);
@pragma("vm:external-name", "Socket_GetRawOption")
@@ -1703,6 +1707,8 @@ class _NativeSocket extends _NativeSocketNativeWrapper with _ServiceObject {
@pragma("vm:external-name", "Socket_LeaveMulticast")
external void nativeLeaveMulticast(
Uint8List addr, Uint8List? interfaceAddr, int interfaceIndex);
@pragma("vm:external-name", "Socket_Fatal")
external static void _nativeFatal(msg);
}
class _RawServerSocket extends Stream<RawSocket> implements RawServerSocket {