summaryrefslogtreecommitdiff
blob: ad752a11816f6ebb22c852eaadd738492b9346f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
From dfe3279a365d629ba848f0265108d98d9f12348f Mon Sep 17 00:00:00 2001
From: Andrew Borodin <aborodin@vmail.ru>
Date: Sun, 27 Aug 2023 19:32:53 +0300
Subject: [PATCH] Ticket 4500: mcdiff: segfault when display of line numbers is
 enabled.

The bug was introduced in 00f84fbf24b5f65381f41c5d6333182bc7921700.

  * (dview_load_options): avoid NULL dereference: don't caclulate the
    width of line numbers field here because dview->a isn't created yet.
  * (dview_update): caclulate the width of line numbers field using an
    actual length of diff lines array.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
--- a/src/diffviewer/ydiff.c
+++ b/src/diffviewer/ydiff.c
@@ -2366,7 +2366,7 @@ dview_load_options (WDiff * dview)
         dview->display_symbols = 1;
     show_numbers = mc_config_get_bool (mc_global.main_config, "DiffView", "show_numbers", FALSE);
     if (show_numbers)
-        dview->display_numbers = calc_nwidth ((const GArray * const *) dview->a);
+        dview->display_numbers = 1;
     tab_size = mc_config_get_int (mc_global.main_config, "DiffView", "tab_size", 8);
     if (tab_size > 0 && tab_size < 9)
         dview->tab_size = tab_size;
@@ -2885,6 +2885,10 @@ dview_update (WDiff * dview)
     if (height < 2)
         return;
 
+    /* use an actual length of dview->a */
+    if (dview->display_numbers != 0)
+        dview->display_numbers = calc_nwidth ((const GArray * const *) dview->a);
+
     width1 = dview->half1 + dview->bias;
     width2 = dview->half2 - dview->bias;
     if (dview->full)