removed deadly assert in case of parse failure

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@5336 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
csoler 2012-07-27 14:15:00 +00:00
parent a28786513e
commit 2dba7e96bc

View file

@ -43,88 +43,85 @@ typedef struct
/** /**
* \ingroup Core_Callbacks * \ingroup Core_Callbacks
*/ */
static ops_parse_cb_return_t static ops_parse_cb_return_t accumulate_cb(const ops_parser_content_t *content_,ops_parse_cb_info_t *cbinfo)
accumulate_cb(const ops_parser_content_t *content_,ops_parse_cb_info_t *cbinfo) {
{ accumulate_arg_t *arg=ops_parse_cb_get_arg(cbinfo);
accumulate_arg_t *arg=ops_parse_cb_get_arg(cbinfo); const ops_parser_content_union_t *content=&content_->content;
const ops_parser_content_union_t *content=&content_->content; ops_keyring_t *keyring=arg->keyring;
ops_keyring_t *keyring=arg->keyring; ops_keydata_t *cur=NULL;
ops_keydata_t *cur=NULL; const ops_public_key_t *pkey;
const ops_public_key_t *pkey;
if(keyring->nkeys >= 0) if(keyring->nkeys >= 0)
cur=&keyring->keys[keyring->nkeys]; cur=&keyring->keys[keyring->nkeys];
switch(content_->tag) switch(content_->tag)
{ {
case OPS_PTAG_CT_PUBLIC_KEY: case OPS_PTAG_CT_PUBLIC_KEY:
case OPS_PTAG_CT_SECRET_KEY: case OPS_PTAG_CT_SECRET_KEY:
case OPS_PTAG_CT_ENCRYPTED_SECRET_KEY: case OPS_PTAG_CT_ENCRYPTED_SECRET_KEY:
// printf("New key\n"); // printf("New key\n");
++keyring->nkeys; ++keyring->nkeys;
EXPAND_ARRAY(keyring,keys); EXPAND_ARRAY(keyring,keys);
if(content_->tag == OPS_PTAG_CT_PUBLIC_KEY) if(content_->tag == OPS_PTAG_CT_PUBLIC_KEY)
pkey=&content->public_key; pkey=&content->public_key;
else else
pkey=&content->secret_key.public_key; pkey=&content->secret_key.public_key;
memset(&keyring->keys[keyring->nkeys],'\0', memset(&keyring->keys[keyring->nkeys],'\0', sizeof keyring->keys[keyring->nkeys]);
sizeof keyring->keys[keyring->nkeys]);
ops_keyid(keyring->keys[keyring->nkeys].key_id,pkey); ops_keyid(keyring->keys[keyring->nkeys].key_id,pkey);
ops_fingerprint(&keyring->keys[keyring->nkeys].fingerprint,pkey); ops_fingerprint(&keyring->keys[keyring->nkeys].fingerprint,pkey);
keyring->keys[keyring->nkeys].type=content_->tag; keyring->keys[keyring->nkeys].type=content_->tag;
if(content_->tag == OPS_PTAG_CT_PUBLIC_KEY) if(content_->tag == OPS_PTAG_CT_PUBLIC_KEY)
keyring->keys[keyring->nkeys].key.pkey=*pkey; keyring->keys[keyring->nkeys].key.pkey=*pkey;
else else
keyring->keys[keyring->nkeys].key.skey=content->secret_key; keyring->keys[keyring->nkeys].key.skey=content->secret_key;
return OPS_KEEP_MEMORY; return OPS_KEEP_MEMORY;
case OPS_PTAG_CT_USER_ID: case OPS_PTAG_CT_USER_ID:
// printf("User ID: %s\n",content->user_id.user_id); // printf("User ID: %s\n",content->user_id.user_id);
if (!cur) if (!cur)
{ {
OPS_ERROR(cbinfo->errors,OPS_E_P_NO_USERID, "No user id found"); OPS_ERROR(cbinfo->errors,OPS_E_P_NO_USERID, "No user id found");
return OPS_KEEP_MEMORY; return OPS_KEEP_MEMORY;
} }
// assert(cur); // assert(cur);
ops_add_userid_to_keydata(cur, &content->user_id); ops_add_userid_to_keydata(cur, &content->user_id);
free(content->user_id.user_id); free(content->user_id.user_id);
return OPS_KEEP_MEMORY; return OPS_KEEP_MEMORY;
case OPS_PARSER_PACKET_END: case OPS_PARSER_PACKET_END:
if(!cur) if(!cur)
return OPS_RELEASE_MEMORY; return OPS_RELEASE_MEMORY;
ops_add_packet_to_keydata(cur, &content->packet); ops_add_packet_to_keydata(cur, &content->packet);
free(content->packet.raw); free(content->packet.raw);
return OPS_KEEP_MEMORY; return OPS_KEEP_MEMORY;
case OPS_PARSER_ERROR: case OPS_PARSER_ERROR:
fprintf(stderr,"Error: %s\n",content->error.error); fprintf(stderr,"Error: %s\n",content->error.error);
assert(0); //assert(0);
break; break;
case OPS_PARSER_ERRCODE: case OPS_PARSER_ERRCODE:
switch(content->errcode.errcode) switch(content->errcode.errcode)
{ {
default: default:
fprintf(stderr,"parse error: %s\n", fprintf(stderr,"parse error: %s\n", ops_errcode(content->errcode.errcode));
ops_errcode(content->errcode.errcode)); //assert(0);
//assert(0); }
} break;
break;
default: default:
break; break;
} }
// XXX: we now exclude so many things, we should either drop this or // XXX: we now exclude so many things, we should either drop this or
// do something to pass on copies of the stuff we keep // do something to pass on copies of the stuff we keep
return ops_parse_stacked_cb(content_,cbinfo); return ops_parse_stacked_cb(content_,cbinfo);
} }
/** /**
* \ingroup Core_Parse * \ingroup Core_Parse