Skip to content

Commit ca5d35e

Browse files
Fix help_createalias
1 parent 5c58178 commit ca5d35e

1 file changed

Lines changed: 9 additions & 15 deletions

File tree

src/support/help.c

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ static bool md_parseinlinelink(parser *p, void *out, size_t block_start) {
461461
return true;
462462
}
463463

464-
static bool help_createalias(const char *base, size_t label_start, size_t label_len, size_t target_start, size_t target_len, int topic_index);
464+
static bool help_createalias(const char *base, size_t label_start, size_t label_len, size_t paren_start, size_t paren_len, int topic_index);
465465

466466
/** Case-insensitive comparison of substring (s, n) with literal (lit, lit_len). */
467467
static bool help_casencmp(const char *s, size_t n, const char *lit, size_t lit_len) {
@@ -508,7 +508,7 @@ bool md_parselink(parser *p, void *out) {
508508
}
509509

510510
// Normal reference link: create alias/link block
511-
help_createalias(base, label_start, label_len, target_start, target_len, ctx->current_topic_index);
511+
help_createalias(base, label_start, label_len, paren_start, paren_len, ctx->current_topic_index);
512512
md_push_link(p, ctx, block_start, label_start, label_len, target_start, target_len);
513513
return true;
514514
}
@@ -843,21 +843,15 @@ static void md_push_link(parser *p, md_parseout *out, size_t block_start, size_t
843843
* Help topic aliases
844844
* ********************************************************************** */
845845

846-
/** Create an alias from a tag link definition. Inserts alias -> topic index into s_names. */
847-
static bool help_createalias(const char *base, size_t label_start, size_t label_len, size_t target_start, size_t target_len, int topic_index) {
846+
/** Create an alias from a tag link definition. Inserts alias -> topic index into s_names.
847+
* Alias text is the parenthesized part from the URL (e.g. [tagvar]: # (var) -> "var"). Requires paren_len > 0. */
848+
static bool help_createalias(const char *base, size_t label_start, size_t label_len, size_t paren_start, size_t paren_len, int topic_index) {
848849
if (topic_index < 0 || (unsigned int) topic_index >= s_topics.count) return false;
849850
if (label_len < 3 || !help_casencmp(base + label_start, 3, "tag", 3)) return false;
850-
const char *target = base + target_start, *open = NULL, *close = NULL;
851-
for (const char *p = target; p < target + target_len && !close; p++) {
852-
if (!open && *p == '(') open = p + 1;
853-
else if (open && *p == ')') { close = p; break; }
854-
}
855-
if (!open || !close || close == open) return false;
856-
size_t len = (size_t)(close - open);
857-
if (len > MORPHO_MAX_HELPQUERY_LENGTH) return false;
858-
char alias_buf[len + 1];
859-
help_lowercase_into(open, len, alias_buf);
860-
return !MORPHO_ISNIL(help_nameindex_add(alias_buf, len, topic_index));
851+
if (paren_len == 0 || paren_len > MORPHO_MAX_HELPQUERY_LENGTH) return false;
852+
char alias_buf[paren_len + 1];
853+
help_lowercase_into(base + paren_start, paren_len, alias_buf);
854+
return !MORPHO_ISNIL(help_nameindex_add(alias_buf, paren_len, topic_index));
861855
}
862856

863857
/* **********************************************************************

0 commit comments

Comments
 (0)