[gnome-calculator/gnome-3-12: 2/2] validate returned iterator before passing to get_buffer
- From: Arth Patel <arthpatel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calculator/gnome-3-12: 2/2] validate returned iterator before passing to get_buffer
- Date: Sun, 6 Apr 2014 20:28:10 +0000 (UTC)
commit ea359965648dec337a307d9b283cdbd7769b22c9
Author: Andreas Henriksson <andreas fatal se>
Date: Sun Apr 6 17:40:38 2014 +0200
validate returned iterator before passing to get_buffer
This avoids crashing in get_buffer when get_iter returns empty iter.
Unfortunately get_iter doesn't return any indications if it
succeded (and filled the passed reference with useful information)
or failed (and didn't touch the references iter).
An improvement of the gtksourceview API might be useful here.
For now, work around this by knowing that vala will create an
empty iter used as reference to get_iter and then compare it
against another empty iter to know if get_iter succeded or failed.
https://bugzilla.gnome.org/show_bug.cgi?id=727250
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=742840
src/math-display.vala | 26 ++++++++++++++++++++++++--
1 files changed, 24 insertions(+), 2 deletions(-)
---
diff --git a/src/math-display.vala b/src/math-display.vala
index f4da9b3..e5b347c 100644
--- a/src/math-display.vala
+++ b/src/math-display.vala
@@ -450,7 +450,18 @@ public class FunctionCompletionProvider : CompletionProvider
public override void populate (Gtk.SourceCompletionContext context)
{
- Gtk.TextBuffer text_buffer = context.get_iter ().get_buffer ();
+ Gtk.TextIter emptyiter = {};
+
+ var iter1 = context.get_iter ();
+ // This check is based on the assumption/knowledge
+ // that vala nulls the iter before passing at as a reference.
+ // The gtksourceview api has no way to signal error.
+ if (iter1 == emptyiter)
+ {
+ return;
+ }
+
+ Gtk.TextBuffer text_buffer = iter1.get_buffer ();
MathFunction[] functions = get_matches_for_completion_at_cursor (text_buffer);
List<Gtk.SourceCompletionItem>? proposals = null;
@@ -501,7 +512,18 @@ public class VariableCompletionProvider : CompletionProvider
public override void populate (Gtk.SourceCompletionContext context)
{
- Gtk.TextBuffer text_buffer = context.get_iter ().get_buffer ();
+ Gtk.TextIter emptyiter = {};
+
+ var iter1 = context.get_iter ();
+ // This check is based on the assumption/knowledge
+ // that vala nulls the iter before passing at as a reference.
+ // The gtksourceview api has no way to signal error.
+ if (iter1 == emptyiter)
+ {
+ return;
+ }
+
+ Gtk.TextBuffer text_buffer = iter1.get_buffer ();
string[] variables = get_matches_for_completion_at_cursor (text_buffer, _equation.variables);
List<Gtk.SourceCompletionItem>? proposals = null;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]