@@ -10470,8 +10470,7 @@ const char* wolfSSL_CIPHER_get_name(const WOLFSSL_CIPHER* cipher)
1047010470 return NULL;
1047110471 }
1047210472
10473- #if !defined(WOLFSSL_CIPHER_INTERNALNAME) && !defined(NO_ERROR_STRINGS) && \
10474- !defined(WOLFSSL_QT)
10473+ #if !defined(WOLFSSL_CIPHER_INTERNALNAME) && !defined(NO_ERROR_STRINGS)
1047510474 return GetCipherNameIana(cipher->cipherSuite0, cipher->cipherSuite);
1047610475 #else
1047710476 return wolfSSL_get_cipher_name_from_suite(cipher->cipherSuite0,
@@ -16035,9 +16034,8 @@ static WC_INLINE int sslCipherMinMaxCheck(const WOLFSSL *ssl, byte suite0,
1603516034 */
1603616035WOLF_STACK_OF(WOLFSSL_CIPHER) *wolfSSL_get_ciphers_compat(const WOLFSSL *ssl)
1603716036{
16038- WOLF_STACK_OF(WOLFSSL_CIPHER)* ret = NULL;
1603916037 const Suites* suites;
16040- #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT)
16038+ #if defined(OPENSSL_ALL)
1604116039 const CipherSuiteInfo* cipher_names = GetCipherNames();
1604216040 int cipherSz = GetCipherNamesSize();
1604316041#endif
@@ -16053,15 +16051,20 @@ WOLF_STACK_OF(WOLFSSL_CIPHER) *wolfSSL_get_ciphers_compat(const WOLFSSL *ssl)
1605316051 /* check if stack needs populated */
1605416052 if (ssl->suitesStack == NULL) {
1605516053 int i;
16056- #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT)
16057- int j;
16054+
16055+ ((WOLFSSL*)ssl)->suitesStack =
16056+ wolfssl_sk_new_type_ex(STACK_TYPE_CIPHER, ssl->heap);
16057+ if (ssl->suitesStack == NULL)
16058+ return NULL;
1605816059
1605916060 /* higher priority of cipher suite will be on top of stack */
16060- for (i = suites->suiteSz - 2; i >=0; i-=2) {
16061+ #if defined(OPENSSL_ALL)
16062+ for (i = suites->suiteSz - 2; i >=0; i-=2)
1606116063#else
16062- for (i = 0; i < suites->suiteSz; i+=2) {
16064+ for (i = 0; i < suites->suiteSz; i+=2)
1606316065#endif
16064- WOLFSSL_STACK* add;
16066+ {
16067+ struct WOLFSSL_CIPHER cipher;
1606516068
1606616069 /* A couple of suites are placeholders for special options,
1606716070 * skip those. */
@@ -16071,39 +16074,30 @@ WOLF_STACK_OF(WOLFSSL_CIPHER) *wolfSSL_get_ciphers_compat(const WOLFSSL *ssl)
1607116074 continue;
1607216075 }
1607316076
16074- add = wolfSSL_sk_new_node(ssl->heap);
16075- if (add != NULL) {
16076- add->type = STACK_TYPE_CIPHER;
16077- add->data.cipher.cipherSuite0 = suites->suites[i];
16078- add->data.cipher.cipherSuite = suites->suites[i+1];
16079- add->data.cipher.ssl = ssl;
16080- #if defined(OPENSSL_ALL) || defined(WOLFSSL_QT)
16077+ XMEMSET(&cipher, 0, sizeof(cipher));
16078+ cipher.cipherSuite0 = suites->suites[i];
16079+ cipher.cipherSuite = suites->suites[i+1];
16080+ cipher.ssl = ssl;
16081+ #if defined(OPENSSL_ALL)
16082+ cipher.in_stack = 1;
16083+ {
16084+ int j;
1608116085 for (j = 0; j < cipherSz; j++) {
16082- if (cipher_names[j].cipherSuite0 ==
16083- add->data.cipher.cipherSuite0 &&
16084- cipher_names[j].cipherSuite ==
16085- add->data.cipher.cipherSuite) {
16086- add->data.cipher.offset = (unsigned long)j;
16086+ if (cipher_names[j].cipherSuite0 == cipher.cipherSuite0 &&
16087+ cipher_names[j].cipherSuite == cipher.cipherSuite) {
16088+ cipher.offset = (unsigned long)j;
1608716089 break;
1608816090 }
1608916091 }
16092+ }
1609016093#endif
16091- #if defined(WOLFSSL_QT) || defined(OPENSSL_ALL)
16092- /* in_stack is checked in wolfSSL_CIPHER_description */
16093- add->data.cipher.in_stack = 1;
16094- #endif
16095-
16096- add->next = ret;
16097- if (ret != NULL) {
16098- add->num = ret->num + 1;
16099- }
16100- else {
16101- add->num = 1;
16102- }
16103- ret = add;
16094+ if (wolfSSL_sk_insert(ssl->suitesStack, &cipher, 0) <= 0) {
16095+ WOLFSSL_MSG("Error inserting cipher onto stack");
16096+ wolfSSL_sk_CIPHER_free(ssl->suitesStack);
16097+ ((WOLFSSL*)ssl)->suitesStack = NULL;
16098+ break;
1610416099 }
1610516100 }
16106- ((WOLFSSL*)ssl)->suitesStack = ret;
1610716101 }
1610816102 return ssl->suitesStack;
1610916103}
0 commit comments