https://bugs.winehq.org/show_bug.cgi?id=45543
--- Comment #9 from Anastasius Focht focht@gmx.net --- Hello folks,
the crash can also be reproduced by just providing incorrect email/password (foobar@inter.net test1234) in activation dialog.
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/Pioneer/rekordbox 5.3.0
$ winedbg --gdb ./rekordbox.exe ...
Thread 1 received signal SIGSEGV, Segmentation fault. 0x00007fb041f48b05 in layout_add_line (layout=0x795a40, first_cluster=0, last_cluster=0, textpos=0x22e36c) at /home/focht/projects/wine/staging-src-4.5/dlls/dwrite/layout.c:1888 1888 if (!cluster->isWhitespace)
Wine-gdb> bt #0 0x00007fb041f48b05 in layout_add_line (layout=0x795a40, first_cluster=0, last_cluster=0, textpos=0x22e36c) at /home/focht/projects/wine/staging-src-4.5/dlls/dwrite/layout.c:1888 #1 0x00007fb041f499b5 in layout_compute_effective_runs (layout=0x795a40) at /home/focht/projects/wine/staging-src-4.5/dlls/dwrite/layout.c:2128 #2 0x00007fb041f5217f in dwritetextlayout_GetLineMetrics (iface=0x795a40, metrics=0x0, max_count=0, count=0x22e530) at /home/focht/projects/wine/staging-src-4.5/dlls/dwrite/layout.c:3621 #3 0x00000001412e24f0 in ?? () #4 0x0000000000795a40 in ?? () #5 0x0000000000000000 in ?? ()
Wine-gdb> info locals cluster = 0x800795708 lc = 0x1000790690 ch = 10 is_rtl = 0 params = {strikethrough = 2286368, underline = 0, effect = 0x7fb041f4627f <layout_compute+450>} prev_params = {strikethrough = 0, underline = 0, effect = 0x795b68} sign_metrics = {width = 0, height = 0, baseline = 0, supportsSideways = 0} line = 0 i = 0 metrics = {length = 0, trailingWhitespaceLength = 1, newlineLength = 1, height = 0, baseline = 0, isTrimmed = 0, leadingBefore = 0, leadingAfter = 0} index = 4294967295 start = 32688 pos = 0 descent = 0 trailingspacewidth = 0 append_trimming_run = 0 run = 0x795ba8 width = 0 origin_x = 1.11449751e-38 hr = 0 __FUNCTION__ = "layout_add_line" --- snip ---
https://source.winehq.org/git/wine.git/blob/HEAD:/dlls/dwrite/layout.c#l1822
--- snip --- 1822 static void layout_add_line(struct dwrite_textlayout *layout, UINT32 first_cluster, UINT32 last_cluster, 1823 UINT32 *textpos) 1824 { 1825 BOOL is_rtl = layout->format.readingdir == DWRITE_READING_DIRECTION_RIGHT_TO_LEFT; 1826 struct layout_final_splitting_params params, prev_params; 1827 DWRITE_INLINE_OBJECT_METRICS sign_metrics = { 0 }; 1828 UINT32 line = layout->metrics.lineCount, i; 1829 DWRITE_LINE_METRICS1 metrics = { 0 }; 1830 UINT32 index, start, pos = *textpos; 1831 FLOAT descent, trailingspacewidth; 1832 BOOL append_trimming_run = FALSE; 1833 const struct layout_run *run; 1834 FLOAT width, origin_x; 1835 HRESULT hr; 1836 1837 /* Take a look at clusters we got for this line in reverse order to set trailing properties for current line */ 1838 for (index = last_cluster, trailingspacewidth = 0.0f; index >= first_cluster; index--) { 1839 DWRITE_CLUSTER_METRICS *cluster = &layout->clustermetrics[index]; 1840 struct layout_cluster *lc = &layout->clusters[index]; 1841 WCHAR ch; 1842 1843 /* This also filters out clusters added from inline objects, those are never 1844 treated as a white space. */ 1845 if (!cluster->isWhitespace) 1846 break; ... --- snip ---
first_cluster == last_cluster == 0 -> loop index out of bounds.
Regards