From 301fcc2ab7d6284a1c86f2c4d2b05e05004d258c Mon Sep 17 00:00:00 2001 From: Eivind Kvedalen Date: Fri, 15 Jan 2016 23:37:41 +0100 Subject: [PATCH] Spreadsheet: Issue #2402: Don't allow duplicate aliases. --- src/Mod/Spreadsheet/App/Sheet.cpp | 9 ++++++++- src/Mod/Spreadsheet/App/SheetPyImp.cpp | 13 ++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Mod/Spreadsheet/App/Sheet.cpp b/src/Mod/Spreadsheet/App/Sheet.cpp index b9b3931dd..db9ac92fe 100644 --- a/src/Mod/Spreadsheet/App/Sheet.cpp +++ b/src/Mod/Spreadsheet/App/Sheet.cpp @@ -1130,7 +1130,14 @@ void Sheet::setComputedUnit(CellAddress address, const Base::Unit &unit) void Sheet::setAlias(CellAddress address, const std::string &alias) { - cells.setAlias(address, alias); + const Cell * cell = cells.getValueFromAlias(alias); + + if (cell != 0) + throw Base::Exception("Alias already defined."); + else + cells.setAlias(address, alias); +} + /** * @brief Get cell given an alias string * @param alias Alias for cell diff --git a/src/Mod/Spreadsheet/App/SheetPyImp.cpp b/src/Mod/Spreadsheet/App/SheetPyImp.cpp index aad6887be..f35296845 100644 --- a/src/Mod/Spreadsheet/App/SheetPyImp.cpp +++ b/src/Mod/Spreadsheet/App/SheetPyImp.cpp @@ -441,14 +441,21 @@ PyObject* SheetPy::setAlias(PyObject *args) { CellAddress address; const char * strAddress; - const char * value; + PyObject * value; - if (!PyArg_ParseTuple(args, "ss:setAlias", &strAddress, &value)) + if (!PyArg_ParseTuple(args, "sO:setAlias", &strAddress, &value)) return 0; try { address = stringToAddress(strAddress); - getSheetPtr()->setAlias(address, value); + + if (PyString_Check(value)) + getSheetPtr()->setAlias(address, PyString_AsString(value)); + else if (value == Py_None) + getSheetPtr()->setAlias(address, ""); + else + throw Base::TypeError("String or None expected"); + Py_Return; } catch (const Base::Exception & e) {