]> git.cameronkatri.com Git - mandoc.git/commitdiff
Render roff escape sequences contained in manual page descriptions
authorIngo Schwarze <schwarze@openbsd.org>
Wed, 7 May 2014 16:19:03 +0000 (16:19 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Wed, 7 May 2014 16:19:03 +0000 (16:19 +0000)
before putting them into the mpages table.
Issue found by bentley@ in OpenBSD::Getopt(3p).

mandocdb.c

index 85f0cca079a39b8e5e4285042de3f999c4493dec..05530fb0599e152f3c0ddbd0862005a18fbc3379 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mandocdb.c,v 1.147 2014/05/07 15:10:36 schwarze Exp $ */
+/*     $Id: mandocdb.c,v 1.148 2014/05/07 16:19:03 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -2036,13 +2036,22 @@ dbadd(struct mpage *mpage, struct mchars *mc)
        if (debug)
                say(mlink->file, "Adding to database");
 
        if (debug)
                say(mlink->file, "Adding to database");
 
+       i = strlen(mpage->desc) + 1;
+       key = mandoc_calloc(1, sizeof(struct str) + i);
+       memcpy(key->key, mpage->desc, i);
+       render_key(mc, key);
+
        i = 1;
        i = 1;
-       SQL_BIND_TEXT(stmts[STMT_INSERT_PAGE], i, mpage->desc);
+       SQL_BIND_TEXT(stmts[STMT_INSERT_PAGE], i, key->rendered);
        SQL_BIND_INT(stmts[STMT_INSERT_PAGE], i, FORM_SRC == mpage->form);
        SQL_STEP(stmts[STMT_INSERT_PAGE]);
        mpage->pageid = sqlite3_last_insert_rowid(db);
        sqlite3_reset(stmts[STMT_INSERT_PAGE]);
 
        SQL_BIND_INT(stmts[STMT_INSERT_PAGE], i, FORM_SRC == mpage->form);
        SQL_STEP(stmts[STMT_INSERT_PAGE]);
        mpage->pageid = sqlite3_last_insert_rowid(db);
        sqlite3_reset(stmts[STMT_INSERT_PAGE]);
 
+       if (key->rendered != key->key)
+               free(key->rendered);
+       free(key);
+
        while (NULL != mlink) {
                dbadd_mlink(mlink);
                mlink = mlink->next;
        while (NULL != mlink) {
                dbadd_mlink(mlink);
                mlink = mlink->next;