purge unused repo instance variable from UpdateException
The repo instance variable has long since been unused, but has just been left there as a vestige. Now its presence is blocking RepoUpdater. getSigningCertFromJar() from being a static method that can be reused when checking for repos on SD Cards and other removable storage devices.
This commit is contained in:
		
							parent
							
								
									34381f9cfb
								
							
						
					
					
						commit
						dd48103516
					
				@ -135,7 +135,7 @@ public class IndexV1Updater extends RepoUpdater {
 | 
			
		||||
                    if (downloader != null) {
 | 
			
		||||
                        FileUtils.deleteQuietly(downloader.outputFile);
 | 
			
		||||
                    }
 | 
			
		||||
                    throw new RepoUpdater.UpdateException(repo, "Error getting index file", e2);
 | 
			
		||||
                    throw new RepoUpdater.UpdateException("Error getting index file", e2);
 | 
			
		||||
                } catch (InterruptedException e2) {
 | 
			
		||||
                    // ignored if canceled, the local database just won't be updated
 | 
			
		||||
                }
 | 
			
		||||
@ -144,7 +144,7 @@ public class IndexV1Updater extends RepoUpdater {
 | 
			
		||||
            if (downloader != null) {
 | 
			
		||||
                FileUtils.deleteQuietly(downloader.outputFile);
 | 
			
		||||
            }
 | 
			
		||||
            throw new RepoUpdater.UpdateException(repo, "Error getting index file", e);
 | 
			
		||||
            throw new RepoUpdater.UpdateException("Error getting index file", e);
 | 
			
		||||
        } catch (InterruptedException e) {
 | 
			
		||||
            // ignored if canceled, the local database just won't be updated
 | 
			
		||||
        }
 | 
			
		||||
