diff --git a/companion/releasenotes.txt b/companion/releasenotes.txt
index 03cd9ad05..fd46126be 100644
--- a/companion/releasenotes.txt
+++ b/companion/releasenotes.txt
@@ -12,6 +12,7 @@
File path issue in Taranis simulator function findTrueFileName() on Windows (#2301)
Added simulator volume gain setting (#2260)
Added GPS glitch filtering and Latitude/Longitude position synchronization to Google Earth export (#2326)
+Fixed a rare program crash when editing Input for 9X radio (#2420)
@@ -320,4 +321,4 @@
Try to reduce modeledit window form MAC
Wrong init of RF-Module data
Read flash from TX didn't worked for Taranis
-
\ No newline at end of file
+
diff --git a/companion/src/modeledit/expodialog.cpp b/companion/src/modeledit/expodialog.cpp
index d64c0887c..10007c394 100644
--- a/companion/src/modeledit/expodialog.cpp
+++ b/companion/src/modeledit/expodialog.cpp
@@ -2,7 +2,8 @@
#include "ui_expodialog.h"
#include "helpers.h"
-ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, GeneralSettings & generalSettings, Firmware * firmware, char * inputName) :
+ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, GeneralSettings & generalSettings,
+ Firmware * firmware, QString & inputName) :
QDialog(parent),
ui(new Ui::ExpoDialog),
model(model),
@@ -62,6 +63,8 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
ui->inputName->setMaxLength(4);
populateSourceCB(ui->sourceCB, ed->srcRaw, generalSettings, &model, POPULATE_NONE | POPULATE_SOURCES | POPULATE_SWITCHES | POPULATE_TRIMS | POPULATE_TELEMETRY);
ui->sourceCB->removeItem(0);
+ ui->inputName->setValidator(new QRegExpValidator(rx, this));
+ ui->inputName->setText(inputName);
}
else {
ui->inputNameLabel->hide();
@@ -87,9 +90,6 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
ui->lineName->setMaxLength(expolength);
}
- ui->inputName->setValidator(new QRegExpValidator(rx, this));
- ui->inputName->setText(inputName);
-
ui->lineName->setValidator(new QRegExpValidator(rx, this));
ui->lineName->setText(ed->name);
@@ -153,7 +153,8 @@ void ExpoDialog::valuesChanged()
ed->mode = ui->sideCB->currentIndex() + 1;
strcpy(ed->name, ui->lineName->text().toAscii().data());
- strcpy(inputName, ui->inputName->text().toAscii().data());
+ if (firmware->getCapability(VirtualInputs))
+ inputName = ui->inputName->text();
ed->phases=0;
for (int i=8; i>=0 ; i--) {
diff --git a/companion/src/modeledit/expodialog.h b/companion/src/modeledit/expodialog.h
index 5f683bf69..b4b40f803 100644
--- a/companion/src/modeledit/expodialog.h
+++ b/companion/src/modeledit/expodialog.h
@@ -14,7 +14,8 @@ namespace Ui {
class ExpoDialog : public QDialog {
Q_OBJECT
public:
- ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expodata, GeneralSettings & generalSettings, Firmware * firmware, char * inputName);
+ ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expodata, GeneralSettings & generalSettings,
+ Firmware * firmware, QString & inputName);
~ExpoDialog();
protected:
@@ -30,7 +31,7 @@ class ExpoDialog : public QDialog {
GeneralSettings & generalSettings;
Firmware * firmware;
ExpoData * ed;
- char * inputName;
+ QString & inputName;
GVarGroup * gvWeightGroup;
GVarGroup * gvOffsetGroup;
CurveGroup * curveGroup;
diff --git a/companion/src/modeledit/inputs.cpp b/companion/src/modeledit/inputs.cpp
index a3b7dcc10..9d5580672 100644
--- a/companion/src/modeledit/inputs.cpp
+++ b/companion/src/modeledit/inputs.cpp
@@ -216,19 +216,18 @@ void InputsPanel::gm_openExpo(int index)
if(index<0 || index>=C9X_MAX_EXPOS) return;
ExpoData mixd(model->expoData[index]);
- char inputName[4+1];
emit modified();
update();
-
- if (firmware->getCapability(VirtualInputs)) {
- strcpy(inputName, model->inputNames[mixd.chn]);
- }
+
+ QString inputName;
+ if (firmware->getCapability(VirtualInputs))
+ inputName = model->inputNames[mixd.chn];
ExpoDialog *g = new ExpoDialog(this, *model, &mixd, generalSettings, firmware, inputName);
if (g->exec()) {
model->expoData[index] = mixd;
if (firmware->getCapability(VirtualInputs))
- strcpy(model->inputNames[mixd.chn], inputName);
+ strncpy(model->inputNames[mixd.chn], inputName.toAscii().data(), 4);
emit modified();
update();
}