netcontrol/0003-sysconfig-fix-segfault-on-missed-end-quote-bsc-10277.patch
Marius Tomaschewski 0c6a0b8bde - udev: use correct udev rule (write) lock directory
[+ 0004-udev-use-correct-udev-rule-write-lock-directory.patch]
- sysconfig: fix segfault on missed end-quote (bsc#1027736)
  [+ 0003-sysconfig-fix-segfault-on-missed-end-quote-bsc-10277.patch]
- fix segfault on invalid check in route creation (bsc#1148646)
  [+ 0002-Fix-invalid-check-in-route-creation-bsc-1148646.patch]
- fix virsh iface-list not working as expected (bsc#1029201)
  [+ 0001-virsh-iface-list-not-working-as-expected-bsc-1029201.patch]

OBS-URL: https://build.opensuse.org/package/show/network:utilities/netcontrol?expand=0&rev=30
2020-03-11 16:02:13 +00:00

69 lines
1.3 KiB
Diff

From ca57462e67fdbd30269117d0e75a2257efefdefd Mon Sep 17 00:00:00 2001
From: Marius Tomaschewski <mt@suse.de>
Date: Fri, 28 Feb 2020 16:10:53 +0100
References: bsc#1027736
Upstream: merged
Subject: [PATCH] sysconfig: fix segfault on missed end-quote (bsc#1027736)
diff --git a/src/sysconfig.c b/src/sysconfig.c
index 48e929b..d03f23a 100644
--- a/src/sysconfig.c
+++ b/src/sysconfig.c
@@ -91,31 +91,32 @@ nc_sysconfig_free(nc_sysconfig_t *nsc)
static int
__unquote(char *string)
{
- char *src, *dst, cc;
+ char *src, *dst, qc = 0, lc = 0;
+ unsigned char cc;
+ int ret = 1;
src = dst = string;
- while ((cc = *src++) != '\0') {
- if (isspace(cc))
+ if (*string == '"' || *string == '\'') {
+ qc = *string;
+ src++;
+ }
+ do {
+ cc = *src;
+ if (!cc) {
+ ret = qc && lc == qc;
break;
- if (*string == '"') {
- while ((cc = *src++) != '"') {
- if (cc == '\\') {
- cc = *src++;
- if (cc == '\0')
- return 0;
- }
- *dst++ = cc;
- }
- } else if (*string == '\'') {
- while ((cc = *src++) != '\'')
- *dst++ = cc;
- string = dst;
- } else {
- *dst++ = cc;
}
- }
+ if (isspace(cc) && !qc)
+ break;
+ if (cc == qc)
+ break;
+ *dst = lc = cc;
+ dst++;
+ src++;
+ } while (1);
+
*dst = '\0';
- return 1;
+ return ret;
}
static int
--
2.16.4