mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
Use inline functions to convert buffer data to scalars.
* common/host2net.h (buf16_to_ulong, buf16_to_uint): New.
(buf16_to_ushort, buf16_to_u16): New.
(buf32_to_size_t, buf32_to_ulong, buf32_to_uint, buf32_to_u32): New.
--
Commit 91b826a388
was not enough to
avoid all sign extension on shift problems. Hanno Böck found a case
with an invalid read due to this problem. To fix that once and for
all almost all uses of "<< 24" and "<< 8" are changed by this patch to
use an inline function from host2net.h.
Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
f0f71a721c
commit
2183683bd6
31 changed files with 220 additions and 210 deletions
|
@ -25,30 +25,14 @@
|
|||
|
||||
#include "keybox-defs.h"
|
||||
#include <gcrypt.h>
|
||||
#include "host2net.h"
|
||||
|
||||
/* Argg, we can't include ../common/util.h */
|
||||
char *bin2hexcolon (const void *buffer, size_t length, char *stringbuf);
|
||||
|
||||
#define get32(a) buf32_to_ulong ((a))
|
||||
#define get16(a) buf16_to_ulong ((a))
|
||||
|
||||
static ulong
|
||||
get32 (const byte *buffer)
|
||||
{
|
||||
ulong a;
|
||||
a = *buffer << 24;
|
||||
a |= buffer[1] << 16;
|
||||
a |= buffer[2] << 8;
|
||||
a |= buffer[3];
|
||||
return a;
|
||||
}
|
||||
|
||||
static ulong
|
||||
get16 (const byte *buffer)
|
||||
{
|
||||
ulong a;
|
||||
a = *buffer << 8;
|
||||
a |= buffer[1];
|
||||
return a;
|
||||
}
|
||||
|
||||
void
|
||||
print_string (FILE *fp, const byte *p, size_t n, int delim)
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
#include <gcrypt.h>
|
||||
|
||||
#include "../common/openpgpdefs.h"
|
||||
|
||||
#include "host2net.h"
|
||||
|
||||
/* Assume a valid OpenPGP packet at the address pointed to by BUFBTR
|
||||
which has a maximum length as stored at BUFLEN. Return the header
|
||||
|
@ -94,10 +94,8 @@ next_packet (unsigned char const **bufptr, size_t *buflen,
|
|||
{
|
||||
if (len <4 )
|
||||
return gpg_error (GPG_ERR_INV_PACKET); /* No length bytes. */
|
||||
pktlen = (*buf++) << 24;
|
||||
pktlen |= (*buf++) << 16;
|
||||
pktlen |= (*buf++) << 8;
|
||||
pktlen |= (*buf++);
|
||||
pktlen = buf32_to_ulong (buf);
|
||||
buf += 4;
|
||||
len -= 4;
|
||||
}
|
||||
else /* Partial length encoding is not allowed for key packets. */
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
#include "keybox-defs.h"
|
||||
#include <gcrypt.h>
|
||||
|
||||
#include "host2net.h"
|
||||
|
||||
#define xtoi_1(p) (*(p) <= '9'? (*(p)- '0'): \
|
||||
*(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
|
||||
|
@ -42,27 +42,8 @@ struct sn_array_s {
|
|||
};
|
||||
|
||||
|
||||
|
||||
static inline ulong
|
||||
get32 (const byte *buffer)
|
||||
{
|
||||
ulong a;
|
||||
a = *buffer << 24;
|
||||
a |= buffer[1] << 16;
|
||||
a |= buffer[2] << 8;
|
||||
a |= buffer[3];
|
||||
return a;
|
||||
}
|
||||
|
||||
static inline ulong
|
||||
get16 (const byte *buffer)
|
||||
{
|
||||
ulong a;
|
||||
a = *buffer << 8;
|
||||
a |= buffer[1];
|
||||
return a;
|
||||
}
|
||||
|
||||
#define get32(a) buf32_to_ulong ((a))
|
||||
#define get16(a) buf16_to_ulong ((a))
|
||||
|
||||
|
||||
static inline unsigned int
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
|
||||
#include "keybox-defs.h"
|
||||
#include "../common/sysutils.h"
|
||||
#include "../common/host2net.h"
|
||||
|
||||
#define EXTSEP_S "."
|
||||
|
||||
|
@ -734,8 +735,7 @@ keybox_compress (KEYBOX_HANDLE hd)
|
|||
buffer = _keybox_get_blob_image (blob, &length);
|
||||
if (length > 4 && buffer[4] == KEYBOX_BLOBTYPE_HEADER)
|
||||
{
|
||||
u32 last_maint = ((buffer[20] << 24) | (buffer[20+1] << 16)
|
||||
| (buffer[20+2] << 8) | (buffer[20+3]));
|
||||
u32 last_maint = buf32_to_u32 (buffer+20);
|
||||
|
||||
if ( (last_maint + 3*3600) > time (NULL) )
|
||||
{
|
||||
|
@ -811,7 +811,7 @@ keybox_compress (KEYBOX_HANDLE hd)
|
|||
rc = gpg_error (GPG_ERR_BUG);
|
||||
break;
|
||||
}
|
||||
blobflags = ((buffer[pos] << 8) | (buffer[pos+1]));
|
||||
blobflags = buf16_to_uint (buffer+pos);
|
||||
if ((blobflags & KEYBOX_FLAG_BLOB_EPHEMERAL))
|
||||
{
|
||||
/* This is an ephemeral blob. */
|
||||
|
@ -820,8 +820,7 @@ keybox_compress (KEYBOX_HANDLE hd)
|
|||
|| size != 4)
|
||||
created_at = 0; /* oops. */
|
||||
else
|
||||
created_at = ((buffer[pos] << 24) | (buffer[pos+1] << 16)
|
||||
| (buffer[pos+2] << 8) | (buffer[pos+3]));
|
||||
created_at = buf32_to_u32 (buffer+pos);
|
||||
|
||||
if (created_at && created_at < cut_time)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue