Skip to content

Commit

Permalink
Merge pull request #5944 from alexbrault/5941-nested-symbolset-leak
Browse files Browse the repository at this point in the history
Support nested SYMBOLSETs without leaking (Fixes #5941 and #5942)
  • Loading branch information
dmorissette committed Jan 2, 2020
2 parents f90be6a + ec81ba7 commit 72c7845
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 1 deletion.
12 changes: 11 additions & 1 deletion mapsymbol.c
Expand Up @@ -558,6 +558,7 @@ int loadSymbolSet(symbolSetObj *symbolset, mapObj *map)
char szPath[MS_MAXPATHLEN], *pszSymbolPath=NULL;

int foundSymbolSetToken=MS_FALSE;
int symbolSetLevel=0;
int token;

if(!symbolset) {
Expand Down Expand Up @@ -598,12 +599,20 @@ int loadSymbolSet(symbolSetObj *symbolset, mapObj *map)

switch(token) {
case(END):
if (--symbolSetLevel < 0) {
msSetError(MS_IDENTERR, "END token found outside SYMBOLSET context. When nesting multiple SYMBOLSETs, make sure the SYMBOLSET/END pairs match.", "msLoadSymbolSet()");
status = -1;
}
break;
case(EOF):
status = 0;
break;
case(SYMBOL):
/* Allocate/init memory for new symbol if needed */
if (msGrowSymbolSet(symbolset) == NULL) {
if (symbolSetLevel == 0) {
msSetError(MS_IDENTERR, "SYMBOL token found outside SYMBOLSET context. When nesting multiple SYMBOLSETs, make sure the SYMBOLSET/END pairs match.", "msLoadSymbolSet()");
status = -1;
} else if (msGrowSymbolSet(symbolset) == NULL) {
status = -1;
} else if((loadSymbol((symbolset->symbol[symbolset->numsymbols]), pszSymbolPath) == -1))
status = -1;
Expand All @@ -612,6 +621,7 @@ int loadSymbolSet(symbolSetObj *symbolset, mapObj *map)
break;
case(SYMBOLSET):
foundSymbolSetToken = MS_TRUE;
symbolSetLevel++;
break;
default:
msSetError(MS_IDENTERR, "Parsing error near (%s):(line %d)", "loadSymbolSet()", msyystring_buffer, msyylineno);
Expand Down
2 changes: 2 additions & 0 deletions msautotest/misc/empty_symbolset
@@ -0,0 +1,2 @@
SYMBOLSET
END
Binary file added msautotest/misc/expected/nested_symbolset.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
34 changes: 34 additions & 0 deletions msautotest/misc/nested_symbolset.map
@@ -0,0 +1,34 @@
#
# Test that nested symbolsets are parsed completely
#
MAP

IMAGETYPE PNG
SIZE 10 10
EXTENT 0 0 400 300
SHAPEPATH "../misc/data"
FONTSET "../misc/fonts.lst"
SYMBOLSET "root_nested_symbolset"

LAYER
TYPE POINT

STATUS ON
CLASS
NAME "test1"
STYLE
SYMBOL "vector arrow"
COLOR 0 0 0
SIZE 5
ANGLE 45
END
END

FEATURE
POINTS
200 200
END
END
END

END
4 changes: 4 additions & 0 deletions msautotest/misc/root_nested_symbolset
@@ -0,0 +1,4 @@
SYMBOLSET
INCLUDE 'empty_symbolset'
INCLUDE '../renderers/symbolset'
END

0 comments on commit 72c7845

Please sign in to comment.