/** * Selects application uid from Nokia-MIDlet-UID attribute. * * @return uid if attribute specifies it, null otherwise. * @throws InstallerException if attribute exists and is not valid or specified uid is already in * use. */ private Uid selectAppUidFromAttribute(InstallBall aBall, int aIndex) { Uid uid = null; String appUidAttrName = MIDLET_UID_ATTR_NAME + aIndex; String appUidAttrValue = aBall.getAttributeValue(appUidAttrName); if (appUidAttrValue != null) { uid = PlatformUid.createUid(appUidAttrValue); if (uid == null) { Log.logError("Invalid " + appUidAttrName + " attribute value: " + appUidAttrValue); throw new InvalidAttributeException( InstallerErrorMessage.INST_CORRUPT_PKG, null, InstallerDetailedErrorMessage.ATTR_BAD_SYNTAX, new String[] {appUidAttrName}, (aBall.attributeExistsInJad(appUidAttrName) ? OtaStatusCode.INVALID_DESCRIPTOR : OtaStatusCode.INVALID_JAR)); } boolean uidInJad = aBall.attributeExistsInJad(appUidAttrName); // If jar file is not yet present, assume that uid // will be present in jar. boolean uidInJar = true; if (aBall.iJarFilename != null) { uidInJar = aBall.attributeExistsInJar(appUidAttrName); } if (uidInJar && !uidInJad && aBall.iJadAttributes != null) { // If Uid is specified in jar but not in jad // it must be ignored. Getting applications // through Java Verified process requires // that applications using protected Uids // can be installed as untrusted (without jad). Log.logWarning(appUidAttrName + " attribute present in jar but not in jad, ignoring it"); uid = null; } if (uid != null) { // Check that uid is valid. PlatformUid.checkValidity( appUidAttrName, uid, aBall.iSuite.isTrusted(), uidInJad, uidInJar); // Check that uid is not already in use. if (appUidInUse(uid, aBall) || appUidInUse(uid, aBall.iSuite)) { Log.logError("Uid " + uid + " is already in use"); throw new InvalidAttributeException( InstallerErrorMessage.INST_CORRUPT_PKG, null, InstallerDetailedErrorMessage.ATTR_HANDLING_FAILED, new String[] {appUidAttrName}, (aBall.attributeExistsInJad(appUidAttrName) ? OtaStatusCode.INVALID_DESCRIPTOR : OtaStatusCode.INVALID_JAR)); } } aBall.log("Selected app uid from " + appUidAttrName + " attribute: " + uid); } return uid; }
/** Reads a Uid from specified InputStream. */ private static Uid readUid(InputStream aInputStream) throws IOException { int uid = 0; for (int i = 0; i < 4; i++) { uid |= (aInputStream.read() << i * 8); } return PlatformUid.createUid(uid); }