summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrediano Ziglio <fziglio@redhat.com>2018-12-12 10:03:38 +0000
committerFrediano Ziglio <fziglio@redhat.com>2018-12-19 11:31:13 +0000
commit2d32025f77d73778419c2b462906b9a315df0894 (patch)
tree62894307afeabea06ba012d0e210303c0e3cdad7
parent7f4da3ff365b1d10e37db738a81285d035ef435c (diff)
Use a single copy of subject string
A full copy can keep both the key and the value instead of allocating twice the memory. We are parsing key1=val1,key2=val2,... and in doing that, we currently store 'key1' in key, and 'val1' in val, and then 'key2', 'val2', and so on. After this patch, we store 'key1\0val1\0' in key, which fits and saves some memory. Also this removes a warning produced by Coverity that is assuming that allocating strlen(string_variable) is wrong. Signed-off-by: Frediano Ziglio <fziglio@redhat.com> Acked-by: Christophe Fergeau <cfergeau@redhat.com>
-rw-r--r--common/ssl_verify.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/common/ssl_verify.c b/common/ssl_verify.c
index 0ac00a6..74f95bb 100644
--- a/common/ssl_verify.c
+++ b/common/ssl_verify.c
@@ -282,7 +282,7 @@ static X509_NAME* subject_to_x509_name(const char *subject, int *nentries)
{
X509_NAME* in_subject;
const char *p;
- char *key, *val, *k, *v = NULL;
+ char *key, *val = NULL, *k, *v = NULL;
enum {
KEY,
VALUE
@@ -291,11 +291,10 @@ static X509_NAME* subject_to_x509_name(const char *subject, int *nentries)
spice_return_val_if_fail(subject != NULL, NULL);
spice_return_val_if_fail(nentries != NULL, NULL);
- key = (char*)alloca(strlen(subject));
- val = (char*)alloca(strlen(subject));
+ key = (char*)alloca(strlen(subject)+1);
in_subject = X509_NAME_new();
- if (!in_subject || !key || !val) {
+ if (!in_subject || !key) {
spice_debug("failed to allocate");
return NULL;
}
@@ -328,6 +327,7 @@ static X509_NAME* subject_to_x509_name(const char *subject, int *nentries)
} else if (*p == '=' && !escape) {
state = VALUE;
*k = 0;
+ val = k + 1;
v = val;
} else
*k++ = *p;