diff --git a/lib/codemirror.js b/lib/codemirror.js
index f771880464ef7949d3f59c67cbce7dc9927a8d2e..1d3cb03d184102c50d8c8dfc016c4b1f81730d6e 100644
--- a/lib/codemirror.js
+++ b/lib/codemirror.js
@@ -7622,9 +7622,9 @@
         var spans = line.markedSpans;
         if (spans) for (var i = 0; i < spans.length; i++) {
           var span = spans[i];
-          if (!(lineNo == from.line && from.ch > span.to ||
-                span.from == null && lineNo != from.line||
-                lineNo == to.line && span.from > to.ch) &&
+          if (!(span.to != null && lineNo == from.line && from.ch > span.to ||
+                span.from == null && lineNo != from.line ||
+                span.from != null && lineNo == to.line && span.from > to.ch) &&
               (!filter || filter(span.marker)))
             found.push(span.marker.parent || span.marker);
         }
diff --git a/test/test.js b/test/test.js
index 01efbce86662c1e2aecc9445eef1e68177b4001c..82ee231e35e2d0dbe96205475b6348f6774b3cde 100644
--- a/test/test.js
+++ b/test/test.js
@@ -509,6 +509,13 @@ testCM("markClearBetween", function(cm) {
   eq(cm.findMarksAt(Pos(1, 1)).length, 0);
 });
 
+testCM("findMarksMiddle", function(cm) {
+  var mark = cm.markText(Pos(1, 1), Pos(3, 1));
+  var found = cm.findMarks(Pos(2, 1), Pos(2, 2));
+  eq(found.length, 1);
+  eq(found[0], mark);
+}, {value: "line 0\nline 1\nline 2\nline 3"});
+
 testCM("deleteSpanCollapsedInclusiveLeft", function(cm) {
   var from = Pos(1, 0), to = Pos(1, 1);
   var m = cm.markText(from, to, {collapsed: true, inclusiveLeft: true});