Module Name: othersrc
Committed By: agc
Date: Wed Jun 21 23:48:08 UTC 2023
Modified Files:
othersrc/external/bsd/agcre/dist: agcre.c agcre.h
othersrc/external/bsd/agcre/dist/tests: 62.expected
Log Message:
agcre version 20230621
======================
+ agcre - added internal magic numbers to agcre to attempt to catch
if misbehaving programs overwrite sections of memory
+ agcre - check internal magic numbers before attempting to execute
regex programs
+ agcre - bump agcre magic number in the external structure
+ agcre - bump version number in header file. Fix up tests to ensure
correct operation
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 othersrc/external/bsd/agcre/dist/agcre.c
cvs rdiff -u -r1.5 -r1.6 othersrc/external/bsd/agcre/dist/agcre.h
cvs rdiff -u -r1.3 -r1.4 othersrc/external/bsd/agcre/dist/tests/62.expected
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: othersrc/external/bsd/agcre/dist/agcre.c
diff -u othersrc/external/bsd/agcre/dist/agcre.c:1.3 othersrc/external/bsd/agcre/dist/agcre.c:1.4
--- othersrc/external/bsd/agcre/dist/agcre.c:1.3 Fri Feb 24 19:01:10 2023
+++ othersrc/external/bsd/agcre/dist/agcre.c Wed Jun 21 23:48:08 2023
@@ -159,17 +159,26 @@ typedef struct threadlist_t {
re_thread_t t[1]; /* the threads */
} threadlist_t;
+#define MAGIC1 0xac1deaf0
+#define MAGIC2 0x41525345
+#define MAGIC3 0xd0d0d00d
+#define MAGIC4 0x666f7572
+
/* regular expression internals */
typedef struct re_t {
+ uint32_t magic1; /* magic number #1 */
instr_t *prog; /* start of instructions */
uint32_t instrc; /* # of instructions */
uint32_t gen; /* generation number */
uint32_t setc; /* # of sets */
uint32_t maxset; /* allocated # of sets */
+ uint32_t magic2; /* magic number #2 */
set_t *sets; /* sets */
uint32_t flags; /* comp/exec flags */
context_t *ctxlist; /* list of contexts */
+ uint32_t magic3; /* magic number #3 */
instr_t *pc; /* prog counter */
+ uint32_t magic4; /* magic number #4 */
int msgc; /* # of chars in msg buffer */
char msg[256]; /* message buffer */
} re_t;
@@ -2669,6 +2678,22 @@ growspace(char **buf, size_t *size, size
return 1;
}
+/* check it was compiled properly */
+static inline int
+good_struct(const agcre_regex_t *agcre)
+{
+ re_t *re;
+
+ if (agcre == NULL || agcre->re_magic != AGCRE_MAGIC2) {
+ return 0;
+ }
+ if ((re = agcre->re_g) == NULL) {
+ return 0;
+ }
+ return re->magic1 = MAGIC1 && re->magic2 == MAGIC2 &&
+ re->magic3 == MAGIC3 && re->magic4 == MAGIC4;
+}
+
/***********************************************************/
/* allocate a new structure and return it */
@@ -2697,7 +2722,13 @@ agcre_regcomp(agcre_regex_t *agcre, cons
(agcre_regoff_t)(agcre->re_endp - in.s) :
(agcre_regoff_t)strlen(in.s);
memset(agcre, 0x0, sizeof(*agcre));
- agcre->re_g = re = in.re = calloc(1, sizeof(*re));
+ if ((agcre->re_g = re = in.re = calloc(1, sizeof(*re))) == NULL) {
+ return AGCRE_REG_FAILURE;
+ }
+ re->magic1 = MAGIC1;
+ re->magic2 = MAGIC2;
+ re->magic3 = MAGIC3;
+ re->magic4 = MAGIC4;
if (in.eo - in.so > AGCRE_MAX_EXPR_LENGTH) {
re->msgc = snprintf(re->msg, sizeof(re->msg),
"expression length %llu larger than %u",
@@ -2739,7 +2770,7 @@ agcre_regcomp(agcre_regex_t *agcre, cons
re->pc->op = OP_MATCH;
re->pc += 1;
re->instrc = re->pc - re->prog;
- agcre->re_magic = AGCRE_MAGIC;
+ agcre->re_magic = AGCRE_MAGIC2;
if (flags & AGCRE_REG_DUMP) {
printprog(re);
}
@@ -2757,7 +2788,7 @@ agcre_regerror(int errcode, const agcre_
re_t *re;
USE_ARG(errcode);
- if (agcre == NULL || size == 0 || errbuf == NULL) {
+ if (!good_struct(agcre) || size == 0 || errbuf == NULL) {
return 0;
}
re = agcre->re_g;
@@ -2782,15 +2813,15 @@ agcre_regexec(agcre_regex_t *agcre, cons
re_t *re;
int ret;
- if (agcre == NULL || vs == NULL || (matchc > 0 && m == NULL)) {
+ if (!good_struct(agcre) || vs == NULL || (matchc > 0 && m == NULL)) {
return AGCRE_REG_FAILURE;
}
if ((re = agcre->re_g) == NULL) {
return AGCRE_REG_FAILURE;
}
- if (agcre->re_magic != AGCRE_MAGIC) {
+ if (agcre->re_magic != AGCRE_MAGIC2) {
re->msgc = snprintf(re->msg, sizeof(re->msg),
- "bad magic number 0x%x, not 0x%x", agcre->re_magic, AGCRE_MAGIC);
+ "bad magic number 0x%x, not 0x%x", agcre->re_magic, AGCRE_MAGIC2);
return AGCRE_REG_FAILURE;
}
if (matchc > AGCRE_MAX_SUBEXPR) {
@@ -2942,6 +2973,9 @@ agcre_rev_regexec(agcre_regex_t *agcre,
int found;
int lastmatch;
+ if (!good_struct(agcre) || vs == NULL || (matchc > 0 && m == NULL)) {
+ return AGCRE_REG_FAILURE;
+ }
if (flags & AGCRE_REG_STARTEND) {
from = m[0].rm_so;
to = m[0].rm_eo;
@@ -2984,7 +3018,7 @@ agcre_regfree(agcre_regex_t *agcre)
uint32_t i;
re_t *re;
- if (agcre) {
+ if (agcre && good_struct(agcre)) {
if ((re = agcre->re_g) != NULL) {
free(re->prog);
for (i = 0 ; i < re->setc ; i++) {
Index: othersrc/external/bsd/agcre/dist/agcre.h
diff -u othersrc/external/bsd/agcre/dist/agcre.h:1.5 othersrc/external/bsd/agcre/dist/agcre.h:1.6
--- othersrc/external/bsd/agcre/dist/agcre.h:1.5 Fri Feb 24 19:01:10 2023
+++ othersrc/external/bsd/agcre/dist/agcre.h Wed Jun 21 23:48:08 2023
@@ -29,7 +29,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef AGCRE_VERSION
-#define AGCRE_VERSION 20230224
+#define AGCRE_VERSION 20230621
#include <inttypes.h>
@@ -53,7 +53,7 @@
#define REG_SUCCESS AGCRE_REG_SUCCESS
#define REG_FAILURE AGCRE_REG_FAILURE
#define REG_NOMATCH AGCRE_REG_FAILURE
-#define REG_MAGIC AGCRE_MAGIC
+#define REG_MAGIC AGCRE_MAGIC2
#define REG_MAX_SUBEXPR AGCRE_MAX_SUBEXPR
#define REG_MAX_EXPR_LENGTH AGCRE_MAX_EXPR_LENGTH
#define REG_ANCHOR AGCRE_REG_ANCHOR
@@ -89,7 +89,7 @@
#define AGCRE_REG_SUCCESS 0
#define AGCRE_REG_FAILURE 1
-#define AGCRE_MAGIC 0x20170801
+#define AGCRE_MAGIC2 0x20230621
/* limits we impose on expressions */
#define AGCRE_MAX_SUBEXPR 100
Index: othersrc/external/bsd/agcre/dist/tests/62.expected
diff -u othersrc/external/bsd/agcre/dist/tests/62.expected:1.3 othersrc/external/bsd/agcre/dist/tests/62.expected:1.4
--- othersrc/external/bsd/agcre/dist/tests/62.expected:1.3 Fri Feb 24 19:01:11 2023
+++ othersrc/external/bsd/agcre/dist/tests/62.expected Wed Jun 21 23:48:08 2023
@@ -1 +1 @@
-agcre 20230224
+agcre 20230621