diff --git a/0001-xml-reader-fix-xml_getc-and-xml_ungetc.patch b/0001-xml-reader-fix-xml_getc-and-xml_ungetc.patch new file mode 100644 index 0000000..76f7e8a --- /dev/null +++ b/0001-xml-reader-fix-xml_getc-and-xml_ungetc.patch @@ -0,0 +1,124 @@ +From ad6ac1b9685d6340ee1f430eeec0bf800b4e5fa1 Mon Sep 17 00:00:00 2001 +From: Clemens Famulla-Conrad +Date: Fri, 21 Jul 2023 15:57:42 +0200 +Subject: [PATCH 1/2] xml-reader: fix xml_getc() and xml_ungetc() +References: bsc#1213349 +Upstream: yes + + +diff --git a/src/xml-reader.c b/src/xml-reader.c +index ca7f820..e5e9587 100644 +--- a/src/xml-reader.c ++++ b/src/xml-reader.c +@@ -70,7 +70,7 @@ typedef enum { + typedef struct xml_reader { + const char * filename; + FILE * file; +- char * buffer; ++ unsigned char * buffer; + + unsigned int no_close : 1; + +@@ -107,8 +107,8 @@ static void xml_debug(const char *, ...); + static int xml_reader_init_file(xml_reader_t *xr, FILE *fp); + static int xml_reader_open(xml_reader_t *xr, const char *filename); + static int xml_reader_destroy(xml_reader_t *xr); +-static char xml_getc(xml_reader_t *xr); +-static void xml_ungetc(xml_reader_t *xr, char cc); ++static int xml_getc(xml_reader_t *xr); ++static void xml_ungetc(xml_reader_t *xr, int cc); + + /* + * Document reader implementation +@@ -463,7 +463,7 @@ xml_token_type_t + xml_get_token_initial(xml_reader_t *xr, nc_stringbuf_t *res) + { + xml_token_type_t token; +- char cc; ++ int cc; + + restart: + /* Eat initial white space and store it in @res */ +@@ -551,7 +551,7 @@ restart: + xml_token_type_t + xml_get_token_tag(xml_reader_t *xr, nc_stringbuf_t *res) + { +- char cc, oc; ++ int cc, oc; + + xml_skip_space(xr, NULL); + +@@ -632,8 +632,7 @@ error: + xml_token_type_t + xml_skip_comment(xml_reader_t *xr) + { +- int match = 0; +- char cc; ++ int match = 0, cc; + + if (xml_getc(xr) != '-') { + xml_parse_error(xr, "Unexpected element"); +@@ -668,7 +667,7 @@ int + xml_expand_entity(xml_reader_t *xr, nc_stringbuf_t *res) + { + nc_stringbuf_t entity = NC_STRINGBUF_INIT; +- char cc, expanded; ++ int cc, expanded; + + if(nc_stringbuf_grow(&entity, 128) < 0) { + xml_parse_error(xr, "Unable to allocate entity buffer"); +@@ -680,7 +679,7 @@ xml_expand_entity(xml_reader_t *xr, nc_stringbuf_t *res) + xml_parse_error(xr, "Unexpenced EOF in entity"); + return 0; + } +- if (isspace(cc)) ++ if (isspace((unsigned int)cc)) + continue; + nc_stringbuf_putc(&entity, cc); + } +@@ -720,7 +719,7 @@ good: + void + xml_skip_space(xml_reader_t *xr, nc_stringbuf_t *result) + { +- char cc; ++ int cc; + + while ((cc = xml_getc(xr)) != EOF) { + if (!isspace(cc)) { +@@ -863,10 +862,10 @@ xml_reader_destroy(xml_reader_t *xr) + return rv; + } + +-char ++int + xml_getc(xml_reader_t *xr) + { +- char cc; ++ int cc; + + while (1) { + if (xr->pos) { +@@ -883,17 +882,17 @@ xml_getc(xml_reader_t *xr) + break; + } + +- if (fgets(xr->buffer, XML_READER_BUFSZ, xr->file) == NULL) ++ if (fgets((char *)xr->buffer, XML_READER_BUFSZ, xr->file) == NULL) + break; + +- xr->pos = (unsigned char *) xr->buffer; ++ xr->pos = xr->buffer; + } + + return EOF; + } + + void +-xml_ungetc(xml_reader_t *xr, char cc) ++xml_ungetc(xml_reader_t *xr, int cc) + { + if (xr->pos == NULL + || xr->pos == (unsigned char *) xr->buffer +-- +2.35.3 + diff --git a/0002-xml-reader-allow-uppercase-for-lt-gt-and-amp-expansi.patch b/0002-xml-reader-allow-uppercase-for-lt-gt-and-amp-expansi.patch new file mode 100644 index 0000000..81d498a --- /dev/null +++ b/0002-xml-reader-allow-uppercase-for-lt-gt-and-amp-expansi.patch @@ -0,0 +1,31 @@ +From 9a38e053226d01721126a21ee80396488782995d Mon Sep 17 00:00:00 2001 +From: Clemens Famulla-Conrad +Date: Fri, 21 Jul 2023 15:59:00 +0200 +Subject: [PATCH 2/2] xml-reader: allow uppercase for <, > and & + expansion +References: bsc#1213349 +Upstream: yes + + +diff --git a/src/xml-reader.c b/src/xml-reader.c +index e5e9587..1ab16ea 100644 +--- a/src/xml-reader.c ++++ b/src/xml-reader.c +@@ -689,11 +689,11 @@ xml_expand_entity(xml_reader_t *xr, nc_stringbuf_t *res) + return 0; + } + +- if (!strcmp(entity.string, "lt")) ++ if (!strcasecmp(entity.string, "lt")) + expanded = '<'; +- else if (!strcmp(entity.string, "gt")) ++ else if (!strcasecmp(entity.string, "gt")) + expanded = '>'; +- else if (!strcmp(entity.string, "amp")) ++ else if (!strcasecmp(entity.string, "amp")) + expanded = '&'; + else { + const char *es = entity.string; +-- +2.35.3 + diff --git a/netcontrol.changes b/netcontrol.changes index b8e180a..6156c3c 100644 --- a/netcontrol.changes +++ b/netcontrol.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Fri Jul 21 15:06:25 UTC 2023 - Clemens Famulla-Conrad + +- Fix EOF handling in xml-reader to avoid `virsh iface-*` commands + hang on aarch64 (bsc#1213349) + [+ 0001-xml-reader-fix-xml_getc-and-xml_ungetc.patch, + + 0002-xml-reader-allow-uppercase-for-lt-gt-and-amp-expansi.patch] + ------------------------------------------------------------------- Tue Jun 15 15:48:36 UTC 2021 - Marius Tomaschewski diff --git a/netcontrol.spec b/netcontrol.spec index ca3f7f0..b5e4048 100644 --- a/netcontrol.spec +++ b/netcontrol.spec @@ -1,7 +1,7 @@ # # spec file for package netcontrol # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -31,6 +31,8 @@ License: LGPL-2.1-or-later Group: Productivity/Networking/System Source0: %{name}-%{version}.tar.bz2 Source1: baselibs.conf +Patch1: 0001-xml-reader-fix-xml_getc-and-xml_ungetc.patch +Patch2: 0002-xml-reader-allow-uppercase-for-lt-gt-and-amp-expansi.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %if 0%{?suse_version} >= 1310 BuildRequires: autoconf @@ -102,6 +104,8 @@ Authors: %prep %setup -q +%patch1 -p1 +%patch2 -p1 %build export CFLAGS="-W -Wall $RPM_OPT_FLAGS"