diff options
author | Milan Crha <mcrha@redhat.com> | 2021-09-09 13:52:11 +0200 |
---|---|---|
committer | Allen Winter <allen.winter@kdab.com> | 2021-09-19 09:15:44 -0400 |
commit | ae63f5c7fd18fa3b247c84c37c9644b683b68389 (patch) | |
tree | f289c05bfc3d5ff491bb8536aa0d738017ac9b13 /src/libicalvcal | |
parent | 15cf1ddf5331f828adc59ac74be83c7b119f5542 (diff) | |
download | libical-git-ae63f5c7fd18fa3b247c84c37c9644b683b68389.tar.gz |
libicalvcal: Free memory allocated for parsing
Covers specially the error case, when in-the-middle of the parse
could left some objects on the stack.
Diffstat (limited to 'src/libicalvcal')
-rw-r--r-- | src/libicalvcal/vcc.c | 9 | ||||
-rw-r--r-- | src/libicalvcal/vcc.y | 9 |
2 files changed, 16 insertions, 2 deletions
diff --git a/src/libicalvcal/vcc.c b/src/libicalvcal/vcc.c index 6fe0a55e..00eb97ff 100644 --- a/src/libicalvcal/vcc.c +++ b/src/libicalvcal/vcc.c @@ -987,6 +987,10 @@ void initLex(const char *inputstring, unsigned long inputlen, FILE *inputfile) } static void finiLex() { + VObject* vobj; + while(vobj = popVObject(), vobj) { + cleanVObject(vobj); + } free(lexBuf.strs); } @@ -1298,9 +1302,12 @@ static VObject* Parse_MIMEHelper() mime_lineNum = 1; vObjList = 0; curObj = 0; + curProp = 0; - if (yyparse() != 0) + if (yyparse() != 0) { + finiLex(); return 0; + } finiLex(); return vObjList; diff --git a/src/libicalvcal/vcc.y b/src/libicalvcal/vcc.y index 97c50ec7..030ca442 100644 --- a/src/libicalvcal/vcc.y +++ b/src/libicalvcal/vcc.y @@ -815,6 +815,10 @@ void initLex(const char *inputstring, unsigned long inputlen, FILE *inputfile) } static void finiLex() { + VObject* vobj; + while(vobj = popVObject(), vobj) { + cleanVObject(vobj); + } free(lexBuf.strs); } @@ -1126,9 +1130,12 @@ static VObject* Parse_MIMEHelper() mime_lineNum = 1; vObjList = 0; curObj = 0; + curProp = 0; - if (yyparse() != 0) + if (yyparse() != 0) { + finiLex(); return 0; + } finiLex(); return vObjList; |