From 3fae8ccfbcc57735407e051786545f7f44429852 Mon Sep 17 00:00:00 2001 From: Aviv Palivoda Date: Fri, 8 Mar 2019 16:19:26 +0200 Subject: [PATCH] Handle unknown socket kind --- tests/snippets/stdlib_socket.py | 3 +++ vm/src/stdlib/socket.rs | 10 +++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/tests/snippets/stdlib_socket.py b/tests/snippets/stdlib_socket.py index 7fb936e3c..6428f5257 100644 --- a/tests/snippets/stdlib_socket.py +++ b/tests/snippets/stdlib_socket.py @@ -77,3 +77,6 @@ sock3.close() ### Errors with assertRaises(OSError): socket.socket(100, socket.SOCK_STREAM) + +with assertRaises(OSError): + socket.socket(socket.AF_INET, 1000) diff --git a/vm/src/stdlib/socket.rs b/vm/src/stdlib/socket.rs index 93a13c100..6c2fae51a 100644 --- a/vm/src/stdlib/socket.rs +++ b/vm/src/stdlib/socket.rs @@ -41,11 +41,11 @@ enum SocketKind { } impl SocketKind { - fn from_i32(value: i32) -> SocketKind { + fn from_i32(vm: &mut VirtualMachine, value: i32) -> Result { match value { - 1 => SocketKind::Stream, - 2 => SocketKind::Dgram, - _ => panic!("Unknown value: {}", value), + 1 => Ok(SocketKind::Stream), + 2 => Ok(SocketKind::Dgram), + _ => Err(vm.new_os_error(format!("Unknown socket kind value: {}", value))), } } } @@ -148,7 +148,7 @@ fn socket_new(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { let address_family = AddressFamily::from_i32(vm, objint::get_value(family_int).to_i32().unwrap())?; - let kind = SocketKind::from_i32(objint::get_value(kind_int).to_i32().unwrap()); + let kind = SocketKind::from_i32(vm, objint::get_value(kind_int).to_i32().unwrap())?; let socket = RefCell::new(Socket::new(address_family, kind));