From 06e999b8c559291cf937aa3b44074726155999a8 Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Sun, 1 Jan 2023 22:23:44 +0100
Subject: [PATCH] Check whether serial_serno is not NULL before calling it.

For devices connected through a real serial device rather than
USB, there is no transport-layer serial number available.

stk500v2.c (and jtag3.c) tried to always call this function.

Closes #1254
---
 NEWS           | 1 +
 src/jtag3.c    | 3 ++-
 src/stk500v2.c | 3 ++-
 3 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/NEWS b/NEWS
index 4912a530..810379b0 100644
--- a/NEWS
+++ b/NEWS
@@ -122,6 +122,7 @@ Changes since version 7.0:
     - megaAVR JTAG programming doesn't work for SNAP and PICkit4
       #1052
     - urclock/FTDI communication issues #1245
+    - stk500v2.c dumps core on open #1254
 
   * Pull requests:
 
diff --git a/src/jtag3.c b/src/jtag3.c
index 49cee6f4..36aed4f0 100644
--- a/src/jtag3.c
+++ b/src/jtag3.c
@@ -1570,7 +1570,8 @@ int jtag3_open_common(PROGRAMMER *pgm, const char *port) {
   }
 
   // Get USB serial number
-  pgm->usbsn = serial_serno();
+  if (serial_serno)
+    pgm->usbsn = serial_serno();
 
   /*
    * drain any extraneous input
diff --git a/src/stk500v2.c b/src/stk500v2.c
index e5f360f7..095b3248 100644
--- a/src/stk500v2.c
+++ b/src/stk500v2.c
@@ -1579,7 +1579,8 @@ static int stk500v2_open(PROGRAMMER *pgm, const char *port) {
   }
 
   // Get USB serial number
-  pgm->usbsn = serial_serno();
+  if (serial_serno)
+    pgm->usbsn = serial_serno();
 
   /*
    * drain any extraneous input