Fix #108980: OpenEXR channels with unknown channel names fail to load

The example EXR is non-standard, but we may as well load the data anyway even
if we don't know the type of channels.
This commit is contained in:
Brecht Van Lommel
2023-06-14 17:06:48 +02:00
parent 5b39f39695
commit ea3cbf4942

View File

@@ -1516,8 +1516,6 @@ static int imb_exr_split_channel_name(ExrChannel *echan, char *layname, char *pa
echan->chan_id = BLI_toupper_ascii(channelname[0]);
}
else if (len > 1) {
bool ok = false;
if (len == 2) {
/* Some multi-layers are using two-letter channels name,
* like, MX or NZ, which is basically has structure of
@@ -1530,33 +1528,28 @@ static int imb_exr_split_channel_name(ExrChannel *echan, char *layname, char *pa
const char chan_id = BLI_toupper_ascii(channelname[1]);
if (ELEM(chan_id, 'X', 'Y', 'Z', 'R', 'G', 'B', 'U', 'V', 'A')) {
echan->chan_id = chan_id;
ok = true;
}
else {
echan->chan_id = 'X'; /* Default to X if unknown. */
}
}
else if (BLI_strcaseeq(channelname, "red")) {
echan->chan_id = 'R';
ok = true;
}
else if (BLI_strcaseeq(channelname, "green")) {
echan->chan_id = 'G';
ok = true;
}
else if (BLI_strcaseeq(channelname, "blue")) {
echan->chan_id = 'B';
ok = true;
}
else if (BLI_strcaseeq(channelname, "alpha")) {
echan->chan_id = 'A';
ok = true;
}
else if (BLI_strcaseeq(channelname, "depth")) {
echan->chan_id = 'Z';
ok = true;
}
if (ok == false) {
printf("multilayer read: unknown channel token: %s\n", channelname);
return 0;
else {
echan->chan_id = 'X'; /* Default to X if unknown. */
}
}
end -= len + 1; /* +1 to skip '.' separator */