[gnumeric] lpsolve: fix problem with parsing input range.



commit 092ab881e720975ea7699fb4b9ba1ba0b6f8739c
Author: Morten Welinder <terra gnome org>
Date:   Tue Oct 27 19:00:46 2009 -0400

    lpsolve: fix problem with parsing input range.

 plugins/lpsolve/lpsolve-write.c |   29 +++++++++++++++++++++++------
 1 files changed, 23 insertions(+), 6 deletions(-)
---
diff --git a/plugins/lpsolve/lpsolve-write.c b/plugins/lpsolve/lpsolve-write.c
index 54ce554..217fdd9 100644
--- a/plugins/lpsolve/lpsolve-write.c
+++ b/plugins/lpsolve/lpsolve-write.c
@@ -26,6 +26,7 @@
 #include <cell.h>
 #include <solver.h>
 #include <ranges.h>
+#include <expr.h>
 #include <parse-util.h>
 #include <gutils.h>
 #include <goffice/goffice.h>
@@ -157,17 +158,33 @@ lpsolve_create_program (Sheet *sheet, GError **err)
 	/* This is insane -- why do we keep a string?  */
 	{
 		GnmEvalPos ep;
-		GnmRange r;
-		GnmValue *vr;
+		GnmParsePos pp;
+		GnmValue *vr = NULL;
+		GnmExprTop const *texpr;
+		GnmExprParseFlags flags =
+			GNM_EXPR_PARSE_FORCE_ABSOLUTE_REFERENCES |
+			GNM_EXPR_PARSE_UNKNOWN_NAMES_ARE_INVALID;
 
 		g_slist_free (sp->input_cells);
 		sp->input_cells = NULL;
 
-		if (!range_parse (&r, sp->input_entry_str,
-				  gnm_sheet_get_size (sheet)))
+		parse_pos_init_sheet (&pp, sheet);
+		texpr = gnm_expr_parse_str (sp->input_entry_str, &pp,
+					    flags, sheet->convs,
+					    NULL);
+		if (texpr) {
+			vr = gnm_expr_top_get_range (texpr);
+			gnm_expr_top_unref (texpr);
+		}
+
+		if (!vr) {
+			g_set_error (err,
+				     go_error_invalid (),
+				     0,
+				     _("Invalid solver input range."));
 			goto fail;
+		}
 
-		vr = value_new_cellrange_r (sheet, &r);
 		eval_pos_init_sheet (&ep, sheet);
 		workbook_foreach_cell_in_range (&ep, vr, CELL_ITER_ALL,
 						cb_grab_cells,
@@ -332,7 +349,7 @@ lpsolve_file_save (GOFileSaver const *fs, GOIOContext *io_context,
 
 	if (!prg) {
 		go_cmd_context_error_import (GO_CMD_CONTEXT (io_context),
-					     err->message);
+					     err ? err->message : "?");
 		g_error_free (err);
 		return;
 	}



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