g0orx / linhpsdr

Linux HPSDR
GNU General Public License v3.0
74 stars 45 forks source link

program crash when restoring radio with configured/working audio #94

Closed csylvain closed 3 years ago

csylvain commented 3 years ago

program starts up successfully only in the absence of .props file.

build identification

commit 92923150d8fe2bcb3f01b24e376f3bf8a8489f45 (HEAD -> master, origin/master, origin/HEAD)
Date:   Wed Feb 3 07:35:08 2021 +0000

segmentation fault message

loadProperties: /home/csylvain/.local/share/linhpsdr/00-1E-C0-A8-66-27.props

Thread 1 "linhpsdr" received signal SIGSEGV, Segmentation fault.
__strlen_avx2 () at ../sysdeps/x86_64/multiarch/strlen-avx2.S:65
65  ../sysdeps/x86_64/multiarch/strlen-avx2.S: No such file or directory.
(gdb) 

backtrace

#0  __strlen_avx2 () at ../sysdeps/x86_64/multiarch/strlen-avx2.S:65
#1  0x000055555556c080 in loadProperties
    (filename=filename@entry=0x7fffffffc310 "/home/csylvain/.local/share/linhpsdr/00-1E-C0-A8-66-27.props")
    at property.c:62
#2  0x000055555556f6ce in radio_restore_state (radio=radio@entry=0x555555a310f0) at radio.c:334
#3  0x0000555555571041 in create_radio (d=0x5555555cc860 <discovered>) at radio.c:1279
#4  0x000055555556766a in start_cb (widget=<optimized out>, data=<optimized out>) at main.c:447
#5  0x00007ffff70b0a56 in  () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#6  0x00007ffff70cfb28 in g_signal_emit_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#7  0x00007ffff70d00d3 in g_signal_emit () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#8  0x00007ffff766d2ae in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#9  0x00007ffff766d318 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#10 0x00007ffff70b0802 in g_closure_invoke () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#11 0x00007ffff70c4962 in  () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#12 0x00007ffff70cfb9e in g_signal_emit_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#13 0x00007ffff70d00d3 in g_signal_emit () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#14 0x00007ffff766b754 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#15 0x00007ffff791cae1 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#16 0x00007ffff70b0a56 in  () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#17 0x00007ffff70cfb28 in g_signal_emit_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#18 0x00007ffff70d00d3 in g_signal_emit () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#19 0x00007ffff7733fcc in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#20 0x00007ffff70b3c56 in g_cclosure_marshal_VOID__BOXEDv () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#21 0x00007ffff70b0a56 in  () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#22 0x00007ffff70cfb28 in g_signal_emit_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#23 0x00007ffff70d00d3 in g_signal_emit () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#24 0x00007ffff7731012 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#25 0x00007ffff773265b in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#26 0x00007ffff7735646 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#27 0x00007ffff76fcbb0 in gtk_event_controller_handle_event () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#28 0x00007ffff78bf16d in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#29 0x00007ffff79165ef in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#30 0x00007ffff70b0a56 in  () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#31 0x00007ffff70cedd1 in g_signal_emit_valist () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#32 0x00007ffff70d00d3 in g_signal_emit () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#33 0x00007ffff78c0c23 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#34 0x00007ffff777c128 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#35 0x00007ffff777e3db in gtk_main_do_event () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#36 0x00007ffff7466f79 in  () at /lib/x86_64-linux-gnu/libgdk-3.so.0
#37 0x00007ffff749a106 in  () at /lib/x86_64-linux-gnu/libgdk-3.so.0
#38 0x00007ffff6fc4f9d in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#39 0x00007ffff6fc5220 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#40 0x00007ffff6fc52c3 in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#41 0x00007ffff71defd5 in g_application_run () at /lib/x86_64-linux-gnu/libgio-2.0.so.0
#42 0x0000555555566342 in main (argc=1, argv=0x7fffffffe068) at main.c:568
csylvain commented 3 years ago

(i am inclined to add a verbose debugging command line option)

it appears the problem is in loadProperty() in property.c when the following is encountered

property:: radio.midi_filename=

program apparently wrote out the line in the .props file, and the filename is empty

csylvain commented 3 years ago

program blows up on reloading a config because of "radio.midi_filename=\n"

  1. strtok(s,"=") returns "radio.midi_filename"

  2. strtok(NULL,"\n") returns 0x0 <--- NOT "" (null str) but 0x0 (NULL)

  3. strlen(0x0) --> SIGSEGV

csylvain commented 3 years ago

one small change in one source file -- no need for a complete fork and pull request

fix problem with the following changes

diff --git a/property.c b/property.c
index ed60d02..2fc6f09 100644
--- a/property.c
+++ b/property.c
@@ -53,16 +53,23 @@ void loadProperties(char* filename) {

     if(f) {
         while(fgets(string,sizeof(string),f)) {
-            if(string[0]!='#') {
+            if(string[0]!='#') { // content is not comment line
+// fprintf(stderr,"loading property:: %s\n",string);
                 name=strtok(string,"=");
                 value=strtok(NULL,"\n");
+               if (value == 0x0) // strtok() indicates 'no token found'. value is NULL.
+                   value = ""; // set property value to <empty string>.
+
                 property=malloc(sizeof(PROPERTY));
                 property->name=malloc(strlen(name)+1);
                 strcpy(property->name,name);
+
                 property->value=malloc(strlen(value)+1);
                 strcpy(property->value,value);
                 property->next_property=properties;
+
                 properties=property;
+
                 if(strcmp(name,"property_version")==0) {
                   version=atof(value);
                 }
csylvain commented 3 years ago

this issue report prompted commit by g0orx to address the issue in loadProperties()

fb om de KB3CS