#1146907 ripperx: RipperX Crashes parsing UTF8

Package:
ripperx
Source:
ripperx
Description:
GTK-based audio CD ripper/encoder
Submitter:
Phil Dibowitz
Date:
2026-09-06 22:39:01 UTC
Severity:
normal
#1146907#5
Date:
2026-09-06 22:22:01 UTC
From:
To:
Dear Maintainer,

When attempting to rip a CD, when clicking "Go" it crashes with:

```
(ripperx:992520): Pango-WARNING **: 15:07:52.849: Invalid UTF-8 string passed to pango_layout_set_text()
Segmentation fault         (core dumped) ripperx
```

This seems similar to #512898 though I don't think it's the same, since
that's 7 years old and basedon a different version.

The CD in question has one track where the UTF doesn't parse properly:

```
(Whata��s So Funny a��bout) Peace, Love and Understanding
```

CD is "Other Worlds" by The Pretty Reckless.

Here's a full backtrace:

```
(gdb) bt
#0  remove_non_unix_characters (src=src@entry=0x0) at ./src/misc_utils.cc:725
#1  0x00005572a22e9574 in create_file_names_for_track
    (main_data=main_data@entry=0x7ffe3d3560d0, track=<optimized out>, wfp=wfp@entry=0x5572a23493e0 <job_starter(MainData*)::wav_file_path>, efp=efp@entry=0x0)
    at ./src/misc_utils.cc:1240
#2  0x00005572a22e6c81 in job_starter (main_data=0x7ffe3d3560d0)
    at ./src/job_control.cc:242
#7  0x00007f282ebcedc3 in <emit signal 'clicked' on instance 0x5572c46952e0 [GtkButton]> (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>)
    at ../../../gobject/gsignal.c:3624
    #3  0x00007f282ebb1203 in g_closure_invoke
    (closure=0x5572c4696890, return_value=0x0, n_param_values=n_param_values@entry=1, param_values=param_values@entry=0x7ffe3d3550a0, invocation_hint=invocation_hint@entry=0x7ffe3d354ff0) at ../../../gobject/gclosure.c:916
    #4  0x00007f282ebc7c69 in signal_emit_unlocked_R
    (node=node@entry=0x7ffe3d355170, detail=detail@entry=0, instance=instance@entry=0x5572c46952e0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffe3d3550a0) at ../../../gobject/gsignal.c:3929
    #5  0x00007f282ebc97a6 in signal_emit_valist_unlocked
    (instance=instance@entry=0x5572c46952e0, signal_id=signal_id@entry=98, detail=detail@entry=0, var_args=var_args@entry=0x7ffe3d3552c0)
    at ../../../gobject/gsignal.c:3561
    #6  0x00007f282ebced08 in g_signal_emit_valist
    (instance=0x5572c46952e0, signal_id=98, detail=0, var_args=0x7ffe3d3552c0)
    at ../../../gobject/gsignal.c:3304
#8  0x00007f282ec95796 in gtk_real_button_released
    (button=0x5572c46952e0 [GtkButton]) at ../../../../gtk/gtkbutton.c:1712
#9  gtk_real_button_released (button=0x5572c46952e0 [GtkButton])
    at ../../../../gtk/gtkbutton.c:1702
#14 0x00007f282ebcedc3 in <emit signal 'released' on instance 0x5572c46952e0 [GtkButton]> (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>)
    at ../../../gobject/gsignal.c:3624
    #10 0x00007f282ebb1203 in g_closure_invoke
    (closure=closure@entry=0x5572c4691c80, return_value=0x0, n_param_values=n_param_values@entry=1, param_values=param_values@entry=0x7ffe3d3555b0, invocation_hint=invocation_hint@entry=0x7ffe3d355500) at ../../../gobject/gclosure.c:916
    #11 0x00007f282ebc7da7 in signal_emit_unlocked_R
    (node=node@entry=0x7ffe3d355680, detail=detail@entry=0, instance=instance@entry=0x5572c46952e0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7ffe3d3555b0) at ../../../gobject/gsignal.c:3762
    #12 0x00007f282ebc97a6 in signal_emit_valist_unlocked
    (instance=instance@entry=0x5572c46952e0, signal_id=signal_id@entry=97, detail=detail@entry=0, var_args=var_args@entry=0x7ffe3d3557d0)
    at ../../../gobject/gsignal.c:3561
    #13 0x00007f282ebced08 in g_signal_emit_valist
    (instance=0x5572c46952e0, signal_id=97, detail=0, var_args=0x7ffe3d3557d0)
    at ../../../gobject/gsignal.c:3304
#15 0x00007f282ec94569 in gtk_button_button_release
    (widget=<optimized out>, event=<optimized out>)
    at ../../../../gtk/gtkbutton.c:1604
#21 0x00007f282ebcedc3 in <emit signal 'button-release-event' on instance 0x5572c46952e0 [GtkButton]>
    (instance=instance@entry=0x5572c46952e0, signal_id=<optimized out>, detail=detail@entry=0) at ../../../gobject/gsignal.c:3624
    #16 0x00007f282ed440ab in _gtk_marshal_BOOLEAN__BOXED
    (closure=0x5572c4666f40, return_value=0x7ffe3d355a60, n_param_values=<optimized out>, param_values=0x7ffe3d355af0, invocation_hint=<optimized out>, marshal_data=<optimized out>) at ../../../../gtk/gtkmarshalers.c:84
    #17 0x00007f282ebb1203 in g_closure_invoke
    (closure=closure@entry=0x5572c4666f40, return_value=0x7ffe3d355a60, n_param_values=n_param_values@entry=2, param_values=param_values@entry=0x7ffe3d355af0, invocation_hint=invocation_hint@entry=0x7ffe3d355a40) at ../../../gobject/gclosure.c:916
    #18 0x00007f282ebc815f in signal_emit_unlocked_R
    (node=node@entry=0x7ffe3d355be0, detail=detail@entry=0, instance=instance@entry=0x5572c46952e0, emission_return=emission_return@entry=0x7ffe3d355c60, instance_and_params=instance_and_params@entry=0x7ffe3d355af0) at ../../../gobject/gsignal.c:3969
    #19 0x00007f282ebc9104 in signal_emit_valist_unlocked
    (instance=instance@entry=0x5572c46952e0, signal_id=signal_id@entry=34, detail=detail@entry=0, var_args=var_args@entry=0x7ffe3d355d30)
    at ../../../gobject/gsignal.c:3574
    #20 0x00007f282ebced08 in g_signal_emit_valist
    (instance=0x5572c46952e0, signal_id=34, detail=0, var_args=0x7ffe3d355d30)
    at ../../../gobject/gsignal.c:3304
#22 0x00007f282ee6cfee in gtk_widget_event_internal
    (widget=widget@entry=0x5572c46952e0 [GtkButton], event=event@entry=0x5572c4914ba0) at ../../../../gtk/gtkwidget.c:5010
#23 0x00007f282ee6d201 in IA__gtk_widget_event
    (widget=widget@entry=0x5572c46952e0 [GtkButton], event=event@entry=0x5572c4914ba0) at ../../../../gtk/gtkwidget.c:4807
#24 0x00007f282ed4257c in IA__gtk_propagate_event
--Type <RET> for more, q to quit, c to continue without paging--
    (widget=0x5572c46952e0 [GtkButton], event=0x5572c4914ba0)
    at ../../../../gtk/gtkmain.c:2503
#25 IA__gtk_propagate_event (widget=<optimized out>, event=0x5572c4914ba0)
    at ../../../../gtk/gtkmain.c:2440
#26 0x00007f282ed4291b in IA__gtk_main_do_event (event=0x5572c4914ba0)
    at ../../../../gtk/gtkmain.c:1698
#27 IA__gtk_main_do_event (event=<optimized out>) at ../../../../gtk/gtkmain.c:1503
#28 0x00007f282f0f0f10 in gdk_event_dispatch
    (source=<optimized out>, callback=<optimized out>, user_data=<optimized out>)
    at ../../../../../gdk/x11/gdkevents-x11.c:2425
#29 0x00007f282ea92cb7 in g_main_dispatch (context=context@entry=0x5572c4660760)
    at ../../../glib/gmain.c:3734
#30 0x00007f282ea9642f in g_main_context_dispatch_unlocked (context=0x5572c4660760)
    at ../../../glib/gmain.c:4603
#31 g_main_context_iterate_unlocked
    (context=0x5572c4660760, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../glib/gmain.c:4672
#32 0x00007f282ea97047 in g_main_loop_run (loop=loop@entry=0x5572c49de230)
    at ../../../glib/gmain.c:4877
#33 0x00007f282ed4171f in IA__gtk_main () at ../../../../gtk/gtkmain.c:1270
#34 0x00005572a22da69e in main (argc=<optimized out>, argv=<optimized out>)
    at ./src/main.cc:75
```

#1146907#10
Date:
2026-09-06 22:32:18 UTC
From:
To:
Oh, I implied but should have stated explicitly - when I cleanup that
one track and remove the incorrectly-parsed UTF-8, the app does not crash.