summaryrefslogtreecommitdiff
path: root/src/libicalvcal
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2021-09-02 17:42:39 +0200
committerAllen Winter <allen.winter@kdab.com>2021-09-18 09:20:27 -0400
commit9e5a5edb2f3ccfc606c9549b87d805c31fef2719 (patch)
tree01949c79828c85e72316a72dc6aa52466dc13f4c /src/libicalvcal
parentab7d0531edd28123d50de1ba2cf43fa1262855cb (diff)
downloadlibical-git-9e5a5edb2f3ccfc606c9549b87d805c31fef2719.tar.gz
libicalvcal: Cast EOF to 'char' to ensure matching its value against it
Some arches (like aarch64, ppc64le and s390x) may not match the EOF constant against its value cast to 'char'. That breaks the parser and can cause an indefinite read of the content, with growing memory use.
Diffstat (limited to 'src/libicalvcal')
-rw-r--r--src/libicalvcal/vcc.c20
-rw-r--r--src/libicalvcal/vcc.y20
2 files changed, 20 insertions, 20 deletions
diff --git a/src/libicalvcal/vcc.c b/src/libicalvcal/vcc.c
index 44068d16..3eb80d2c 100644
--- a/src/libicalvcal/vcc.c
+++ b/src/libicalvcal/vcc.c
@@ -607,7 +607,7 @@ static int lexGeta_(int i)
}
static void lexSkipLookahead() {
- if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) {
+ if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=((char) EOF)) {
/* don't skip EOF. */
lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD;
lexBuf.len--;
@@ -642,7 +642,7 @@ static int lexLookahead() {
static int lexGetc() {
int c = lexLookahead();
- if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) {
+ if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=((char) EOF)) {
/* EOF will remain in lookahead buffer */
lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD;
lexBuf.len--;
@@ -692,7 +692,7 @@ static char* lexGetWord() {
lexSkipWhite();
lexClearToken();
c = lexLookahead();
- while (c != EOF && !strchr("\t\n ;:=",c)) {
+ while (c != ((char) EOF) && !strchr("\t\n ;:=",c)) {
lexAppendc(c);
lexSkipLookahead();
c = lexLookahead();
@@ -704,7 +704,7 @@ static char* lexGetWord() {
static void lexPushLookaheadc(int c) {
int putptr;
/* can't putback EOF, because it never leaves lookahead buffer */
- if (c == EOF) return;
+ if (((char) c) == ((char) EOF)) return;
putptr = (int)lexBuf.getPtr - 1;
if (putptr < 0) putptr += MAX_LEX_LOOKAHEAD;
lexBuf.getPtr = (unsigned long)putptr;
@@ -726,7 +726,7 @@ static char* lexLookaheadWord() {
while (len < (MAX_LEX_LOOKAHEAD_0)) {
c = lexGetc();
len++;
- if (c == EOF || strchr("\t\n ;:=", c)) {
+ if (c == ((char) EOF) || strchr("\t\n ;:=", c)) {
lexAppendc(0);
/* restore lookahead buf. */
lexBuf.len += len;
@@ -783,7 +783,7 @@ static char* lexGet1Value() {
lexSkipWhite();
c = lexLookahead();
lexClearToken();
- while (c != EOF && c != ';') {
+ while (c != ((char) EOF) && c != ';') {
if (c == '\n') {
int a;
lexSkipLookahead();
@@ -805,7 +805,7 @@ static char* lexGet1Value() {
}
lexAppendc(0);
handleMoreRFC822LineBreak(c);
- return c==EOF?0:lexStr();
+ return c==((char) EOF)?0:lexStr();
}
#endif
@@ -903,9 +903,9 @@ static char * lexGetDataFromBase64()
else if (oldBytes) free(oldBytes);
/* error recovery: skip until 2 adjacent newlines. */
DBG_(("db: invalid character 0x%x '%c'\n", c,c));
- if (c != EOF) {
+ if (c != ((char) EOF)) {
c = lexGetc();
- while (c != EOF) {
+ while (c != ((char) EOF)) {
if (c == '\n' && lexLookahead() == '\n') {
++mime_lineNum;
break;
@@ -1123,7 +1123,7 @@ int yylex() {
++mime_lineNum;
continue;
}
- case EOF: return 0;
+ case ((char) EOF): return 0;
break;
default: {
lexPushLookaheadc(c);
diff --git a/src/libicalvcal/vcc.y b/src/libicalvcal/vcc.y
index 3280a035..834f6b98 100644
--- a/src/libicalvcal/vcc.y
+++ b/src/libicalvcal/vcc.y
@@ -573,7 +573,7 @@ static int lexGeta_(int i)
}
static void lexSkipLookahead() {
- if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) {
+ if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=((char) EOF)) {
/* don't skip EOF. */
lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD;
lexBuf.len--;
@@ -608,7 +608,7 @@ static int lexLookahead() {
static int lexGetc() {
int c = lexLookahead();
- if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) {
+ if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=((char) EOF)) {
/* EOF will remain in lookahead buffer */
lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD;
lexBuf.len--;
@@ -658,7 +658,7 @@ static char* lexGetWord() {
lexSkipWhite();
lexClearToken();
c = lexLookahead();
- while (c != EOF && !strchr("\t\n ;:=",c)) {
+ while (c != ((char) EOF) && !strchr("\t\n ;:=",c)) {
lexAppendc(c);
lexSkipLookahead();
c = lexLookahead();
@@ -670,7 +670,7 @@ static char* lexGetWord() {
static void lexPushLookaheadc(int c) {
int putptr;
/* can't putback EOF, because it never leaves lookahead buffer */
- if (c == EOF) return;
+ if (((char) c) == ((char) EOF)) return;
putptr = (int)lexBuf.getPtr - 1;
if (putptr < 0) putptr += MAX_LEX_LOOKAHEAD;
lexBuf.getPtr = putptr;
@@ -692,7 +692,7 @@ static char* lexLookaheadWord() {
while (len < (MAX_LEX_LOOKAHEAD_0)) {
c = lexGetc();
len++;
- if (c == EOF || strchr("\t\n ;:=", c)) {
+ if (c == ((char) EOF) || strchr("\t\n ;:=", c)) {
lexAppendc(0);
/* restore lookahead buf. */
lexBuf.len += len;
@@ -749,7 +749,7 @@ static char* lexGet1Value() {
lexSkipWhite();
c = lexLookahead();
lexClearToken();
- while (c != EOF && c != ';') {
+ while (c != ((char) EOF) && c != ';') {
if (c == '\n') {
int a;
lexSkipLookahead();
@@ -771,7 +771,7 @@ static char* lexGet1Value() {
}
lexAppendc(0);
handleMoreRFC822LineBreak(c);
- return c==EOF?0:lexStr();
+ return c==((char) EOF)?0:lexStr();
}
#endif
@@ -869,9 +869,9 @@ static char * lexGetDataFromBase64()
else if (oldBytes) free(oldBytes);
/* error recovery: skip until 2 adjacent newlines. */
DBG_(("db: invalid character 0x%x '%c'\n", c,c));
- if (c != EOF) {
+ if (c != ((char) EOF)) {
c = lexGetc();
- while (c != EOF) {
+ while (c != ((char) EOF)) {
if (c == '\n' && lexLookahead() == '\n') {
++mime_lineNum;
break;
@@ -1089,7 +1089,7 @@ int yylex() {
++mime_lineNum;
continue;
}
- case EOF: return 0;
+ case ((char) EOF): return 0;
break;
default: {
lexPushLookaheadc(c);