X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;ds=sidebyside;f=gedcom%2Fxref.c;h=dfd79bf8b5272fbe697e2cab0973556d234121b6;hb=6103dd898c4de86c68891cc0222543988a2caab7;hp=1b8420deb6017441757d917a181ba945e44f2b9c;hpb=74409095aef5537c9783cbcbdaf7e1847d09215d;p=gedcom-parse.git diff --git a/gedcom/xref.c b/gedcom/xref.c index 1b8420d..dfd79bf 100644 --- a/gedcom/xref.c +++ b/gedcom/xref.c @@ -246,9 +246,15 @@ struct xref_value *gedcom_parse_xref(const char *raw_value, /* Functions for retrieving, modifying and deleting cross-references */ +int is_valid_pointer(const char *key) +{ + return (strlen(key) <= 22 && + gedcom_check_token(key, STATE_NORMAL, POINTER) == 0); +} + struct xref_value* gedcom_get_by_xref(const char *key) { - if (gedcom_check_token(key, STATE_NORMAL, POINTER) != 0) { + if (!is_valid_pointer(key)) { gedcom_error(_("String '%s' is not a valid cross-reference key"), key); return NULL; } @@ -268,7 +274,7 @@ struct xref_value* gedcom_add_xref(Xref_type type, const char* xrefstr, { struct xref_node *xr = NULL; - if (gedcom_check_token(xrefstr, STATE_NORMAL, POINTER) != 0) { + if (!is_valid_pointer(xrefstr)) { gedcom_error(_("String '%s' is not a valid cross-reference key"), xrefstr); } else { @@ -292,7 +298,7 @@ struct xref_value* gedcom_link_xref(Xref_type type, const char* xrefstr) { struct xref_node *xr = NULL; - if (gedcom_check_token(xrefstr, STATE_NORMAL, POINTER) != 0) { + if (!is_valid_pointer(xrefstr)) { gedcom_error(_("String '%s' is not a valid cross-reference key"), xrefstr); } else { @@ -316,7 +322,7 @@ struct xref_value* gedcom_link_xref(Xref_type type, const char* xrefstr) struct xref_value* gedcom_unlink_xref(Xref_type type, const char* xrefstr) { struct xref_node *xr = NULL; - if (gedcom_check_token(xrefstr, STATE_NORMAL, POINTER) != 0) { + if (!is_valid_pointer(xrefstr)) { gedcom_error(_("String '%s' is not a valid cross-reference key"), xrefstr); } else { @@ -347,7 +353,7 @@ int gedcom_delete_xref(const char* xrefstr) struct xref_node *xr = NULL; int result = 1; - if (gedcom_check_token(xrefstr, STATE_NORMAL, POINTER) != 0) { + if (!is_valid_pointer(xrefstr)) { gedcom_error(_("String '%s' is not a valid cross-reference key"), xrefstr); } else {