53 lines
1.3 KiB
Diff
53 lines
1.3 KiB
Diff
From 3eacf85ec9dd638c2023c89c2a6cdf61107fc617 Mon Sep 17 00:00:00 2001
|
|
From: Kent Sutherland <git@ksuther.com>
|
|
Date: Fri, 14 Jun 2019 15:21:59 -0500
|
|
Subject: [PATCH] Fix timeout found by fuzzer (oss-fuzz issue 14881) strspn is
|
|
really slow compared to doing direct comparisons
|
|
|
|
---
|
|
src/libical/icalparser.c | 18 +++++++++++++-----
|
|
1 file changed, 13 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/libical/icalparser.c b/src/libical/icalparser.c
|
|
index fa92495..0530a4b 100644
|
|
--- a/src/libical/icalparser.c
|
|
+++ b/src/libical/icalparser.c
|
|
@@ -221,21 +221,29 @@ static void parser_decode_param_value(char *value)
|
|
char *in, *out;
|
|
|
|
for (in = out = value; *in; in++, out++) {
|
|
- if (*in == '^' && strspn(in+1, "n^'")) {
|
|
- switch (*++in) {
|
|
- case 'n':
|
|
+ int found_escaped_char = 0;
|
|
+
|
|
+ if(*in == '^'){
|
|
+ switch (*(in + 1)) {
|
|
+ case 'n':
|
|
*out = '\n';
|
|
+ found_escaped_char = 1;
|
|
break;
|
|
-
|
|
case '^':
|
|
*out = '^';
|
|
+ found_escaped_char = 1;
|
|
break;
|
|
|
|
case '\'':
|
|
*out = '"';
|
|
+ found_escaped_char = 1;
|
|
break;
|
|
}
|
|
- } else {
|
|
+ }
|
|
+
|
|
+ if(found_escaped_char) {
|
|
+ ++in;
|
|
+ } else {
|
|
*out = *in;
|
|
}
|
|
}
|
|
--
|
|
2.19.1
|
|
|