summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Laß2021-05-13 22:13:59 +0200
committerMichael Laß2021-05-13 22:13:59 +0200
commit97fcdf4c46b570e55abc4c64483d0264ac9b28c4 (patch)
tree0764d9a60902b704852f74cf8e4e4624bd4ddc18
parentfce13ea8286c4eef4c5853de95a84005ac304d60 (diff)
downloadaur-97fcdf4c46b570e55abc4c64483d0264ac9b28c4.tar.gz
Add a couple of patches (mainly stability fixes)
-rw-r--r--.SRCINFO10
-rw-r--r--0001-mot_dir-changes.patch150
-rw-r--r--0002-padHandler-verify-data-length.patch42
-rw-r--r--0003-padHandler-correct-valid-range-for-last.patch30
-rw-r--r--0004-hackrf-update-gain-display-when-restoring-settings.patch56
-rw-r--r--PKGBUILD22
6 files changed, 306 insertions, 4 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 23f521516d8d..15b6660bcbff 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = qt-dab
pkgdesc = Software DAB decoder for use with various SDR devices
pkgver = 3.72
- pkgrel = 1
+ pkgrel = 2
url = https://www.sdr-j.tk/
arch = x86_64
license = GPL2
@@ -19,7 +19,15 @@ pkgbase = qt-dab
optdepends = rtl-sdr: Support for RTL-SDR
optdepends = libsdrplay: Support for SDRplay
source = https://github.com/JvanKatwijk/qt-dab/archive/refs/tags/Qt-DAB3.72.tar.gz
+ source = 0001-mot_dir-changes.patch
+ source = 0002-padHandler-verify-data-length.patch
+ source = 0003-padHandler-correct-valid-range-for-last.patch
+ source = 0004-hackrf-update-gain-display-when-restoring-settings.patch
sha256sums = 8e90bd7e35a2fb6e3f3f3aee61ee65d3c37ead5731ba0146fa29883685167ed4
+ sha256sums = f4f60612d82afffbbd99b5549a4e4ddcd9745e046da9974fe373091251ace85c
+ sha256sums = f20e66cd0a2f29ee90e20bcdf8aa6ca5b2f06e554e3373ef9118823d5b2ca9d6
+ sha256sums = 170fe2ce981e1d7bc4a7ea5924862887a5c752822375887935f67ea5c34341d6
+ sha256sums = 09ee42c73a928688e710d961c16d46f5d804fb00f7037e24109823b0898d22d4
pkgname = qt-dab
diff --git a/0001-mot_dir-changes.patch b/0001-mot_dir-changes.patch
new file mode 100644
index 000000000000..b0ccae1503d8
--- /dev/null
+++ b/0001-mot_dir-changes.patch
@@ -0,0 +1,150 @@
+From c59f0f924e5808b9f5d9ad9a223c22d22c254872 Mon Sep 17 00:00:00 2001
+From: JvanKatwijk <J.vanKatwijk@gmail.com>
+Date: Thu, 13 May 2021 12:11:32 +0200
+Subject: [PATCH 1/4] mot_dir changes
+
+---
+ dab-maxi/main.cpp | 6 +++---
+ includes/backend/data/mot/mot-dir.h | 5 +++--
+ src/backend/data/mot/mot-dir.cpp | 27 ++++++++++++++-------------
+ src/backend/data/mot/mot-handler.cpp | 3 ++-
+ 4 files changed, 22 insertions(+), 19 deletions(-)
+
+diff --git a/dab-maxi/main.cpp b/dab-maxi/main.cpp
+index 26ef9d4..c303ed6 100755
+--- a/dab-maxi/main.cpp
++++ b/dab-maxi/main.cpp
+@@ -160,7 +160,7 @@ int fmFrequency = 110000;
+ }
+
+ void setTranslator (QString Language) {
+-QTranslator Translator;
++QTranslator *Translator = new QTranslator;
+
+ // German is special (as always)
+ if ((Language == "de_AT") || (Language == "de_CH"))
+@@ -168,9 +168,9 @@ QTranslator Translator;
+ //
+ // what about Dutch?
+ bool TranslatorLoaded =
+- Translator. load (QString(":/i18n/") + Language);
++ Translator -> load (QString(":/i18n/") + Language);
+ qDebug() << "main:" << "Set language" << Language;
+- QCoreApplication::installTranslator (&Translator);
++ QCoreApplication::installTranslator (Translator);
+
+ if (!TranslatorLoaded) {
+ qDebug() << "main:" << "Error while loading language specifics" << Language << "use English \"en_GB\" instead";
+diff --git a/includes/backend/data/mot/mot-dir.h b/includes/backend/data/mot/mot-dir.h
+index a549898..6a43cf7 100755
+--- a/includes/backend/data/mot/mot-dir.h
++++ b/includes/backend/data/mot/mot-dir.h
+@@ -28,6 +28,7 @@
+
+ #include "mot-object.h"
+ #include <QString>
++#include <vector>
+ class RadioInterface;
+
+ class motDirectory {
+@@ -52,7 +53,7 @@ private:
+ uint16_t transportId;
+
+ RadioInterface *myRadioInterface;
+- uint8_t *dir_segments;
++ std::vector<uint8_t> dir_segments;
+ bool marked [512];
+ int16_t dir_segmentSize;
+ int16_t num_dirSegments;
+@@ -63,7 +64,7 @@ private:
+ uint16_t transportId;
+ motObject *motSlide;
+ } motComponentType;
+- motComponentType *motComponents;
++ std::vector<motComponentType> motComponents;
+ };
+
+ #endif
+diff --git a/src/backend/data/mot/mot-dir.cpp b/src/backend/data/mot/mot-dir.cpp
+index 8f1c2c0..59cd71e 100755
+--- a/src/backend/data/mot/mot-dir.cpp
++++ b/src/backend/data/mot/mot-dir.cpp
+@@ -43,22 +43,23 @@ int16_t i;
+ this -> dir_segmentSize = segmentSize;
+ fprintf (stderr, "dirSize %d, numObjects %d, segmentSize %d\n",
+ dirSize, objects, segmentSize);
+- dir_segments = new uint8_t [dirSize];
+- motComponents = new motComponentType [objects];
+- for (i = 0; i < objects; i ++)
++ dir_segments. resize (dirSize);
++ motComponents. resize (objects);
++ for (i = 0; i < objects; i ++) {
+ motComponents [i]. inUse = false;
++ motComponents [i]. motSlide = nullptr;
++ }
+ memcpy (&dir_segments [0], segment, segmentSize);
+ marked [0] = true;
+- }
++}
+
+ motDirectory::~motDirectory() {
+ int i;
+- delete [] dir_segments;
+
+ for (i = 0; i < numObjects; i ++)
+- if (motComponents [i]. inUse)
+- delete [] motComponents [i]. motSlide;
+- delete [] motComponents;
++ if (motComponents [i]. inUse &&
++ (motComponents [i]. motSlide != nullptr))
++ delete motComponents [i]. motSlide;
+ }
+
+ motObject *motDirectory::getHandle (uint16_t transportId) {
+@@ -118,18 +119,18 @@ int16_t i;
+
+ void motDirectory::analyse_theDirectory() {
+ uint32_t currentBase = 11; // in bytes
+-uint8_t *data = dir_segments;
++//uint8_t *data = dir_segments;
+ uint16_t extensionLength = (dir_segments [currentBase] << 8) |
+- data [currentBase + 1];
++ dir_segments [currentBase + 1];
+
+ currentBase += 2 + extensionLength;
+ for (int i = 0; i < numObjects; i ++) {
+- uint16_t transportId = (data [currentBase] << 8) |
+- data [currentBase + 1];
++ uint16_t transportId = (dir_segments [currentBase] << 8) |
++ dir_segments [currentBase + 1];
+ if (transportId == 0) // just a dummy
+ break;
+
+- uint8_t *segment = &data [currentBase + 2];
++ uint8_t *segment = &dir_segments [currentBase + 2];
+ motObject *handle = new motObject (myRadioInterface,
+ true,
+ transportId,
+diff --git a/src/backend/data/mot/mot-handler.cpp b/src/backend/data/mot/mot-handler.cpp
+index f505cd4..6b8b082 100755
+--- a/src/backend/data/mot/mot-handler.cpp
++++ b/src/backend/data/mot/mot-handler.cpp
+@@ -48,13 +48,14 @@ struct motTable_ {
+ motHandler::~motHandler() {
+ int i;
+
+- for (i = 0; i < 15; i ++)
++ for (i = 0; i < 15; i ++) {
+ if (motTable [i]. orderNumber > 0) {
+ if (motTable [i]. motSlide != nullptr) {
+ delete motTable [i]. motSlide;
+ motTable [i]. motSlide = nullptr;
+ }
+ }
++ }
+ if (theDirectory != nullptr)
+ delete theDirectory;
+ }
+--
+2.31.1
+
diff --git a/0002-padHandler-verify-data-length.patch b/0002-padHandler-verify-data-length.patch
new file mode 100644
index 000000000000..9296fb594293
--- /dev/null
+++ b/0002-padHandler-verify-data-length.patch
@@ -0,0 +1,42 @@
+From 3a2adddfb7e1c5c77b231d3d245a011ee35773cf Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Michael=20La=C3=9F?= <bevan@bi-co.net>
+Date: Thu, 13 May 2021 12:33:32 +0200
+Subject: [PATCH 2/4] padHandler: verify data length
+
+Make sure to never compute negative offsets for array accesses.
+---
+ src/backend/data/pad-handler.cpp | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/src/backend/data/pad-handler.cpp b/src/backend/data/pad-handler.cpp
+index 19517ac..570bb2e 100755
+--- a/src/backend/data/pad-handler.cpp
++++ b/src/backend/data/pad-handler.cpp
+@@ -193,6 +193,12 @@ std::vector<uint8_t> data; // for the local addition
+ // the size of the latest xpadfield that had a CI_flag != 0
+ if (CI_flag == 0) {
+ if (mscGroupElement && (xpadLength > 0)) {
++
++ if (last < xpadLength) {
++ fprintf(stderr, "handle_variablePAD: last < xpadLength\n");
++ return;
++ }
++
+ data. resize (xpadLength);
+ for (j = 0; j < xpadLength; j ++)
+ data [j] = b [last - j];
+@@ -407,6 +413,11 @@ void padHandler::build_MSC_segment (std::vector<uint8_t> data) {
+ // is
+ int32_t size = data. size() < (uint32_t)dataGroupLength ? data. size() :
+ dataGroupLength;
++
++if (size < 2) {
++ fprintf (stderr, "build_MSC_segment: data size < 2\n");
++ return;
++}
+
+ uint8_t groupType = data [0] & 0xF;
+ //uint8_t continuityIndex = (data [1] & 0xF0) >> 4;
+--
+2.31.1
+
diff --git a/0003-padHandler-correct-valid-range-for-last.patch b/0003-padHandler-correct-valid-range-for-last.patch
new file mode 100644
index 000000000000..407b5e52799e
--- /dev/null
+++ b/0003-padHandler-correct-valid-range-for-last.patch
@@ -0,0 +1,30 @@
+From 8d0826759666dd0c207790b4ce8ac548bec760b8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Michael=20La=C3=9F?= <bevan@bi-co.net>
+Date: Thu, 13 May 2021 13:22:57 +0200
+Subject: [PATCH 3/4] padHandler: correct valid range for last
+
+3a2addd introduced a check for last in padHandler::handle_variablePAD.
+However, j only runs until xpadLength-1, so last being xpadLength-1 is
+totally fine.
+---
+ src/backend/data/pad-handler.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/backend/data/pad-handler.cpp b/src/backend/data/pad-handler.cpp
+index 570bb2e..c694fea 100755
+--- a/src/backend/data/pad-handler.cpp
++++ b/src/backend/data/pad-handler.cpp
+@@ -194,8 +194,8 @@ std::vector<uint8_t> data; // for the local addition
+ if (CI_flag == 0) {
+ if (mscGroupElement && (xpadLength > 0)) {
+
+- if (last < xpadLength) {
+- fprintf(stderr, "handle_variablePAD: last < xpadLength\n");
++ if (last < xpadLength - 1) {
++ fprintf(stderr, "handle_variablePAD: last < xpadLength - 1\n");
+ return;
+ }
+
+--
+2.31.1
+
diff --git a/0004-hackrf-update-gain-display-when-restoring-settings.patch b/0004-hackrf-update-gain-display-when-restoring-settings.patch
new file mode 100644
index 000000000000..5f79a14293d7
--- /dev/null
+++ b/0004-hackrf-update-gain-display-when-restoring-settings.patch
@@ -0,0 +1,56 @@
+From 665f8840df98c050adc64a9e4e64cd9e3a6c0378 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Michael=20La=C3=9F?= <bevan@bi-co.net>
+Date: Thu, 13 May 2021 15:31:20 +0200
+Subject: [PATCH 4/4] hackrf: update gain display when restoring settings
+
+So far, only the sliders are updated and not the LCD type numeric
+displays. Since signal emission is disabled during restore, the updates
+do not automatically propagate to the numeric displays.
+
+This commit also removes leftover definitions of __KEEP_GAIN_SETTINGS__
+in qt-dab.pro since this setting is gone since qt-dab 3.5.
+---
+ dab-maxi/qt-dab.pro | 2 --
+ dab-maxi/qt-devices/hackrf-handler/hackrf-handler.cpp | 4 ++++
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/dab-maxi/qt-dab.pro b/dab-maxi/qt-dab.pro
+index dd91bcc..a2a83fd 100755
+--- a/dab-maxi/qt-dab.pro
++++ b/dab-maxi/qt-dab.pro
+@@ -346,7 +346,6 @@ CONFIG += PC
+ #CONFIG += RPI
+ #DEFINES += SHOW_MISSING
+ DEFINES += __DUMP_SNR__ # for experiments only
+-DEFINES +=__KEEP_GAIN_SETTINGS__
+ }
+
+
+@@ -430,7 +429,6 @@ CONFIG += faad
+
+ CONFIG += try-epg # do not use
+ DEFINES += __DUMP_SNR__ # for experiments only
+-DEFINES +=__KEEP_GAIN_SETTINGS__
+ }
+ # devices
+ #
+diff --git a/dab-maxi/qt-devices/hackrf-handler/hackrf-handler.cpp b/dab-maxi/qt-devices/hackrf-handler/hackrf-handler.cpp
+index cb41ec9..4a9da5d 100755
+--- a/dab-maxi/qt-devices/hackrf-handler/hackrf-handler.cpp
++++ b/dab-maxi/qt-devices/hackrf-handler/hackrf-handler.cpp
+@@ -208,8 +208,12 @@ int res;
+ AmpEnableButton, SLOT (setChecked (bool)));
+ connect (this, SIGNAL (new_vgaValue (int)),
+ vgaGainSlider, SLOT (setValue (int)));
++ connect (this, SIGNAL (new_vgaValue (int)),
++ vgagainDisplay, SLOT (display (int)));
+ connect (this, SIGNAL (new_lnaValue (int)),
+ lnaGainSlider, SLOT (setValue (int)));
++ connect (this, SIGNAL (new_lnaValue (int)),
++ lnagainDisplay, SLOT (display (int)));
+ xmlDumper = nullptr;
+ dumping. store (false);
+ running. store (false);
+--
+2.31.1
+
diff --git a/PKGBUILD b/PKGBUILD
index 30ff35f17510..e332120426a9 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -6,7 +6,7 @@
pkgname=qt-dab
_pkgname=Qt-DAB
pkgver=3.72
-pkgrel=1
+pkgrel=2
pkgdesc="Software DAB decoder for use with various SDR devices"
arch=(x86_64)
url="https://www.sdr-j.tk/"
@@ -18,12 +18,28 @@ optdepends=('airspy: Support for Airspy'
'libad9361: Support for Pluto'
'rtl-sdr: Support for RTL-SDR'
'libsdrplay: Support for SDRplay')
-source=("https://github.com/JvanKatwijk/${pkgname}/archive/refs/tags/${_pkgname}${pkgver}.tar.gz")
-sha256sums=('8e90bd7e35a2fb6e3f3f3aee61ee65d3c37ead5731ba0146fa29883685167ed4')
+source=("https://github.com/JvanKatwijk/${pkgname}/archive/refs/tags/${_pkgname}${pkgver}.tar.gz"
+ 0001-mot_dir-changes.patch
+ 0002-padHandler-verify-data-length.patch
+ 0003-padHandler-correct-valid-range-for-last.patch
+ 0004-hackrf-update-gain-display-when-restoring-settings.patch)
+sha256sums=('8e90bd7e35a2fb6e3f3f3aee61ee65d3c37ead5731ba0146fa29883685167ed4'
+ 'f4f60612d82afffbbd99b5549a4e4ddcd9745e046da9974fe373091251ace85c'
+ 'f20e66cd0a2f29ee90e20bcdf8aa6ca5b2f06e554e3373ef9118823d5b2ca9d6'
+ '170fe2ce981e1d7bc4a7ea5924862887a5c752822375887935f67ea5c34341d6'
+ '09ee42c73a928688e710d961c16d46f5d804fb00f7037e24109823b0898d22d4')
prepare() {
cd "${pkgname}-${_pkgname}${pkgver}"
+ # Some stability fixes
+ patch -p1 < "$srcdir"/0001-mot_dir-changes.patch
+ patch -p1 < "$srcdir"/0002-padHandler-verify-data-length.patch
+ patch -p1 < "$srcdir"/0003-padHandler-correct-valid-range-for-last.patch
+
+ # Fix for gain display for hackrf
+ patch -p1 < "$srcdir"/0004-hackrf-update-gain-display-when-restoring-settings.patch
+
# The program is officially called Qt-DAB.
sed -i 's/Qt_DAB/Qt-DAB/g' dab-maxi/${pkgname}.desktop
}