Mercurial > libpst
view src/common.h @ 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 | 5a82d41c883d |
children | 506e266f930d |
line wrap: on
line source
#ifndef __PST_COMMON_H #define __PST_COMMON_H #include <stdlib.h> #include <stdio.h> #include <stdarg.h> #include <time.h> #ifndef _MSC_VER #include <stdint.h> #include <inttypes.h> #else typedef signed char int8_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef short int16_t; typedef unsigned int uint32_t; typedef int int32_t; typedef unsigned long long uint64_t; typedef long long int64_t; #endif #ifndef _WIN32 typedef struct { uint32_t dwLowDateTime; uint32_t dwHighDateTime; } FILETIME; // According to Jan Wolter, sys/param.h is the most portable source of endian // information on UNIX systems. see http://www.unixpapa.com/incnote/byteorder.html #include <sys/param.h> #else #include <windows.h> #endif #if defined(_WIN32) || defined(__DJGPP__) #ifndef LITTLE_ENDIAN #define LITTLE_ENDIAN 1234 #endif #ifndef BIG_ENDIAN #define BIG_ENDIAN 4321 #endif #define BYTE_ORDER LITTLE_ENDIAN #endif #endif #if defined (__SVR4) && defined (__sun) #define LITTLE_ENDIAN 1234 #define BYTE_ORDER LITTLE_ENDIAN #endif