In regexp-exec in 1.8, a nul in the input string, or a bad flags arg, results in a throw from a critical section, which calls abort(). Eg.
(regexp-exec (make-regexp "x") "\0") => abort (regexp-exec (make-regexp "x") "hello" 0 'badflags) => abort What's the reason for the critical section? Do we think regexec() is not reentrant? It looks like a conversion from SCM_DEFER_INTS in past versions, if that suggests anything about it. I struck this when running a regexp search on some file data that slightly unexpectedly had nuls in it. I think I was using 1.6 last time I did the same thing. I guess that version silently ignores past the nul. Maybe that should get a check, though there's probably a zillion libc calls that would really ought to have the same.
--- regex-posix.c.~1.78.2.1.~ 2006-02-14 08:59:02.000000000 +1100 +++ regex-posix.c 2007-01-13 12:53:32.000000000 +1100 @@ -245,7 +245,6 @@ whole regexp, so add 1 to nmatches. */ nmatches = SCM_RGX(rx)->re_nsub + 1; - SCM_CRITICAL_SECTION_START; matches = scm_malloc (sizeof (regmatch_t) * nmatches); c_str = scm_to_locale_string (substr); status = regexec (SCM_RGX (rx), c_str, nmatches, matches, @@ -269,7 +268,6 @@ scm_from_long (matches[i].rm_eo + offset))); } free (matches); - SCM_CRITICAL_SECTION_END; if (status != 0 && status != REG_NOMATCH) scm_error_scm (scm_regexp_error_key,
_______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel