Merge pull request #7 from DasenB/master

catch type conversion error and prevent infinite loop
This commit is contained in:
Yeo Kheng Meng
2018-09-16 21:52:48 +08:00
committed by GitHub

View File

@@ -209,6 +209,8 @@ public enum PortError: Int32, Error {
case mustReceiveOrTransmit case mustReceiveOrTransmit
case mustBeOpen case mustBeOpen
case stringsMustBeUTF8 case stringsMustBeUTF8
case unableToConvertByteToCharacter
case deviceNotConnected
} }
public class SerialPort { public class SerialPort {
@@ -370,7 +372,13 @@ extension SerialPort {
guard let fileDescriptor = fileDescriptor else { guard let fileDescriptor = fileDescriptor else {
throw PortError.mustBeOpen throw PortError.mustBeOpen
} }
var s: stat = stat()
fstat(fileDescriptor, &s)
if s.st_nlink != 1 {
throw PortError.deviceNotConnected
}
let bytesRead = read(fileDescriptor, buffer, size) let bytesRead = read(fileDescriptor, buffer, size)
return bytesRead return bytesRead
} }
@@ -424,6 +432,9 @@ extension SerialPort {
let bytesRead = try readBytes(into: buffer, size: 1) let bytesRead = try readBytes(into: buffer, size: 1)
if bytesRead > 0 { if bytesRead > 0 {
if ( buffer[0] > 127) {
throw PortError.unableToConvertByteToCharacter
}
let character = CChar(buffer[0]) let character = CChar(buffer[0])
if character == terminator { if character == terminator {