diff options
author | unknown <knielsen@knielsen-hq.org> | 2010-03-04 09:03:07 +0100 |
---|---|---|
committer | unknown <knielsen@knielsen-hq.org> | 2010-03-04 09:03:07 +0100 |
commit | 4bf849c23c2fe2174016da630705a362f76d3922 (patch) | |
tree | f39b89f218ff81ceb62349eb225a455d52c3ba78 /extra | |
parent | f04cf03f75ffca0b99562c027c1c57340d375f66 (diff) | |
parent | 62db6839b82d824567979ef3e05caccd67ed11ec (diff) | |
download | mariadb-git-4bf849c23c2fe2174016da630705a362f76d3922.tar.gz |
Merge MySQL 5.1.44 into MariaDB.
Diffstat (limited to 'extra')
-rw-r--r-- | extra/yassl/taocrypt/src/asn.cpp | 88 |
1 files changed, 42 insertions, 46 deletions
diff --git a/extra/yassl/taocrypt/src/asn.cpp b/extra/yassl/taocrypt/src/asn.cpp index f44d550e95b..f87b466502e 100644 --- a/extra/yassl/taocrypt/src/asn.cpp +++ b/extra/yassl/taocrypt/src/asn.cpp @@ -652,22 +652,20 @@ word32 CertDecoder::GetDigest() } -// memory length checked add tag to buffer -char* CertDecoder::AddTag(char* ptr, const char* buf_end, const char* tag_name, - word32 tag_name_length, word32 tag_value_length) +char *CertDecoder::AddTag(char *ptr, const char *buf_end, + const char *tag_name, word32 tag_name_length, + word32 tag_value_length) { - if (ptr + tag_name_length + tag_value_length > buf_end) { - source_.SetError(CONTENT_E); - return 0; - } - - memcpy(ptr, tag_name, tag_name_length); - ptr += tag_name_length; - - memcpy(ptr, source_.get_current(), tag_value_length); - ptr += tag_value_length; - - return ptr; + if (ptr + tag_name_length + tag_value_length > buf_end) + return 0; + + memcpy(ptr, tag_name, tag_name_length); + ptr+= tag_name_length; + + memcpy(ptr, source_.get_current(), tag_value_length); + ptr+= tag_value_length; + + return ptr; } @@ -680,19 +678,18 @@ void CertDecoder::GetName(NameType nt) word32 length = GetSequence(); // length of all distinguished names if (length >= ASN_NAME_MAX) - return; + goto err; length += source_.get_index(); - char* ptr; - char* buf_end; + char *ptr, *buf_end; if (nt == ISSUER) { - ptr = issuer_; - buf_end = ptr + sizeof(issuer_) - 1; // 1 byte for trailing 0 + ptr= issuer_; + buf_end= ptr + sizeof(issuer_) - 1; // 1 byte for trailing 0 } else { - ptr = subject_; - buf_end = ptr + sizeof(subject_) - 1; // 1 byte for trailing 0 + ptr= subject_; + buf_end= ptr + sizeof(subject_) - 1; // 1 byte for trailing 0 } while (source_.get_index() < length) { @@ -718,32 +715,32 @@ void CertDecoder::GetName(NameType nt) switch (id) { case COMMON_NAME: - if (!(ptr = AddTag(ptr, buf_end, "/CN=", 4, strLen))) - return; + if (!(ptr= AddTag(ptr, buf_end, "/CN=", 4, strLen))) + goto err; break; case SUR_NAME: - if (!(ptr = AddTag(ptr, buf_end, "/SN=", 4, strLen))) - return; + if (!(ptr= AddTag(ptr, buf_end, "/SN=", 4, strLen))) + goto err; break; case COUNTRY_NAME: - if (!(ptr = AddTag(ptr, buf_end, "/C=", 3, strLen))) - return; + if (!(ptr= AddTag(ptr, buf_end, "/C=", 3, strLen))) + goto err; break; case LOCALITY_NAME: - if (!(ptr = AddTag(ptr, buf_end, "/L=", 3, strLen))) - return; + if (!(ptr= AddTag(ptr, buf_end, "/L=", 3, strLen))) + goto err; break; case STATE_NAME: - if (!(ptr = AddTag(ptr, buf_end, "/ST=", 4, strLen))) - return; + if (!(ptr= AddTag(ptr, buf_end, "/ST=", 4, strLen))) + goto err; break; case ORG_NAME: - if (!(ptr = AddTag(ptr, buf_end, "/O=", 3, strLen))) - return; + if (!(ptr= AddTag(ptr, buf_end, "/O=", 3, strLen))) + goto err; break; case ORGUNIT_NAME: - if (!(ptr = AddTag(ptr, buf_end, "/OU=", 4, strLen))) - return; + if (!(ptr= AddTag(ptr, buf_end, "/OU=", 4, strLen))) + goto err; break; } @@ -758,21 +755,20 @@ void CertDecoder::GetName(NameType nt) source_.advance(oidSz + 1); word32 length = GetLength(source_); - if (email) { - if (!(ptr = AddTag(ptr, buf_end, "/emailAddress=", 14, length))) - return; - } + if (email && !(ptr= AddTag(ptr, buf_end, "/emailAddress=", 14, length))) + goto err; source_.advance(length); } } + *ptr= 0; - *ptr = 0; - - if (nt == ISSUER) - sha.Final(issuerHash_); - else - sha.Final(subjectHash_); + sha.Final(nt == ISSUER ? issuerHash_ : subjectHash_); + + return; + +err: + source_.SetError(CONTENT_E); } |