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
	 Hans-Christoph Steiner
						Hans-Christoph Steiner