netcontrol/0003-sysconfig-fix-segfault-on-missed-end-quote-bsc-10277.patch

69 lines
1.3 KiB
Diff
Raw Normal View History

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