Verified present on master 4c95a5bf.
Defect
iccPawgReport check C5 ("Is the profile free of additional tags not required for profile
class...") warns on any profile carrying a cicpTag:
[WARN] C5 ...
standard tags outside the local class rule table: 'cicp'
icSigCicpTag is a v4.4 tag that has been on master for a long time
(IccProfLib/icProfileHeader.h:387, 'cicp' = 0x63696370), but it is absent from
kCommonOptional in Tools/CmdLine/IccPawgReport/PawgReport.cpp:1104-1134. The array lists
29 optional tags; icSigCicpTag is not among them, and the string cicp does not appear
anywhere in that file.
Why it falls through to a warning rather than being treated as private
The non-obvious part. IsSpecTag() (PawgReport.cpp:322) is:
bool IsSpecTag(icTagSignature sig)
{
CIccInfo info;
const char *name = info.GetTagSigName(sig);
return name && !StartsWith(name, "Unknown");
}
CIccInfo::GetTagSigName resolves through CIccTagCreator::GetTagSigName, and
IccProfLib/IccTagFactory.cpp:138 maps {icSigCicpTag, "cicpTag"}. The name does not start
with "Unknown", so IsSpecTag() returns true — the tag is not bucketed as a private
tag. It therefore falls straight through IsAllowedForClass() to the C5 warning. A conforming
profile is reported as non-conforming.
Not HDR-specific
This hits ordinary SDR profiles. A plain BT.709 display profile — cicpTag with
TransferCharacteristics="1", no HDR metadata of any kind — draws the same warning; the
mechanism above is class-wide and has nothing to do with the transfer characteristic. Any
profile author who adds a cicpTag to a display profile gets a spurious conformance warning
from the ICC's own assessment tool.
Suggested fix
Add icSigCicpTag to kCommonOptional, with a comment recording why the tag reaches the
warning at all (recognised by IsSpecTag(), so never treated as private) — that is the part
that is not obvious from reading the array.
Note on testing
A regression test wants a valid profile carrying a cicpTag asserted to produce no C5
warning. Note the corpus does not currently offer a convenient one: every tracked XML carrying
a cicpTag is under Testing/HDR/, and
.github/ci/test-data/ub-cicp-colorprimaries-1346.xml is unsuitable — it is a
deliberately-malformed UB fixture that does not load, so C5 reports [--] rather than a
verdict. An SDR fixture would need to be added.
Why it matters beyond conformance cosmetics
The PAWG report path is consumed downstream (e.g. profiletool), where a false [WARN] on C5
is user-visible for any cicp-carrying profile. It is the kind of finding a user reports as
"your validator is wrong" rather than "my profile is wrong".
Unrelated to #2000 beyond sharing a tag — different file, different failure, no shared code.
Verified present on master
4c95a5bf.Defect
iccPawgReportcheck C5 ("Is the profile free of additional tags not required for profileclass...") warns on any profile carrying a
cicpTag:icSigCicpTagis a v4.4 tag that has been on master for a long time(
IccProfLib/icProfileHeader.h:387,'cicp'=0x63696370), but it is absent fromkCommonOptionalinTools/CmdLine/IccPawgReport/PawgReport.cpp:1104-1134. The array lists29 optional tags;
icSigCicpTagis not among them, and the stringcicpdoes not appearanywhere in that file.
Why it falls through to a warning rather than being treated as private
The non-obvious part.
IsSpecTag()(PawgReport.cpp:322) is:CIccInfo::GetTagSigNameresolves throughCIccTagCreator::GetTagSigName, andIccProfLib/IccTagFactory.cpp:138maps{icSigCicpTag, "cicpTag"}. The name does not startwith
"Unknown", soIsSpecTag()returns true — the tag is not bucketed as a privatetag. It therefore falls straight through
IsAllowedForClass()to the C5 warning. A conformingprofile is reported as non-conforming.
Not HDR-specific
This hits ordinary SDR profiles. A plain BT.709 display profile —
cicpTagwithTransferCharacteristics="1", no HDR metadata of any kind — draws the same warning; themechanism above is class-wide and has nothing to do with the transfer characteristic. Any
profile author who adds a
cicpTagto a display profile gets a spurious conformance warningfrom the ICC's own assessment tool.
Suggested fix
Add
icSigCicpTagtokCommonOptional, with a comment recording why the tag reaches thewarning at all (recognised by
IsSpecTag(), so never treated as private) — that is the partthat is not obvious from reading the array.
Note on testing
A regression test wants a valid profile carrying a
cicpTagasserted to produce no C5warning. Note the corpus does not currently offer a convenient one: every tracked XML carrying
a
cicpTagis underTesting/HDR/, and.github/ci/test-data/ub-cicp-colorprimaries-1346.xmlis unsuitable — it is adeliberately-malformed UB fixture that does not load, so C5 reports
[--]rather than averdict. An SDR fixture would need to be added.
Why it matters beyond conformance cosmetics
The PAWG report path is consumed downstream (e.g.
profiletool), where a false[WARN]on C5is user-visible for any cicp-carrying profile. It is the kind of finding a user reports as
"your validator is wrong" rather than "my profile is wrong".
Unrelated to #2000 beyond sharing a tag — different file, different failure, no shared code.