Initial fix for berbuf alignment bug (ITS#2760)

Needs to be applied to other stack allocated berbufs.
This commit is contained in:
Kurt Zeilenga 2003-10-12 04:45:09 +00:00
parent d03c83f077
commit 767cf365ea
4 changed files with 25 additions and 14 deletions

View file

@ -158,6 +158,17 @@ extern char ber_pvt_opt_on;
#define LBER_OPT_ERROR (-1) #define LBER_OPT_ERROR (-1)
#define LBER_ELEMENT_SIZEOF (256) /* must be >= sizeof(BerElement) */ #define LBER_ELEMENT_SIZEOF (256) /* must be >= sizeof(BerElement) */
typedef union ber_buffer_u {
char charbuf[LBER_ELEMENT_SIZEOF];
/* force alignment */
int intbuf;
long longbuf;
float floatbuf;
double doublebuf;
char* ptrbuf;
} BerElementBuffer;
typedef struct berelement BerElement; typedef struct berelement BerElement;
typedef struct sockbuf Sockbuf; typedef struct sockbuf Sockbuf;
typedef struct seqorset Seqorset; typedef struct seqorset Seqorset;

View file

@ -83,8 +83,8 @@ int slap_passwd_parse( struct berval *reqdata,
int rc = LDAP_SUCCESS; int rc = LDAP_SUCCESS;
ber_tag_t tag; ber_tag_t tag;
ber_len_t len; ber_len_t len;
char berbuf[LBER_ELEMENT_SIZEOF]; BerElementBuffer berbuf;
BerElement *ber = (BerElement *)berbuf; BerElement *ber = (BerElement *)&berbuf;
if( reqdata == NULL ) { if( reqdata == NULL ) {
return LDAP_SUCCESS; return LDAP_SUCCESS;
@ -224,9 +224,9 @@ struct berval * slap_passwd_return(
{ {
int rc; int rc;
struct berval *bv = NULL; struct berval *bv = NULL;
char berbuf[LBER_ELEMENT_SIZEOF]; BerElementBuffer berbuf;
/* opaque structure, size unknown but smaller than berbuf */ /* opaque structure, size unknown but smaller than berbuf */
BerElement *ber = (BerElement *)berbuf; BerElement *ber = (BerElement *)&berbuf;
assert( cred != NULL ); assert( cred != NULL );

View file

@ -223,8 +223,8 @@ send_ldap_response(
Operation *op, Operation *op,
SlapReply *rs ) SlapReply *rs )
{ {
char berbuf[LBER_ELEMENT_SIZEOF]; BerElementBuffer berbuf;
BerElement *ber = (BerElement *)berbuf; BerElement *ber = (BerElement *) &berbuf;
int rc; int rc;
long bytes; long bytes;
@ -602,8 +602,8 @@ slap_send_ldap_intermediate( Operation *op, SlapReply *rs )
int int
slap_send_search_entry( Operation *op, SlapReply *rs ) slap_send_search_entry( Operation *op, SlapReply *rs )
{ {
char berbuf[LBER_ELEMENT_SIZEOF]; BerElementBuffer berbuf;
BerElement *ber = (BerElement *)berbuf; BerElement *ber = (BerElement *) &berbuf;
Attribute *a, *aa; Attribute *a, *aa;
int i, j, rc=-1, bytes; int i, j, rc=-1, bytes;
char *edn; char *edn;
@ -1193,8 +1193,8 @@ error_return:;
int int
slap_send_search_reference( Operation *op, SlapReply *rs ) slap_send_search_reference( Operation *op, SlapReply *rs )
{ {
char berbuf[LBER_ELEMENT_SIZEOF]; BerElementBuffer berbuf;
BerElement *ber = (BerElement *)berbuf; BerElement *ber = (BerElement *) &berbuf;
int rc = 0; int rc = 0;
int bytes; int bytes;
void *mark; void *mark;
@ -1437,8 +1437,8 @@ int slap_read_controls(
{ {
int rc; int rc;
struct berval bv; struct berval bv;
char berbuf[LBER_ELEMENT_SIZEOF]; BerElementBuffer berbuf;
BerElement *ber = (BerElement *) berbuf; BerElement *ber = (BerElement *) &berbuf;
LDAPControl c; LDAPControl c;
ber_len_t siz, len; ber_len_t siz, len;
Operation myop; Operation myop;

View file

@ -28,8 +28,8 @@ str2filter_x( Operation *op, const char *str )
{ {
int rc; int rc;
Filter *f = NULL; Filter *f = NULL;
char berbuf[LBER_ELEMENT_SIZEOF]; BerElementBuffer berbuf;
BerElement *ber = (BerElement *)berbuf; BerElement *ber = (BerElement *)&berbuf;
const char *text = NULL; const char *text = NULL;
#ifdef NEW_LOGGING #ifdef NEW_LOGGING