annotate src/timeconv.c @ 359:a3e674fade6c

From Jeffrey Morlan: pst_parse_block misreads Table Contexts (aka "type 2") with a multi-block Row Matrix ("ind2"). Rows are never split between blocks - every block except the last has padding at the end which should be ignored. I've only seen this affect the recipients table, but presumably it could affect attachments too. This was causing out-of-bounds memory ranges to be returned from pst_getBlockOffset and later access; patch fixes both the table reading issue and adds a missing bounds check to pst_getBlockOffset (so as not to risk a segfault if the PST is corrupted).
author Carl Byington <carl@five-ten-sg.com>
date Wed, 06 Jul 2016 10:20:12 -0700
parents e3a46f66332b
children ad7b880ad3d1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
122
bdb38b434c0a more changes from Fridrich Strba to avoid installing our config.h
Carl Byington <carl@five-ten-sg.com>
parents: 118
diff changeset
1 #include "define.h"
bdb38b434c0a more changes from Fridrich Strba to avoid installing our config.h
Carl Byington <carl@five-ten-sg.com>
parents: 118
diff changeset
2
182
b65e8d0a088a more cleanup on external names in the shared object file
Carl Byington <carl@five-ten-sg.com>
parents: 172
diff changeset
3
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
4
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
5 char* pst_fileTimeToAscii(const FILETIME* filetime, char* result) {
182
b65e8d0a088a more cleanup on external names in the shared object file
Carl Byington <carl@five-ten-sg.com>
parents: 172
diff changeset
6 time_t t;
b65e8d0a088a more cleanup on external names in the shared object file
Carl Byington <carl@five-ten-sg.com>
parents: 172
diff changeset
7 t = pst_fileTimeToUnixTime(filetime);
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
8 return ctime_r(&t, result);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
9 }
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
10
182
b65e8d0a088a more cleanup on external names in the shared object file
Carl Byington <carl@five-ten-sg.com>
parents: 172
diff changeset
11
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
12 void pst_fileTimeToStructTM (const FILETIME *filetime, struct tm *result) {
172
6954d315aaa8 move version-info into main configure.in, and set it properly.
Carl Byington <carl@five-ten-sg.com>
parents: 129
diff changeset
13 time_t t1;
182
b65e8d0a088a more cleanup on external names in the shared object file
Carl Byington <carl@five-ten-sg.com>
parents: 172
diff changeset
14 t1 = pst_fileTimeToUnixTime(filetime);
199
e3a46f66332b more changes in recurrence decoding
Carl Byington <carl@five-ten-sg.com>
parents: 198
diff changeset
15 gmtime_r(&t1, result);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
16 }
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
17
182
b65e8d0a088a more cleanup on external names in the shared object file
Carl Byington <carl@five-ten-sg.com>
parents: 172
diff changeset
18
b65e8d0a088a more cleanup on external names in the shared object file
Carl Byington <carl@five-ten-sg.com>
parents: 172
diff changeset
19 time_t pst_fileTimeToUnixTime(const FILETIME *filetime)
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
20 {
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 182
diff changeset
21 uint64_t t = filetime->dwHighDateTime;
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 182
diff changeset
22 const uint64_t bias = 11644473600LL;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
23 t <<= 32;
182
b65e8d0a088a more cleanup on external names in the shared object file
Carl Byington <carl@five-ten-sg.com>
parents: 172
diff changeset
24 t += filetime->dwLowDateTime;
198
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 182
diff changeset
25 t /= 10000000;
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 182
diff changeset
26 t -= bias;
7c60d6d1c681 decode more recurrence mapi elements
Carl Byington <carl@five-ten-sg.com>
parents: 182
diff changeset
27 return ((t > (uint64_t)0x000000007fffffff) && (sizeof(time_t) <= 4)) ? 0 : (time_t)t;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
28 }
118
0f1492b7fe8b patch from Fridrich Strba for building on mingw and general cleanup of autoconf files
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
29