The following issue has been updated:
Updater: Brett Porter (mailto:[EMAIL PROTECTED])
Date: Wed, 8 Dec 2004 4:43 AM
Changes:
environment changed to
Fix Version changed to 1.1-beta-1
---------------------------------------------------------------------
For a full history of the issue, see:
http://jira.codehaus.org/browse/MAVEN-430?page=history
---------------------------------------------------------------------
View the issue:
http://jira.codehaus.org/browse/MAVEN-430
Here is an overview of the issue:
---------------------------------------------------------------------
Key: MAVEN-430
Summary: maven checks md5 checksums at wrong point.
Type: Bug
Status: Unassigned
Priority: Major
Original Estimate: Unknown
Time Spent: Unknown
Remaining: Unknown
Project: maven
Components:
core
Fix Fors:
1.1-beta-1
Versions:
1.0-beta-10
Assignee:
Reporter: Brian Ewins
Created: Thu, 15 May 2003 11:05 AM
Updated: Wed, 8 Dec 2004 4:43 AM
Description:
In HttpUtils.java, the checksum is downloaded after the jar has already been
moved into the repository. This causes jars to be broken in certain
circumstances; for example, recently ibiblio was down and was returning a '200'
response code with an html page describing the reason for the downtime to every
request. As a result, all SNAPSHOT requests downloaded the html and used this
corrupted file instead of the jar. Placing the md5 check earlier would have
prevented this.
There is also a logic problem in the current implementation: if a file fails to
download (so that tempfile.exists() is false) the section of code which
downloads the md5 checksum to the *real* checksum file succeeds. This could
potentially cause the md5 to become mismatched to the download.
roughly, the code should look like:
public static void getFile( String url,
File destinationFile,
boolean ignoreErrors,
boolean useTimestamp,
String proxyHost,
String proxyPort,
String proxyUserName,
String proxyPassword,
boolean useChecksum )
throws Exception
{
File tempFile = new File(destinationFile.getParentFile(),
destinationFile.getName() + ".incomplete");
//No resume at present.
if (tempFile.exists())
{
tempFile.delete();
if (tempFile.exists()) {
throw new IOException("Unable to remove " +
tempFile.getAbsolutePath());
}
}
// Get the requested file.
getFile( url,
tempFile,
ignoreErrors,
useTimestamp,
proxyHost,
proxyPort,
proxyUserName,
proxyPassword );
//If it was downloaded, copy it across to the snapshot
if (tempFile.exists()) {
// Get the checksum if requested.
if ( useChecksum )
{
File checksumTemp = new File( tempFile + ".md5" );
File checksumFile = new File( destinationFile + ".md5" );
try
{
getFile( url + ".md5",
checksumTemp,
ignoreErrors,
useTimestamp,
proxyHost,
proxyPort,
proxyUserName,
proxyPassword );
if (checksumTemp.exists()) {
// TODO: checksum testing logic goes here.
copyFile(checksumTemp, checksumDest);
copyFile(tempFile, destinationFile);
if (!checksumTemp.delete()) {
throw new IOException("Unable to delete " +
checksumTemp.getAbsolutePath());
}
} else {
// TODO: should do something more useful
// with this case - where checksum is
// unreadable but checksum-checking is on.
}
}
catch ( Exception e )
{
// do nothing we will check later in the process
// for the checksums.
// TODO: fix this. the md5 has been checked.
}
} else {
copyFile(tempFile, destinationFile);
}
if (!tempFile.delete()) {
throw new IOException("Unable to delete " +
tempFile.getAbsolutePath());
}
}
}
// refactored method to do file copying, since logic
// is used again for md5s.
private void copyFile(File tempFile, File destinationFile) {
//This stupidity (not renaming) is caused by Win32 file locking
stupidity.
FileOutputStream fos = null;
FileInputStream fis = null;
try {
fis = new FileInputStream(tempFile);
fos = new FileOutputStream(destinationFile);
transferStream(fis, fos);
} finally {
try {
fis.close();
} catch (Exception ex) {
}
try {
fos.close();
} catch (Exception ex) {
}
}
destinationFile.setLastModified(tempFile.lastModified());
}
---------------------------------------------------------------------
JIRA INFORMATION:
This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
http://jira.codehaus.org/secure/Administrators.jspa
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]