Skip to content

Commit 3c1a5c6

Browse files
Require url-based symbol values to be pre-defined. (#6301)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 6d06cfa commit 3c1a5c6

File tree

1 file changed

+8
-18
lines changed

1 file changed

+8
-18
lines changed

mapfile.c

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3375,12 +3375,15 @@ int loadClass(classObj *class, layerObj *layer)
33753375
static int classResolveSymbolNames(classObj *class)
33763376
{
33773377
int i,j;
3378+
int try_addimage_if_notfound = MS_TRUE;
3379+
3380+
if(msyysource == MS_URL_TOKENS) try_addimage_if_notfound = MS_FALSE;
33783381

33793382
/* step through styles and labels to resolve symbol names */
33803383
/* class styles */
33813384
for(i=0; i<class->numstyles; i++) {
33823385
if(class->styles[i]->symbolname) {
3383-
if((class->styles[i]->symbol = msGetSymbolIndex(&(class->layer->map->symbolset), class->styles[i]->symbolname, MS_TRUE)) == -1) {
3386+
if((class->styles[i]->symbol = msGetSymbolIndex(&(class->layer->map->symbolset), class->styles[i]->symbolname, try_addimage_if_notfound)) == -1) {
33843387
msSetError(MS_MISCERR, "Undefined symbol \"%s\" in class, style %d of layer %s.", "classResolveSymbolNames()", class->styles[i]->symbolname, i, class->layer->name);
33853388
return MS_FAILURE;
33863389
}
@@ -3391,7 +3394,7 @@ static int classResolveSymbolNames(classObj *class)
33913394
for(i=0; i<class->numlabels; i++) {
33923395
for(j=0; j<class->labels[i]->numstyles; j++) {
33933396
if(class->labels[i]->styles[j]->symbolname) {
3394-
if((class->labels[i]->styles[j]->symbol = msGetSymbolIndex(&(class->layer->map->symbolset), class->labels[i]->styles[j]->symbolname, MS_TRUE)) == -1) {
3397+
if((class->labels[i]->styles[j]->symbol = msGetSymbolIndex(&(class->layer->map->symbolset), class->labels[i]->styles[j]->symbolname, try_addimage_if_notfound)) == -1) {
33953398
msSetError(MS_MISCERR, "Undefined symbol \"%s\" in class, label style %d of layer %s.", "classResolveSymbolNames()", class->labels[i]->styles[j]->symbolname, j, class->layer->name);
33963399
return MS_FAILURE;
33973400
}
@@ -6738,22 +6741,9 @@ int msUpdateMapFromURL(mapObj *map, char *variable, char *string)
67386741
if(msUpdateLayerFromString((GET_LAYER(map, i)), string, MS_TRUE) != MS_SUCCESS) return MS_FAILURE;
67396742
}
67406743

6741-
/* make sure any symbol names for this layer have been resolved (bug #2700) */
6742-
for(j=0; j<GET_LAYER(map, i)->numclasses; j++) {
6743-
for(k=0; k<GET_LAYER(map, i)->class[j]->numstyles; k++) {
6744-
if(GET_LAYER(map, i)->class[j]->styles[k]->symbolname && GET_LAYER(map, i)->class[j]->styles[k]->symbol == 0) {
6745-
if((GET_LAYER(map, i)->class[j]->styles[k]->symbol = msGetSymbolIndex(&(map->symbolset), GET_LAYER(map, i)->class[j]->styles[k]->symbolname, MS_TRUE)) == -1) {
6746-
msSetError(MS_MISCERR, "Undefined symbol \"%s\" in class %d, style %d of layer %s.", "msUpdateMapFromURL()", GET_LAYER(map, i)->class[j]->styles[k]->symbolname, j, k, GET_LAYER(map, i)->name);
6747-
return MS_FAILURE;
6748-
}
6749-
}
6750-
if(!MS_IS_VALID_ARRAY_INDEX(GET_LAYER(map, i)->class[j]->styles[k]->symbol, map->symbolset.numsymbols)) {
6751-
msSetError(MS_MISCERR, "Invalid symbol index in class %d, style %d of layer %s.", "msUpdateMapFromURL()", j, k, GET_LAYER(map, i)->name);
6752-
return MS_FAILURE;
6753-
}
6754-
}
6755-
}
6756-
6744+
// make sure symbols are resolved
6745+
if (resolveSymbolNames(map) == MS_FAILURE) return MS_FAILURE;
6746+
67576747
break;
67586748
case(LEGEND):
67596749
if(msyylex() == LABEL) {

0 commit comments

Comments
 (0)