From 2e92567c716eede101e20003b550a3f22a7929a7 Mon Sep 17 00:00:00 2001 From: fake Date: Sun, 10 Oct 2004 11:29:14 +0000 Subject: [PATCH] fake: glibc 2.3.3: merge change from cvs, fixing the grep/egrep segfault issues [2004092119035416918] (https://www.rocklinux.net/submaster) git-svn-id: http://www.rocklinux.org/svn/rock-linux/trunk@4438 c5f82cb5-29bc-0310-9cd0-bff59a50e3bc --- .../glibc/glibc23/regcomp-fixes-post233.patch | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 package/base/glibc/glibc23/regcomp-fixes-post233.patch diff --git a/package/base/glibc/glibc23/regcomp-fixes-post233.patch b/package/base/glibc/glibc23/regcomp-fixes-post233.patch new file mode 100644 index 000000000..955e3dcc9 --- /dev/null +++ b/package/base/glibc/glibc23/regcomp-fixes-post233.patch @@ -0,0 +1,129 @@ +--- ./posix/regcomp.c 2003/12/16 06:10:51 1.68 ++++ ./posix/regcomp.c 2003/12/22 06:45:04 1.69 +@@ -1157,7 +1157,7 @@ + case OP_CLOSE_EQUIV_CLASS: + case OP_OPEN_CHAR_CLASS: + case OP_CLOSE_CHAR_CLASS: +- /* These must not be appeared here. */ ++ /* These must not appear here. */ + assert (0); + #endif + case END_OF_RE: +@@ -1336,8 +1336,6 @@ + if (BE (err != REG_NOERROR, 0)) + return err; + dfa->nexts[clone_node] = dfa->nexts[org_node]; +- if (clone_dest == -1) +- break; + ret = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (ret < 0, 0)) + return REG_ESPACE; +@@ -1375,8 +1373,6 @@ + err = duplicate_node (&clone_dest, dfa, org_dest, constraint); + if (BE (err != REG_NOERROR, 0)) + return err; +- if (clone_dest == -1) +- break; + ret = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (ret < 0, 0)) + return REG_ESPACE; +@@ -1395,16 +1391,13 @@ + err = duplicate_node (&clone_dest, dfa, org_dest, constraint); + if (BE (err != REG_NOERROR, 0)) + return err; +- if (clone_dest != -1) +- { +- ret = re_node_set_insert (dfa->edests + clone_node, clone_dest); +- if (BE (ret < 0, 0)) +- return REG_ESPACE; +- err = duplicate_node_closure (dfa, org_dest, clone_dest, +- root_node, constraint); +- if (BE (err != REG_NOERROR, 0)) +- return err; +- } ++ ret = re_node_set_insert (dfa->edests + clone_node, clone_dest); ++ if (BE (ret < 0, 0)) ++ return REG_ESPACE; ++ err = duplicate_node_closure (dfa, org_dest, clone_dest, ++ root_node, constraint); ++ if (BE (err != REG_NOERROR, 0)) ++ return err; + } + else + { +@@ -1419,8 +1412,6 @@ + err = duplicate_node (&clone_dest, dfa, org_dest, constraint); + if (BE (err != REG_NOERROR, 0)) + return err; +- if (clone_dest == -1) +- break; + ret = re_node_set_insert (dfa->edests + clone_node, clone_dest); + if (BE (ret < 0, 0)) + return REG_ESPACE; +@@ -1460,21 +1451,7 @@ + int *new_idx, org_idx; + unsigned int constraint; + { +- int dup_idx; +- +- if (dfa->nodes[org_idx].type == CHARACTER +- && (((constraint & NEXT_WORD_CONSTRAINT) +- && !dfa->nodes[org_idx].word_char) +- || ((constraint & NEXT_NOTWORD_CONSTRAINT) +- && dfa->nodes[org_idx].word_char))) +- { +- /* \W etc. can never match. Don't duplicate them, instead +- tell the caller they shouldn't be added to edests. */ +- *new_idx = -1; +- return REG_NOERROR; +- } +- +- dup_idx = re_dfa_add_node (dfa, dfa->nodes[org_idx], 1); ++ int dup_idx = re_dfa_add_node (dfa, dfa->nodes[org_idx], 1); + if (BE (dup_idx == -1, 0)) + return REG_ESPACE; + dfa->nodes[dup_idx].constraint = constraint; +@@ -2443,23 +2420,23 @@ + else + goto parse_dup_op_ebrace; + } +- if (BE (start == 0 && end == 0, 0)) ++ if (BE ((start == 0 && end == 0) || tree == NULL, 0)) + { +- /* We treat "{0}" and "{0,0}" as null string. */ ++ /* We treat "{0}" and "{0,0}" as null string. ++ Similarly "{0}{m,n}". */ + fetch_token (token, regexp, syntax); + return NULL; + } + + /* Extract "{n,m}" to "...{0,}". */ + elem = tree; +- for (i = 0; i < start; ++i) +- if (i != 0) +- { +- work_tree = duplicate_tree (elem, dfa); +- tree = create_tree (dfa, tree, work_tree, CONCAT, 0); +- if (BE (work_tree == NULL || tree == NULL, 0)) +- goto parse_dup_op_espace; +- } ++ for (i = 1; i < start; ++i) ++ { ++ work_tree = duplicate_tree (elem, dfa); ++ tree = create_tree (dfa, tree, work_tree, CONCAT, 0); ++ if (BE (work_tree == NULL || tree == NULL, 0)) ++ goto parse_dup_op_espace; ++ } + + if (end == -1) + { +@@ -2516,6 +2493,9 @@ + } + } + } ++ /* Treat "{0}*" etc. as "{0}". */ ++ else if (tree == NULL) ++ ; + else + { + tree = re_dfa_add_tree_node (dfa, tree, NULL, token);