Skip to content

iccPawgReport C5 false-positives on any profile carrying a cicpTag (missing from kCommonOptional) #2001

Description

@colourbill-ctrl

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.

Metadata

Metadata

Labels

TestingCTest, regression, or test coverageciContinuous integration workflow changesneeds-triageMaintainer triage required

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions