diff options
author | Frediano Ziglio <fziglio@redhat.com> | 2018-12-12 10:03:38 +0000 |
---|---|---|
committer | Frediano Ziglio <fziglio@redhat.com> | 2018-12-19 11:31:13 +0000 |
commit | 2d32025f77d73778419c2b462906b9a315df0894 (patch) | |
tree | 62894307afeabea06ba012d0e210303c0e3cdad7 | |
parent | 7f4da3ff365b1d10e37db738a81285d035ef435c (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.c | 8 |
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; |