]> git.eshelyaron.com Git - emacs.git/commitdiff
src/textprop.c (get_char_property_and_overlay): Fix bug#58479
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 14 Oct 2022 20:28:33 +0000 (16:28 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 14 Oct 2022 20:28:33 +0000 (16:28 -0400)
Correct `get-char-property` which failed to ignore empty overlays.

* src/textprop.c (get_char_property_and_overlay): Make sure the
overlay covers the character.
* test/src/buffer-tests.el (buffer-tests--overlay-bug58479): New test.
* src/buffer.h (buffer_has_overlays): Avoid `interval_tree_size`.

src/buffer.h
src/textprop.c
test/src/buffer-tests.el

index 288acd4f5ee56c5ebce1265b887ab9cba9ed6107..deb0367d9908420318d4ab9d7f03e39d645923cb 100644 (file)
@@ -1275,7 +1275,7 @@ INLINE bool
 buffer_has_overlays (void)
 {
   return current_buffer->overlays
-    && (interval_tree_size (current_buffer->overlays) > 0);
+         && (current_buffer->overlays->root != ITREE_NULL);
 }
 \f
 /* Functions for accessing a character or byte,
index 04fae5280976e7cd10c5952f8cd4d4fadfbe3860..b34246f5bc70fb53f1ffa9931a7ac8324f60637c 100644 (file)
@@ -649,7 +649,8 @@ get_char_property_and_overlay (Lisp_Object position, register Lisp_Object prop,
          Lisp_Object tem = Foverlay_get (node->data, prop);
           struct sortvec *this;
 
-         if (NILP (tem) || (w && ! overlay_matches_window (w, node->data)))
+         if (NILP (tem) || node->end < pos + 1
+             || (w && ! overlay_matches_window (w, node->data)))
            continue;
 
           this = (result == items ? items + 1 : items);
index 9bccbdf2e89a540ca4479d6982dd17ee22395204..3833f88c5c8280600677c4e9a5172482738fb475 100644 (file)
@@ -1340,6 +1340,14 @@ with parameters from the *Messages* buffer modification."
         (overlay-put ov 'value i)))
     (should (eq 9 (get-char-property 1 'value)))))
 
+(ert-deftest buffer-tests--overlay-bug58479 ()
+  (with-temp-buffer
+    (insert "ab")
+    (let* ((pos (+ (point-min) 1))
+           (ol (make-overlay pos pos)))
+      (overlay-put ol 'my-prop 'set)
+      (should (null (get-char-property pos 'my-prop))))))
+
 
 ;; +==========================================================================+
 ;; | Other