docs: public void readProperties(ImageInputStream in, int len, ExtendImageHeader imageHeader) throws IOException {
          try {
              if (len < MarkerConstants.ICC_PROFILE_LABEL.length) {
                  // this APP2 marker is not used by ICC profile just ignore
                  return;
              }
  
              if (errorOnParse) {
                  return;
              }
  
              byte[] label = new byte[MarkerConstants.ICC_PROFILE_LABEL.length];
              in.read(label);
              len -= label.length;
  
              if (!isICCProfileLabel(label)) {
                  // just ignore this marker
                  return;
              }
  
              int seq = in.read();
              int nums = in.read();
              len -= 2;
  
              // verify seq
              if (numOfChunks == 0) {
                  numOfChunks = nums;
              } else {
                  if (nums != numOfChunks) {
                      errorOnParse = true;
  
                      return;
                  }
              }
  
              if (seq > numOfChunks) {
                  errorOnParse = true;
  
                  return;
              }
              // end verify
  
              byte[] data = new byte[len];
              in.read(data);
              len = 0;
  
              if (rawProfileData == null) {
                  rawProfileData = new byte[numOfChunks + 1][];
              }
  
              rawProfileData[seq] = data;
              totalLength += data.length;
              numOfRed++;
  
              if (numOfRed == numOfChunks) {
                  imageHeader.setExistProfile(true);
                  imageHeader.setProfileData(getProfileData());
              }
          } finally {
              if (len > 0) {
                  in.skipBytes(len);
              }
          }
  
      }