[gnumeric] xml: fix parsing problem.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] xml: fix parsing problem.
- Date: Fri, 12 Jul 2013 17:36:20 +0000 (UTC)
commit 383f59e86d325fd609ba2211f4b524983fdf55a6
Author: Morten Welinder <terra gnome org>
Date: Fri Jul 12 13:35:23 2013 -0400
xml: fix parsing problem.
Things could get confused when different sheets had different sizes.
ChangeLog | 7 +++++++
NEWS | 3 +++
src/expr.c | 10 +++++++++-
3 files changed, 19 insertions(+), 1 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index f491206..3605fe9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-07-12 Morten Welinder <terra gnome org>
+
+ * src/expr.c (gnm_expr_range_op): When constructing a range, make
+ sure it falls within the sheet.
+ (gnm_expr_new_range_ctor): Don't optimize to range if the two
+ parts are on different sheets. Fixes #704109.
+
2013-07-10 Morten Welinder <terra gnome org>
* configure.ac: Post-release bump.
diff --git a/NEWS b/NEWS
index a2377c7..e5eae63 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,9 @@ Gnumeric 1.12.5
Andreas:
* Improve ODF import of cells with links. [#704022]
+Morten:
+ * Fix crazy parsing problem. [#704109]
+
--------------------------------------------------------------------------
Gnumeric 1.12.4
diff --git a/src/expr.c b/src/expr.c
index fe5d5b6..4ce80fb 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -360,6 +360,7 @@ GnmExpr const *
gnm_expr_new_range_ctor (GnmExpr const *l, GnmExpr const *r)
{
GnmValue *v;
+ const GnmCellRef *lr, *rr;
g_return_val_if_fail (l != NULL, NULL);
g_return_val_if_fail (r != NULL, NULL);
@@ -369,7 +370,12 @@ gnm_expr_new_range_ctor (GnmExpr const *l, GnmExpr const *r)
if (GNM_EXPR_GET_OPER (r) != GNM_EXPR_OP_CELLREF)
goto fallback;
- v = value_new_cellrange_unsafe (&l->cellref.ref, &r->cellref.ref);
+ lr = &l->cellref.ref;
+ rr = &r->cellref.ref;
+ if (lr->sheet != rr->sheet)
+ goto fallback;
+
+ v = value_new_cellrange_unsafe (lr, rr);
gnm_expr_free (l);
gnm_expr_free (r);
return gnm_expr_new_constant (v);
@@ -1183,6 +1189,8 @@ gnm_expr_range_op (GnmExpr const *expr, GnmEvalPos const *ep,
switch (GNM_EXPR_GET_OPER (expr)) {
case GNM_EXPR_OP_RANGE_CTOR:
res_range = range_union (&a_range, &b_range);
+ /* b_range might be on a bigger sheet. */
+ range_ensure_sanity (&res_range, a_start);
break;
case GNM_EXPR_OP_INTERSECT:
/* 3D references not allowed. */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]