From a6e4379b32505d9d389cf9be92ffb827ead1ca08 Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Wed, 12 Apr 2000 09:46:29 +0000 Subject: [PATCH] (gss_add_oid_set_member): actually check if the oid is a member first. leave the oid_set unchanged if realloc fails. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@8173 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/gssapi/add_oid_set_member.c | 22 ++++++++++++++++------ lib/gssapi/krb5/add_oid_set_member.c | 22 ++++++++++++++++------ 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/lib/gssapi/add_oid_set_member.c b/lib/gssapi/add_oid_set_member.c index 4914dbac1..41f61b017 100644 --- a/lib/gssapi/add_oid_set_member.c +++ b/lib/gssapi/add_oid_set_member.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1997 - 2000 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -41,13 +41,23 @@ OM_uint32 gss_add_oid_set_member ( gss_OID_set * oid_set ) { - size_t n = (*oid_set)->count + 1; + gss_OID *tmp; + size_t n; + OM_uint32 res; + int present; - (*oid_set)->elements = realloc ((*oid_set)->elements, - n * sizeof(gss_OID_desc)); - if ((*oid_set)->elements == NULL) { + res = gss_test_oid_set_member(minor_status, member_oid, *oid_set, &present); + if (res != GSS_S_COMPLETE) + return res; + + if (present) + return GSS_S_COMPLETE; + + n = (*oid_set)->count + 1; + tmp = realloc ((*oid_set)->elements, n * sizeof(gss_OID_desc)); + if (tmp == NULL) return GSS_S_FAILURE; - } + (*oid_set)->elements = tmp; (*oid_set)->count = n; (*oid_set)->elements[n-1] = *member_oid; return GSS_S_COMPLETE; diff --git a/lib/gssapi/krb5/add_oid_set_member.c b/lib/gssapi/krb5/add_oid_set_member.c index 4914dbac1..41f61b017 100644 --- a/lib/gssapi/krb5/add_oid_set_member.c +++ b/lib/gssapi/krb5/add_oid_set_member.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997 Kungliga Tekniska Högskolan + * Copyright (c) 1997 - 2000 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -41,13 +41,23 @@ OM_uint32 gss_add_oid_set_member ( gss_OID_set * oid_set ) { - size_t n = (*oid_set)->count + 1; + gss_OID *tmp; + size_t n; + OM_uint32 res; + int present; - (*oid_set)->elements = realloc ((*oid_set)->elements, - n * sizeof(gss_OID_desc)); - if ((*oid_set)->elements == NULL) { + res = gss_test_oid_set_member(minor_status, member_oid, *oid_set, &present); + if (res != GSS_S_COMPLETE) + return res; + + if (present) + return GSS_S_COMPLETE; + + n = (*oid_set)->count + 1; + tmp = realloc ((*oid_set)->elements, n * sizeof(gss_OID_desc)); + if (tmp == NULL) return GSS_S_FAILURE; - } + (*oid_set)->elements = tmp; (*oid_set)->count = n; (*oid_set)->elements[n-1] = *member_oid; return GSS_S_COMPLETE;