@ -236,7 +236,7 @@ public class IndexV1Updater extends RepoUpdater {
 | 
			
		||||
        long timestamp = (Long) repoMap.get("timestamp") / 1000;
 | 
			
		||||
 | 
			
		||||
        if (repo.timestamp > timestamp) {
 | 
			
		||||
            throw new RepoUpdater.UpdateException(repo, "index.jar is older that current index! "
 | 
			
		||||
            throw new RepoUpdater.UpdateException("index.jar is older that current index! "
 | 
			
		||||
                    + timestamp + " < " + repo.timestamp);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -410,16 +410,14 @@ public class IndexV1Updater extends RepoUpdater {
 | 
			
		||||
        String certFromJar = Hasher.hex(rawCertFromJar);
 | 
			
		||||
 | 
			
		||||
        if (TextUtils.isEmpty(certFromJar)) {
 | 
			
		||||
            throw new SigningException(repo,
 | 
			
		||||
                    SIGNED_FILE_NAME + " must have an included signing certificate!");
 | 
			
		||||
            throw new SigningException(SIGNED_FILE_NAME + " must have an included signing certificate!");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (repo.signingCertificate == null) {
 | 
			
		||||
            if (repo.fingerprint != null) {
 | 
			
		||||
                String fingerprintFromJar = Utils.calcFingerprint(rawCertFromJar);
 | 
			
		||||
                if (!repo.fingerprint.equalsIgnoreCase(fingerprintFromJar)) {
 | 
			
		||||
                    throw new SigningException(repo,
 | 
			
		||||
                            "Supplied certificate fingerprint does not match!");
 | 
			
		||||
                    throw new SigningException("Supplied certificate fingerprint does not match!");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            Utils.debugLog(TAG, "Saving new signing certificate to database for " + repo.address);
 | 
			
		||||
@ -431,14 +429,14 @@ public class IndexV1Updater extends RepoUpdater {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (TextUtils.isEmpty(repo.signingCertificate)) {
 | 
			
		||||
            throw new SigningException(repo, "A empty repo signing certificate is invalid!");
 | 
			
		||||
            throw new SigningException("A empty repo signing certificate is invalid!");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (repo.signingCertificate.equals(certFromJar)) {
 | 
			
		||||
            return; // we have a match!
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        throw new SigningException(repo, "Signing certificate does not match!");
 | 
			
		||||
        throw new SigningException("Signing certificate does not match!");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -139,7 +139,7 @@ public class RepoUpdater {
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            throw new UpdateException(repo, "Error getting index file", e);
 | 
			
		||||
            throw new UpdateException("Error getting index file", e);
 | 
			
		||||
        } catch (InterruptedException e) {
 | 
			
		||||
            // ignored if canceled, the local database just won't be updated
 | 
			
		||||
            e.printStackTrace();
 | 
			
		||||
@ -202,7 +202,7 @@ public class RepoUpdater {
 | 
			
		||||
        InputStream indexInputStream = null;
 | 
			
		||||
        try {
 | 
			
		||||
            if (downloadedFile == null || !downloadedFile.exists()) {
 | 
			
		||||
                throw new UpdateException(repo, downloadedFile + " does not exist!");
 | 
			
		||||
                throw new UpdateException(downloadedFile + " does not exist!");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Due to a bug in Android 5.0 Lollipop, the inclusion of spongycastle causes
 | 
			
		||||
@ -226,7 +226,7 @@ public class RepoUpdater {
 | 
			
		||||
 | 
			
		||||
            long timestamp = repoDetailsToSave.getAsLong(RepoTable.Cols.TIMESTAMP);
 | 
			
		||||
            if (timestamp < repo.timestamp) {
 | 
			
		||||
                throw new UpdateException(repo, "index.jar is older that current index! "
 | 
			
		||||
                throw new UpdateException("index.jar is older that current index! "
 | 
			
		||||
                        + timestamp + " < " + repo.timestamp);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -237,7 +237,7 @@ public class RepoUpdater {
 | 
			
		||||
            assertSigningCertFromXmlCorrect();
 | 
			
		||||
            commitToDb();
 | 
			
		||||
        } catch (SAXException | ParserConfigurationException | IOException e) {
 | 
			
		||||
            throw new UpdateException(repo, "Error parsing index", e);
 | 
			
		||||
            throw new UpdateException("Error parsing index", e);
 | 
			
		||||
        } finally {
 | 
			
		||||
            FDroidApp.enableSpongyCastleOnLollipop();
 | 
			
		||||
            Utils.closeQuietly(indexInputStream);
 | 
			
		||||
@ -343,22 +343,19 @@ public class RepoUpdater {
 | 
			
		||||
    public static class UpdateException extends Exception {
 | 
			
		||||
 | 
			
		||||
        private static final long serialVersionUID = -4492452418826132803L;
 | 
			
		||||
        public final Repo repo;
 | 
			
		||||
 | 
			
		||||
        public UpdateException(Repo repo, String message) {
 | 
			
		||||
        public UpdateException(String message) {
 | 
			
		||||
            super(message);
 | 
			
		||||
            this.repo = repo;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public UpdateException(Repo repo, String message, Exception cause) {
 | 
			
		||||
        public UpdateException(String message, Exception cause) {
 | 
			
		||||
            super(message, cause);
 | 
			
		||||
            this.repo = repo;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static class SigningException extends UpdateException {
 | 
			
		||||
        public SigningException(Repo repo, String message) {
 | 
			
		||||
            super(repo, "Repository was not signed correctly: " + message);
 | 
			
		||||
        public SigningException(String message) {
 | 
			
		||||
            super("Repository was not signed correctly: " + message);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -367,18 +364,18 @@ public class RepoUpdater {
 | 
			
		||||
     * signing setups that would be valid for a regular jar.  This validates those
 | 
			
		||||
     * restrictions.
 | 
			
		||||
     */
 | 
			
		||||
    X509Certificate getSigningCertFromJar(JarEntry jarEntry) throws SigningException {
 | 
			
		||||
    public static X509Certificate getSigningCertFromJar(JarEntry jarEntry) throws SigningException {
 | 
			
		||||
        final CodeSigner[] codeSigners = jarEntry.getCodeSigners();
 | 
			
		||||
        if (codeSigners == null || codeSigners.length == 0) {
 | 
			
		||||
            throw new SigningException(repo, "No signature found in index");
 | 
			
		||||
            throw new SigningException("No signature found in index");
 | 
			
		||||
        }
 | 
			
		||||
        /* we could in theory support more than 1, but as of now we do not */
 | 
			
		||||
        if (codeSigners.length > 1) {
 | 
			
		||||
            throw new SigningException(repo, "index.jar must be signed by a single code signer!");
 | 
			
		||||
            throw new SigningException("index.jar must be signed by a single code signer!");
 | 
			
		||||
        }
 | 
			
		||||
        List<? extends Certificate> certs = codeSigners[0].getSignerCertPath().getCertificates();
 | 
			
		||||
        if (certs.size() != 1) {
 | 
			
		||||
            throw new SigningException(repo, "index.jar code signers must only have a single certificate!");
 | 
			
		||||
            throw new SigningException("index.jar code signers must only have a single certificate!");
 | 
			
		||||
        }
 | 
			
		||||
        return (X509Certificate) certs.get(0);
 | 
			
		||||
    }
 | 
			
		||||
@ -404,7 +401,7 @@ public class RepoUpdater {
 | 
			
		||||
            String fingerprintFromJar = Utils.calcFingerprint(rawCertFromJar);
 | 
			
		||||
            if (!repo.fingerprint.equalsIgnoreCase(fingerprintFromIndexXml)
 | 
			
		||||
                    || !repo.fingerprint.equalsIgnoreCase(fingerprintFromJar)) {
 | 
			
		||||
                throw new SigningException(repo, "Supplied certificate fingerprint does not match!");
 | 
			
		||||
                throw new SigningException("Supplied certificate fingerprint does not match!");
 | 
			
		||||
            }
 | 
			
		||||
        } // else - no info to check things are valid, so just Trust On First Use
 | 
			
		||||
 | 
			
		||||
@ -435,7 +432,7 @@ public class RepoUpdater {
 | 
			
		||||
        if (TextUtils.isEmpty(repo.signingCertificate)
 | 
			
		||||
                || TextUtils.isEmpty(certFromJar)
 | 
			
		||||
                || TextUtils.isEmpty(certFromIndexXml)) {
 | 
			
		||||
            throw new SigningException(repo, "A empty repo or signing certificate is invalid!");
 | 
			
		||||
            throw new SigningException("A empty repo or signing certificate is invalid!");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // though its called repo.signingCertificate, its actually a X509 certificate
 | 
			
		||||
@ -444,7 +441,7 @@ public class RepoUpdater {
 | 
			
		||||
                && certFromIndexXml.equals(certFromJar)) {
 | 
			
		||||
            return; // we have a match!
 | 
			
		||||
        }
 | 
			
		||||
        throw new SigningException(repo, "Signing certificate does not match!");
 | 
			
		||||
        throw new SigningException("Signing certificate does not match!");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
@ -106,7 +106,7 @@ public class RepoPersister {
 | 
			
		||||
        try {
 | 
			
		||||
            context.getContentResolver().applyBatch(TempApkProvider.getAuthority(), apkOperations);
 | 
			
		||||
        } catch (RemoteException | OperationApplicationException e) {
 | 
			
		||||
            throw new RepoUpdater.UpdateException(repo, "An internal error occurred while updating the database", e);
 | 
			
		||||
            throw new RepoUpdater.UpdateException("An internal error occurred while updating the database", e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -122,7 +122,7 @@ public class RepoPersister {
 | 
			
		||||
            context.getContentResolver().applyBatch(TempAppProvider.getAuthority(), appOperations);
 | 
			
		||||
            return getIdsForPackages(appsToSave);
 | 
			
		||||
        } catch (RemoteException | OperationApplicationException e) {
 | 
			
		||||
            throw new RepoUpdater.UpdateException(repo, "An internal error occurred while updating the database", e);
 | 
			
		||||
            throw new RepoUpdater.UpdateException("An internal error occurred while updating the database", e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user