Bladeren bron

Merge pull request #7 from DasenB/master

catch type conversion error and prevent infinite loop
Yeo Kheng Meng 7 jaren geleden
bovenliggende
commit
581ebc7e10
1 gewijzigde bestanden met toevoegingen van 12 en 1 verwijderingen
  1. 12 1
      Sources/SwiftSerial.swift

+ 12 - 1
Sources/SwiftSerial.swift

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