projects
/
oweals
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
make update
[oweals/openssl.git]
/
crypto
/
asn1
/
a_bitstr.c
diff --git
a/crypto/asn1/a_bitstr.c
b/crypto/asn1/a_bitstr.c
index d1d28bd9bb9f6fc57634bcce33e1866434353234..f4ea96cd54e8fd4524f7adc13c7cb78555b578ef 100644
(file)
--- a/
crypto/asn1/a_bitstr.c
+++ b/
crypto/asn1/a_bitstr.c
@@
-60,13
+60,12
@@
#include "cryptlib.h"
#include <openssl/asn1.h>
#include "cryptlib.h"
#include <openssl/asn1.h>
-/* ASN1err(ASN1_F_ASN1_STRING_NEW,ASN1_R_STRING_TOO_SHORT);
- * ASN1err(ASN1_F_D2I_ASN1_BIT_STRING,ASN1_R_EXPECTING_A_BIT_STRING);
- */
+int ASN1_BIT_STRING_set(ASN1_BIT_STRING *x, unsigned char *d, int len)
+{ return M_ASN1_BIT_STRING_set(x, d, len); }
-int i2
d
_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp)
+int i2
c
_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp)
{
{
- int ret,j,
r,
bits,len;
+ int ret,j,bits,len;
unsigned char *p,*d;
if (a == NULL) return(0);
unsigned char *p,*d;
if (a == NULL) return(0);
@@
-99,52
+98,42
@@
int i2d_ASN1_BIT_STRING(ASN1_BIT_STRING *a, unsigned char **pp)
}
else
bits=0;
}
else
bits=0;
+
ret=1+len;
ret=1+len;
-
r=ASN1_object_size(0,ret,V_ASN1_BIT_STRING
);
- if (pp == NULL) return(r);
+
if (pp == NULL) return(ret
);
+
p= *pp;
p= *pp;
- ASN1_put_object(&p,0,ret,V_ASN1_BIT_STRING,V_ASN1_UNIVERSAL);
*(p++)=(unsigned char)bits;
d=a->data;
memcpy(p,d,len);
p+=len;
if (len > 0) p[-1]&=(0xff<<bits);
*pp=p;
*(p++)=(unsigned char)bits;
d=a->data;
memcpy(p,d,len);
p+=len;
if (len > 0) p[-1]&=(0xff<<bits);
*pp=p;
- return(r);
+ return(r
et
);
}
}
-ASN1_BIT_STRING *
d
2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, unsigned char **pp,
- long len
gth
)
+ASN1_BIT_STRING *
c
2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, unsigned char **pp,
+ long len)
{
ASN1_BIT_STRING *ret=NULL;
unsigned char *p,*s;
{
ASN1_BIT_STRING *ret=NULL;
unsigned char *p,*s;
- long len;
- int inf,tag,xclass;
int i;
int i;
- if ((a == NULL) || ((*a) == NULL))
- {
- if ((ret=ASN1_BIT_STRING_new()) == NULL) return(NULL);
- }
- else
- ret=(*a);
-
- p= *pp;
- inf=ASN1_get_object(&p,&len,&tag,&xclass,length);
- if (inf & 0x80)
+ if (len < 1)
{
{
- i=ASN1_R_
BAD_OBJECT_HEADER
;
+ i=ASN1_R_
STRING_TOO_SHORT
;
goto err;
}
goto err;
}
- if (
tag != V_ASN1_BIT_STRING
)
+ if (
(a == NULL) || ((*a) == NULL)
)
{
{
- i=ASN1_R_EXPECTING_A_BIT_STRING;
- goto err;
+ if ((ret=M_ASN1_BIT_STRING_new()) == NULL) return(NULL);
}
}
- if (len < 1) { i=ASN1_R_STRING_TOO_SHORT; goto err; }
+ else
+ ret=(*a);
+ p= *pp;
i= *(p++);
/* We do this to preserve the settings. If we modify
* the settings, via the _set_bit function, we will recalculate
i= *(p++);
/* We do this to preserve the settings. If we modify
* the settings, via the _set_bit function, we will recalculate
@@
-154,7
+143,7
@@
ASN1_BIT_STRING *d2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, unsigned char **pp,
if (len-- > 1) /* using one because of the bits left byte */
{
if (len-- > 1) /* using one because of the bits left byte */
{
- s=(unsigned char *)
M
alloc((int)len);
+ s=(unsigned char *)
OPENSSL_m
alloc((int)len);
if (s == NULL)
{
i=ERR_R_MALLOC_FAILURE;
if (s == NULL)
{
i=ERR_R_MALLOC_FAILURE;
@@
-168,7
+157,7
@@
ASN1_BIT_STRING *d2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, unsigned char **pp,
s=NULL;
ret->length=(int)len;
s=NULL;
ret->length=(int)len;
- if (ret->data != NULL)
Free((char *)
ret->data);
+ if (ret->data != NULL)
OPENSSL_free(
ret->data);
ret->data=s;
ret->type=V_ASN1_BIT_STRING;
if (a != NULL) (*a)=ret;
ret->data=s;
ret->type=V_ASN1_BIT_STRING;
if (a != NULL) (*a)=ret;
@@
-177,7
+166,7
@@
ASN1_BIT_STRING *d2i_ASN1_BIT_STRING(ASN1_BIT_STRING **a, unsigned char **pp,
err:
ASN1err(ASN1_F_D2I_ASN1_BIT_STRING,i);
if ((ret != NULL) && ((a == NULL) || (*a != ret)))
err:
ASN1err(ASN1_F_D2I_ASN1_BIT_STRING,i);
if ((ret != NULL) && ((a == NULL) || (*a != ret)))
- ASN1_BIT_STRING_free(ret);
+
M_
ASN1_BIT_STRING_free(ret);
return(NULL);
}
return(NULL);
}
@@
-191,6
+180,7
@@
int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value)
w=n/8;
v=1<<(7-(n&0x07));
iv= ~v;
w=n/8;
v=1<<(7-(n&0x07));
iv= ~v;
+ if (!value) v=0;
a->flags&= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); /* clear, set on write */
a->flags&= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); /* clear, set on write */
@@
-199,14
+189,16
@@
int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value)
{
if (!value) return(1); /* Don't need to set */
if (a->data == NULL)
{
if (!value) return(1); /* Don't need to set */
if (a->data == NULL)
- c=(unsigned char *)
M
alloc(w+1);
+ c=(unsigned char *)
OPENSSL_m
alloc(w+1);
else
else
- c=(unsigned char *)Realloc(a->data,w+1);
+ c=(unsigned char *)OPENSSL_realloc_clean(a->data,
+ a->length,
+ w+1);
if (c == NULL) return(0);
if (c == NULL) return(0);
+ if (w+1-a->length > 0) memset(c+a->length, 0, w+1-a->length);
a->data=c;
a->length=w+1;
a->data=c;
a->length=w+1;
- c[w]=0;
- }
+ }
a->data[w]=((a->data[w])&iv)|v;
while ((a->length > 0) && (a->data[a->length-1] == 0))
a->length--;
a->data[w]=((a->data[w])&iv)|v;
while ((a->length > 0) && (a->data[a->length-1] == 0))
a->length--;