]> git.pond.sub.org Git - empserver/commitdiff
Check subscript of rpt[]
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 24 Feb 2008 21:15:10 +0000 (22:15 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Fri, 14 Mar 2008 19:25:08 +0000 (20:25 +0100)
Make nws_vrb unsigned to simplify that.

include/news.h
src/lib/commands/head.c
src/lib/commands/news.c
src/lib/global/nsc.c

index 5985d26a1ee2fc3a6b02b572f6b6c71ec8367b11..3a2a9b4b31c72d58faa4adf10051d4efb1da6e22 100644 (file)
@@ -50,7 +50,7 @@ struct nwsstr {
     short nws_uid;
     /* end of part matching struct empobj */
     natid nws_ano;             /* "actor" country # */
-    signed char nws_vrb;       /* action (verb) */
+    unsigned char nws_vrb;     /* action (verb) */
     natid nws_vno;             /* "victim" country # */
     signed char nws_ntm;       /* number of times */
     time_t nws_when;           /* time of action */
index e562b22e017d52b8b42c243941bd7b6ec79d87bb..ed506de68d0d83e73aca80145bcb8edde9d9e318 100644 (file)
@@ -84,6 +84,8 @@ head(void)
     snxtitem_all(&nstr, EF_NEWS);
     maxcnum = 0;
     while (nxtitem(&nstr, &news)) {
+       if (!news.nws_vrb || CANT_HAPPEN(news.nws_vrb > N_MAX_VERB))
+           continue;
        news_age = now - news.nws_when;
        if (news_age > news_per)
            continue;
index d6f019d8ae60a01392f09b5587cc1156407ef382..8e3566b5b778ab9e2b89b990587d1d17c95fbbec 100644 (file)
@@ -85,6 +85,8 @@ news(void)
     head();
     pr("\nThe details of Empire news since %s", ctime(&then));
     while (nxtitem(&nstr, &nws)) {
+       if (!nws.nws_vrb || CANT_HAPPEN(nws.nws_vrb > N_MAX_VERB))
+           continue;
        if (nws.nws_when < then)
            continue;
        if (opt_HIDDEN) {
@@ -102,6 +104,8 @@ news(void)
        pr("\n\t ===  %s  ===\n", page_headings[page].name);
        snxtitem_rewind(&nstr);
        while (nxtitem(&nstr, &nws)) {
+           if (CANT_HAPPEN(nws.nws_vrb > N_MAX_VERB))
+               continue;
            if (rpt[(int)nws.nws_vrb].r_newspage != page)
                continue;
            if (nws.nws_when < then)
@@ -191,8 +195,6 @@ preport(struct nwsstr *np)
     strcpy(cp, cname(np->nws_ano));
     cp += strlen(cp);
     *cp++ = ' ';
-    if (np->nws_vrb < 1 || np->nws_vrb > N_MAX_VERB)
-       np->nws_vrb = 0;
     sprintf(cp, rpt[(int)np->nws_vrb].r_newstory[random() % NUM_RPTS],
            cname(np->nws_vno));
     cp += strlen(cp);
index b463e04912e7b3d49456eed988b7906f9ed98dcc..2aaa08abd80eb3028e2815cecbe0c7193a7faaf2 100644 (file)
@@ -427,7 +427,7 @@ struct castr loan_ca[] = {
 struct castr news_ca[] = {
     /* no need for uid as long as it's not referenced from other tables */
     {NSC_NATID, 0, 0, fldoff(nwsstr, nws_ano), "actor", EF_NATION},
-    {NSC_CHAR, 0, 0, fldoff(nwsstr, nws_vrb), "action", EF_NEWS_CHR},
+    {NSC_UCHAR, 0, 0, fldoff(nwsstr, nws_vrb), "action", EF_NEWS_CHR},
     {NSC_NATID, 0, 0, fldoff(nwsstr, nws_vno), "victim", EF_NATION},
     {NSC_CHAR, 0, 0, fldoff(nwsstr, nws_ntm), "times", EF_BAD},
     {NSC_TIME, 0, 0, fldoff(nwsstr, nws_when), "time", EF_BAD},