[gnumeric] Names: improve check for circular names.



commit 0cefc1658d3c781616389adbefad6df271d7af8e
Author: Morten Welinder <terra gnome org>
Date:   Fri Jan 1 19:26:17 2016 -0500

    Names: improve check for circular names.

 ChangeLog       |    5 +++++
 NEWS            |    1 +
 src/expr-name.c |   11 ++++++++++-
 3 files changed, 16 insertions(+), 1 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index a1fcb89..b9b2b30 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2016-01-01  Morten Welinder  <terra gnome org>
+
+       * src/expr-name.c (expr_name_add): Improve check for circular name
+       defintion.  Fixes #760046.
+
 2015-12-28  Morten Welinder  <terra gnome org>
 
        * src/ssconvert.c (convert): When separating sheets, move current
diff --git a/NEWS b/NEWS
index 75f970d..c750fd1 100644
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,7 @@ Andreas:
 Morten:
        * Teach ssconvert to split sheets into separate .txt files [#694408]
        * Improve test suite.
+       * Fuzzed file fix.  [#760046]
 
 --------------------------------------------------------------------------
 Gnumeric 1.12.26
diff --git a/src/expr-name.c b/src/expr-name.c
index ae9614b..f17f527 100644
--- a/src/expr-name.c
+++ b/src/expr-name.c
@@ -711,7 +711,16 @@ expr_name_add (GnmParsePos const *pp, char const *name,
 
        fake_name.str = name;
 
-       if (texpr != NULL && expr_name_check_for_loop (name, texpr)) {
+       if (gnm_debug_flag ("names")) {
+               char *str = gnm_expr_top_as_string (texpr, pp, NULL);
+               g_printerr ("Adding Name=[%s] texpr=[%s] stub=[%s]\n",
+                           name, str, stub ? expr_name_name (stub) : "-");
+               g_free (str);
+       }
+
+       if (texpr != NULL &&
+           (expr_name_check_for_loop (name, texpr) ||
+            (stub && expr_name_check_for_loop (expr_name_name (stub), texpr)))) {
                gnm_expr_top_unref (texpr);
                if (error_msg)
                        *error_msg = g_strdup_printf (_("'%s' has a circular reference"), name);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]