Bug 379841 - nsIZipReader's last modified time ignores secondsp=Dave Townsend (Mossop) <mossop.bugzilla@blueprintit.co.uk>r=biesi, sr=bsmedberg

This commit is contained in:
asqueella@gmail.com 2007-05-13 05:27:49 -07:00
Родитель 5a7bf31fdf
Коммит 09fbbcf3c3
3 изменённых файлов: 40 добавлений и 7 удалений

Просмотреть файл

@ -1291,15 +1291,25 @@ nsZipReaderCache::Observe(nsISupports *aSubject,
PRTime GetModTime(PRUint16 aDate, PRUint16 aTime)
{
char buffer[17];
PRExplodedTime time;
PR_snprintf(buffer, sizeof(buffer), "%02d/%02d/%04d %02d:%02d",
((aDate >> 5) & 0x0F), (aDate & 0x1F), (aDate >> 9) + 1980,
((aTime >> 11) & 0x1F), ((aTime >> 5) & 0x3F));
time.tm_usec = 0;
time.tm_hour = (aTime >> 11) & 0x1F;
time.tm_min = (aTime >> 5) & 0x3F;
time.tm_sec = (aTime & 0x1F) * 2;
PRTime result;
PR_ParseTimeString(buffer, PR_FALSE, &result);
return result;
time.tm_year = (aDate >> 9) + 1980;
time.tm_month = ((aDate >> 5) & 0x0F)-1;
time.tm_mday = aDate & 0x1F;
time.tm_params.tp_gmt_offset = 0;
time.tm_params.tp_dst_offset = 0;
PR_NormalizeTime(&time, PR_GMTParameters);
time.tm_params = PR_LocalTimeParameters(&time);
return PR_ImplodeTime(&time);
}
////////////////////////////////////////////////////////////////////////////////

Двоичные данные
modules/libjar/test/unit/data/test_bug379841.zip Normal file

Двоичный файл не отображается.

Просмотреть файл

@ -0,0 +1,23 @@
// Regression test for bug 379841 - nsIZipReader's last modified time ignores seconds
const Cc = Components.classes;
const Ci = Components.interfaces;
const path = "modules/libjar/test/unit/data/test_bug379841.zip";
// Retrieved time should be within 2 seconds of original file's time.
const MAX_TIME_DIFF = 2000000;
var ENTRY_NAME = "test";
// Actual time of file was 07 May 2007 14:35:49
var ENTRY_TIME = new Date(2007, 4, 7, 14, 35, 49, 0);
function run_test() {
var file = do_get_file(path);
var zipReader = Cc["@mozilla.org/libjar/zip-reader;1"].
createInstance(Ci.nsIZipReader);
zipReader.open(file);
var entry = zipReader.getEntry(ENTRY_NAME);
var diff = Math.abs(entry.lastModifiedTime - ENTRY_TIME.getTime()*1000);
zipReader.close();
if (diff >= MAX_TIME_DIFF)
do_throw(diff);
}