diff options
| author | Theodore Tso <tytso@mit.edu> | 1994-09-29 18:44:51 +0000 |
|---|---|---|
| committer | Theodore Tso <tytso@mit.edu> | 1994-09-29 18:44:51 +0000 |
| commit | c17c99275fdf90b3513833182589be01af6b2148 (patch) | |
| tree | 2f4851eb32985c537555d43fc1f0dc4b2e103b3a /src/lib | |
| parent | b2caf4b17818398c789a51032d0f90704c182ebf (diff) | |
Always fill in a NULL for a zero-length char string or octet string in
asn1_remove_charstring or asn1_remove_octetstring. This means we do
the same thing no matter whether the system returns NULL for malloc(0) or not.
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@4376 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/krb5/asn.1/ChangeLog | 8 | ||||
| -rw-r--r-- | src/lib/krb5/asn.1/asn1buf.c | 15 |
2 files changed, 20 insertions, 3 deletions
diff --git a/src/lib/krb5/asn.1/ChangeLog b/src/lib/krb5/asn.1/ChangeLog index 139d5bfbd..d4883a35e 100644 --- a/src/lib/krb5/asn.1/ChangeLog +++ b/src/lib/krb5/asn.1/ChangeLog @@ -1,3 +1,11 @@ +Thu Sep 29 14:26:34 1994 Theodore Y. Ts'o (tytso@dcl) + + * asn1buf.c (asn1buf_remove_octetstring, asn1buf_remove_charstring): + If the length is zero, don't call calloc(0,1); instead + return a NULL pointer. This way, we get consistent + behavior even on systems where malloc(0) returns a + non-null pointer. + Tue Sep 27 23:31:50 1994 Theodore Y. Ts'o (tytso@dcl) * krb5_encode.c (encode_krb5_enc_kdc_rep_part): = should have been diff --git a/src/lib/krb5/asn.1/asn1buf.c b/src/lib/krb5/asn.1/asn1buf.c index 393014ddd..81c7df309 100644 --- a/src/lib/krb5/asn.1/asn1buf.c +++ b/src/lib/krb5/asn.1/asn1buf.c @@ -173,8 +173,13 @@ asn1_error_code asn1buf_remove_octetstring(DECLARG(asn1buf *, buf), int i; if(buf->next + len - 1 > buf->bound) return ASN1_OVERRUN; + if (len == 0) { + *s = 0; + return 0; + } *s = (asn1_octet*)calloc(len,sizeof(asn1_octet)); - if((*s == NULL) && len) return ENOMEM; + if (*s == NULL) + return ENOMEM; for(i=0; i<len; i++) (*s)[i] = (asn1_octet)(buf->next)[i]; buf->next += len; @@ -190,9 +195,13 @@ asn1_error_code asn1buf_remove_charstring(DECLARG(asn1buf *, buf), { int i; - if(buf->next + len - 1 > buf->bound) return ASN1_OVERRUN; + if (buf->next + len - 1 > buf->bound) return ASN1_OVERRUN; + if (len == 0) { + *s = 0; + return 0; + } *s = (char*)calloc(len,sizeof(char)); - if((*s == NULL) && len) return ENOMEM; + if (*s == NULL) return ENOMEM; for(i=0; i<len; i++) (*s)[i] = (char)(buf->next)[i]; buf->next += len; |
