소스 검색

Bug fixes from fuzzing SwiftTerm

Miguel de Icaza 4 년 전
부모
커밋
c0175913df
3개의 변경된 파일16개의 추가작업 그리고 4개의 파일을 삭제
  1. 3 0
      Sources/SwiftTerm/Buffer.swift
  2. 4 3
      Sources/SwiftTerm/Terminal.swift
  3. 9 1
      Sources/SwiftTermFuzz/main.swift

+ 3 - 0
Sources/SwiftTerm/Buffer.swift

@@ -69,6 +69,9 @@ class Buffer {
     public var y: Int {
         get { return _y }
         set(newValue) {
+            if newValue < 0 {
+                abort()
+            }
             _y = newValue
         }
     }

+ 4 - 3
Sources/SwiftTerm/Terminal.swift

@@ -1748,7 +1748,7 @@ open class Terminal {
     //
     func cmdCursorPosition (_ pars: [Int], _ collect: cstring)
     {
-        setCursor (col: pars.count >= 2 ? (max (1, pars [1])-1) : 0, row: pars [0] - 1)
+        setCursor (col: pars.count >= 2 ? (max (1, pars [1])-1) : 0, row: pars.count >= 1 ? (max (1, pars [0]) - 1) : 0)
     }
     
     func setCursor (col: Int, row: Int)
@@ -4104,7 +4104,8 @@ open class Terminal {
     {
         updateRange (startLine, scrolling: scrolling, updateDirtySet: false)
         updateRange (endLine, scrolling: scrolling, updateDirtySet: false)
-        for line in startLine...endLine {
+        
+        for line in min(startLine,endLine)...max(startLine,endLine) {
             dirtyLines.insert (line)
         }
     }
@@ -4673,7 +4674,7 @@ open class Terminal {
             buffer.lines.shiftElements (start: buffer.y + buffer.yBase, count: scrollRegionHeight, offset: 1)
             buffer.lines [buffer.y + buffer.yBase] = buffer.getBlankLine (attribute: eraseAttr ())
             updateRange (startLine: buffer.scrollTop, endLine: buffer.scrollBottom)
-        } else {
+        } else if buffer.y > 0 {
             buffer.y -= 1
         }
     }

+ 9 - 1
Sources/SwiftTermFuzz/main.swift

@@ -45,6 +45,14 @@ func testInput (d: Data)
 func testCrashes ()
 {
     let crashes = [
+        "crash-a58b5a38135bd7ffadad8b420ab8dcd0c3e4a1bd",
+        "crash-840102113e655342bfc30d2749406756a6e812d3",
+        "crash-654c8421b816426f584c3347a72cd2e869602ed5",
+        "crash-c6f850474ed073bb5b2e032c13d66819e68acc88",
+        "crash-a18a4cccc2a2b1c6f14ea804d15dd7f93682abf2",
+        "crash-b274a2639cd901a107778760708bb759c52086f8",
+        
+        "crash-9ff2abe9af46be74ca774b8d684e1df0737aa0bf",
         "crash-fb6fa24871a603f7920dd24d467c449ac5b8d893",
         "crash-f8e22628b8a2bb06d06fa9c064fe3a7363c35bde",
         "crash-dc9cf799322b1223cb9a0e40283cb61812d50fbb",
@@ -109,4 +117,4 @@ func testCrashes ()
     print ("Happy!")
 }
 
-// testCrashes()
+ //testCrashes()