X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=regex.c;h=a145183510d362eb1dc2f5d4056bab244507206a;hb=8224e3007771aa0ef666eb1ff1d2564208cc2c91;hp=f55cc5aeb614b7249d54680b2c5529ce82ea40c9;hpb=8da087fd9cdc501105370ddfad7a7c9a3e622850;p=gnulib.git diff --git a/regex.c b/regex.c index f55cc5aeb..a14518351 100644 --- a/regex.c +++ b/regex.c @@ -975,9 +975,10 @@ print_partial_compiled_pattern (start, end) int has_range_table = CHARSET_RANGE_TABLE_EXISTS_P (p - 1); fprintf (stderr, "/charset [%s", - (re_opcode_t) *(p - 1) == charset_not ? "^" : ""); + (re_opcode_t) *(p - 1) == charset_not ? "^" : ""); - assert (p + *p < pend); + if (p + *p >= pend) + fprintf (stderr, " !extends past end of pattern! "); for (c = 0; c < 256; c++) if (c / 8 < length @@ -1736,8 +1737,11 @@ static int analyse_first _RE_ARGS ((re_char *p, re_char *pend, /* This is not an arbitrary limit: the arguments which represent offsets - into the pattern are two bytes long. So if 2^16 bytes turns out to + into the pattern are two bytes long. So if 2^15 bytes turns out to be too small, many things would have to change. */ +# define MAX_BUF_SIZE (1L << 15) + +#if 0 /* This is when we thought it could be 2^16 bytes. */ /* Any other compiler which, like MSC, has allocation limit below 2^16 bytes will have to use approach similar to what was done below for MSC and drop MAX_BUF_SIZE a bit. Otherwise you may end up @@ -1749,6 +1753,7 @@ static int analyse_first _RE_ARGS ((re_char *p, re_char *pend, #else # define MAX_BUF_SIZE (1L << 16) #endif +#endif /* 0 */ /* Extend the buffer by twice its current size via realloc and reset the pointers that pointed into the old block to point to the @@ -3514,8 +3519,6 @@ regex_compile (pattern, size, syntax, bufp) if (syntax & RE_NO_POSIX_BACKTRACKING) BUF_PUSH (succeed); - free (compile_stack.stack); - /* We have succeeded; set the length of the buffer. */ bufp->used = b - bufp->buffer; @@ -3555,7 +3558,7 @@ regex_compile (pattern, size, syntax, bufp) } #endif /* not MATCH_MAY_ALLOCATE */ - return REG_NOERROR; + FREE_STACK_RETURN (REG_NOERROR); } /* regex_compile */ /* Subroutines for `regex_compile'. */ @@ -4458,9 +4461,9 @@ skip_one_char (p) /* Jump over non-matching operations. */ -static unsigned char * +static re_char * skip_noops (p, pend) - unsigned char *p, *pend; + re_char *p, *pend; { int mcnt; while (p < pend) @@ -4489,7 +4492,7 @@ skip_noops (p, pend) static int mutually_exclusive_p (bufp, p1, p2) struct re_pattern_buffer *bufp; - unsigned char *p1, *p2; + re_char *p1, *p2; { re_opcode_t op2; const boolean multibyte = RE_MULTIBYTE_P (bufp); @@ -6327,3 +6330,6 @@ regfree (preg) WEAK_ALIAS (__regfree, regfree) #endif /* not emacs */ + +/* arch-tag: 4ffd68ba-2a9e-435b-a21a-018990f9eeb2 + (do not change this comment) */