diff options
Diffstat (limited to 'src/plugins/ds-public/vcard/src/plugin_interface.c')
-rwxr-xr-x | src/plugins/ds-public/vcard/src/plugin_interface.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/plugins/ds-public/vcard/src/plugin_interface.c b/src/plugins/ds-public/vcard/src/plugin_interface.c index 5131f38..1f22810 100755 --- a/src/plugins/ds-public/vcard/src/plugin_interface.c +++ b/src/plugins/ds-public/vcard/src/plugin_interface.c @@ -749,9 +749,10 @@ static int _contacts_vcard_get_content(const char *vcard_stream, const char *con cursor++; } len = cursor - found; - if (len < buf_size) - memcpy(value, found, len); - else { + if (len < buf_size) { + if(value) + memcpy(value, found, len); + } else { value = realloc(value, len + 1); if (value) { buf_size = len + 1; @@ -761,13 +762,17 @@ static int _contacts_vcard_get_content(const char *vcard_stream, const char *con continue; } } - value[len] = '\0'; - if (fn) + + if (value) + value[len] = '\0'; + + if (fn) { if (fn(value + type_len + 1, data)) { free(value); _INNER_FUNC_EXIT; return 0; } + } vcard_stream = found + type_len; } |