All the little functions created by the IMPLEMENT_STACK_OF() macro will
authorGeoff Thorpe <geoff@openssl.org>
Wed, 31 May 2000 15:28:01 +0000 (15:28 +0000)
committerGeoff Thorpe <geoff@openssl.org>
Wed, 31 May 2000 15:28:01 +0000 (15:28 +0000)
cast their type-specific STACK into a real STACK and call the underlying
sk_*** function. The problem is that if the STACK_OF(..) parameter being
passed in has a "const *" qualifier, it is discarded by the cast.

I'm currently implementing a fix for this but in the mean-time, this is
one case I noticed (a few type-specific sk_**_num() functions pass in
const type-specific stacks). If there are other errors in the code where
consts are being discarded, we will similarly not notice them. yuck.

crypto/stack/stack.c
crypto/stack/stack.h

index 3e2f4d8786329f996bac473ad35620368a07980a..8ab4302c2e487a1d36a485241093bcb92b76c5d2 100644 (file)
@@ -279,7 +279,7 @@ void sk_free(STACK *st)
        Free(st);
        }
 
-int sk_num(STACK *st)
+int sk_num(const STACK *st)
 {
        if(st == NULL) return -1;
        return st->num;
index a6665f3b30f20b76beb5c7b4bc7337ab08530b9d..0cc3b44cc077ce272a467413052b9b093ae511bb 100644 (file)
@@ -79,7 +79,7 @@ typedef struct stack_st
 #define M_sk_num(sk)           ((sk) ? (sk)->num:-1)
 #define M_sk_value(sk,n)       ((sk) ? (sk)->data[n] : NULL)
 
-int sk_num(STACK *);
+int sk_num(const STACK *);
 char *sk_value(STACK *, int);
 
 char *sk_set(STACK *, int, char *);