From d0eb810de33ecdf46f52fa6bd01a03296d7e2bae Mon Sep 17 00:00:00 2001 From: Geoffroy Jamgotchian Date: Tue, 4 Jun 2024 10:58:03 +0200 Subject: [PATCH] Fix crash when creating a feeder bay using an empty dataframe (#755) Signed-off-by: Geoffroy Jamgotchian --- .../network/modifications/CreateFeederBay.java | 9 ++++++--- tests/test_network_modification.py | 10 +++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/java/src/main/java/com/powsybl/dataframe/network/modifications/CreateFeederBay.java b/java/src/main/java/com/powsybl/dataframe/network/modifications/CreateFeederBay.java index 66a7a780b2..95d0b8cbab 100644 --- a/java/src/main/java/com/powsybl/dataframe/network/modifications/CreateFeederBay.java +++ b/java/src/main/java/com/powsybl/dataframe/network/modifications/CreateFeederBay.java @@ -47,8 +47,11 @@ public List> getMetadata(DataframeElementType elementType) @Override public void applyModification(Network network, List dataframes, boolean throwException, ReportNode reportNode) { - PyPowsyblApiHeader.ElementType elementType = PyPowsyblApiHeader.ElementType.valueOf(dataframes.get(0).getStrings("feeder_type").get(0)); - DataframeElementType type = convert(elementType); - NetworkElementAdders.addElementsWithBay(type, network, dataframes, throwException, reportNode); + UpdatingDataframe firstUpdatingDataframe = dataframes.get(0); + if (firstUpdatingDataframe.getRowCount() > 0) { + PyPowsyblApiHeader.ElementType elementType = PyPowsyblApiHeader.ElementType.valueOf(firstUpdatingDataframe.getStrings("feeder_type").get(0)); + DataframeElementType type = convert(elementType); + NetworkElementAdders.addElementsWithBay(type, network, dataframes, throwException, reportNode); + } } } diff --git a/tests/test_network_modification.py b/tests/test_network_modification.py index b92d9a5604..1a0152a95d 100644 --- a/tests/test_network_modification.py +++ b/tests/test_network_modification.py @@ -1771,6 +1771,10 @@ def test_exception_create_element_with_bay(): assert exc.match('Bus or busbar section S1VL2_BBS not found') - - - +def test_empty_load_bay_segv(): + n = pp.network.create_four_substations_node_breaker_network() + assert len(n.get_loads()) == 6 + df = pd.DataFrame(index=[], columns=["id", "p0", "q0", "bus_or_busbar_section_id", "position_order"], + data=[]) + pp.network.create_load_bay(network=n, df=df, raise_exception=True) + assert len(n.get_loads()) == 6 # no crash and no network change