mailing list of musl libc
 help / color / mirror / code / Atom feed
* [PATCH] regex: fix newline matching with negated brackets
@ 2017-03-17 13:33 Julien Ramseier
  2017-03-18 15:00 ` Julien Ramseier
  0 siblings, 1 reply; 5+ messages in thread
From: Julien Ramseier @ 2017-03-17 13:33 UTC (permalink / raw)
  To: musl

[-- Attachment #1: Type: text/plain, Size: 408 bytes --]

With REG_NEWLINE, POSIX says:
"A <newline> in string shall not be matched by a period outside
 a bracket expression or by any form of a non-matching list"

musl currently matches newlines with negated brackets, even if
REG_NEWLINE is used. Attached patch fixes the issue, although
I'm not sure if it's the best way to do it.

Also see similar glibc bug:
https://sourceware.org/bugzilla/show_bug.cgi?id=3957


[-- Attachment #2: regcomp-newline-neg-bracket.patch --]
[-- Type: application/octet-stream, Size: 774 bytes --]

diff --git a/src/regex/regcomp.c b/src/regex/regcomp.c
index 5a7b53a..fb24556 100644
--- a/src/regex/regcomp.c
+++ b/src/regex/regcomp.c
@@ -636,6 +636,20 @@ static reg_errcode_t parse_bracket(tre_parse_ctx_t *ctx, const char *s)
 		goto parse_bracket_done;
 
 	if (neg.negate) {
+		/*
+		 * With REG_NEWLINE, POSIX requires that newlines are not matched by
+		 * any form of a non-matching list.
+		 */
+		if (ctx->cflags & REG_NEWLINE) {
+			lit = tre_new_lit(&ls);
+			if (!lit) {
+				err = REG_ESPACE;
+				goto parse_bracket_done;
+			}
+			lit->code_min = '\n';
+			lit->code_max = '\n';
+			lit->position = -1;
+		}
 		/* Sort the array if we need to negate it. */
 		qsort(ls.a, ls.len, sizeof *ls.a, tre_compare_lit);
 		/* extra lit for the last negated range */

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-03-21 16:25 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-17 13:33 [PATCH] regex: fix newline matching with negated brackets Julien Ramseier
2017-03-18 15:00 ` Julien Ramseier
2017-03-18 15:39   ` Rich Felker
2017-03-19  3:30   ` Szabolcs Nagy
2017-03-21 16:25     ` Rich Felker

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).