rem: dst += src_len + 1;
add: dst += strlen (dst) + 1;
context: _gpgme_key_add_sig (gpgme_key_t key, char *src){  int src_len = src ? strlen (src) : 0;  gpgme_user_id_t uid;  gpgme_key_sig_t sig;  assert (key);	/* XXX */  uid = key->_last_uid;  assert (uid);	/* XXX */  /* We can malloc a buffer of the same length, because the converted     string will never be larger. Actually we allocate it twice the     size, so that we are able to store the parsed stuff there too.  */  sig = calloc (1, sizeof (*sig) + 2 * src_len + 3);  if (!sig)    return NULL;  sig->keyid = sig->_keyid;  sig->_keyid[16] = '\0';  sig->uid = ((char *) sig) + sizeof (*sig);  if (src)    {      char *dst = sig->uid;      _gpgme_decode_c_string (src, &dst, src_len + 1);      dst += src_len + 1;      if (key->protocol == GPGME_PROTOCOL_CMS)	parse_x509_user_id (sig->uid, &sig->name, &sig->email,			    &sig->comment, dst);      else	parse_user_id (sig->uid, &sig->name, &sig->email,		       &sig->comment, dst);    }  if (!uid->signatures)    uid->signatures = sig;  if (uid->_last_keysig)    uid->_last_keysig->next = sig;  uid->_last_keysig = sig;  return sig;}