diff --git a/ap/libc/glibc/glibc-2.23/posix/bug-regex19.c b/ap/libc/glibc/glibc-2.23/posix/bug-regex19.c
new file mode 100644
index 0000000..46d52ba
--- /dev/null
+++ b/ap/libc/glibc/glibc-2.23/posix/bug-regex19.c
@@ -0,0 +1,417 @@
+/* Regular expression tests.
+   Copyright (C) 2003-2016 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sys/types.h>
+#include <mcheck.h>
+#include <regex.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <locale.h>
+
+#define BRE RE_SYNTAX_POSIX_BASIC
+#define ERE RE_SYNTAX_POSIX_EXTENDED
+
+static struct test_s
+{
+  int syntax;
+  const char *pattern;
+  const char *string;
+  int start, res;
+} tests[] = {
+  {BRE, "\\<A", "CBAA", 0, -1},
+  {BRE, "\\<A", "CBAA", 2, -1},
+  {BRE, "A\\>", "CAAB", 1, -1},
+  {BRE, "\\bA", "CBAA", 0, -1},
+  {BRE, "\\bA", "CBAA", 2, -1},
+  {BRE, "A\\b", "CAAB", 1, -1},
+  {BRE, "\\<A", "AA", 0, 0},
+  {BRE, "\\<A", "C-AA", 2, 2},
+  {BRE, "A\\>", "CAA-", 1, 2},
+  {BRE, "A\\>", "CAA", 1, 2},
+  {BRE, "\\bA", "AA", 0, 0},
+  {BRE, "\\bA", "C-AA", 2, 2},
+  {BRE, "A\\b", "CAA-", 1, 2},
+  {BRE, "A\\b", "CAA", 1, 2},
+  {BRE, "\\<[A]", "CBAA", 0, -1},
+  {BRE, "\\<[A]", "CBAA", 2, -1},
+  {BRE, "[A]\\>", "CAAB", 1, -1},
+  {BRE, "\\b[A]", "CBAA", 0, -1},
+  {BRE, "\\b[A]", "CBAA", 2, -1},
+  {BRE, "[A]\\b", "CAAB", 1, -1},
+  {BRE, "\\<[A]", "AA", 0, 0},
+  {BRE, "\\<[A]", "C-AA", 2, 2},
+  {BRE, "[A]\\>", "CAA-", 1, 2},
+  {BRE, "[A]\\>", "CAA", 1, 2},
+  {BRE, "\\b[A]", "AA", 0, 0},
+  {BRE, "\\b[A]", "C-AA", 2, 2},
+  {BRE, "[A]\\b", "CAA-", 1, 2},
+  {BRE, "[A]\\b", "CAA", 1, 2},
+  {ERE, "\\b(A|!|.B)", "A=AC", 0, 0},
+  {ERE, "\\b(A|!|.B)", "=AC", 0, 1},
+  {ERE, "\\b(A|!|.B)", "!AC", 0, 1},
+  {ERE, "\\b(A|!|.B)", "=AB", 0, 1},
+  {ERE, "\\b(A|!|.B)", "DA!C", 0, 2},
+  {ERE, "\\b(A|!|.B)", "=CB", 0, 1},
+  {ERE, "\\b(A|!|.B)", "!CB", 0, 1},
+  {ERE, "\\b(A|!|.B)", "D,B", 0, 1},
+  {ERE, "\\b(A|!|.B)", "!.C", 0, -1},
+  {ERE, "\\b(A|!|.B)", "BCB", 0, -1},
+  {ERE, "(A|\\b)(A|B|C)", "DAAD", 0, 1},
+  {ERE, "(A|\\b)(A|B|C)", "DABD", 0, 1},
+  {ERE, "(A|\\b)(A|B|C)", "AD", 0, 0},
+  {ERE, "(A|\\b)(A|B|C)", "C!", 0, 0},
+  {ERE, "(A|\\b)(A|B|C)", "D,B", 0, 2},
+  {ERE, "(A|\\b)(A|B|C)", "DA?A", 0, 3},
+  {ERE, "(A|\\b)(A|B|C)", "BBC", 0, 0},
+  {ERE, "(A|\\b)(A|B|C)", "DA", 0, -1},
+  {ERE, "(!|\\b)(!|=|~)", "A!=\\", 0, 1},
+  {ERE, "(!|\\b)(!|=|~)", "/!=A", 0, 1},
+  {ERE, "(!|\\b)(!|=|~)", "A=A", 0, 1},
+  {ERE, "(!|\\b)(!|=|~)", "==!=", 0, 2},
+  {ERE, "(!|\\b)(!|=|~)", "==C~", 0, 3},
+  {ERE, "(!|\\b)(!|=|~)", "=~=", 0, -1},
+  {ERE, "(!|\\b)(!|=|~)", "~!", 0, -1},
+  {ERE, "(!|\\b)(!|=|~)", "~=~", 0, -1},
+  {ERE, "(\\b|A.)[ABC]", "AC", 0, 0},
+  {ERE, "(\\b|A.)[ABC]", "=A", 0, 1},
+  {ERE, "(\\b|A.)[ABC]", "DACC", 0, 1},
+  {ERE, "(\\b|A.)[A~C]", "AC", 0, 0},
+  {ERE, "(\\b|A.)[A~C]", "=A", 0, 1},
+  {ERE, "(\\b|A.)[A~C]", "DACC", 0, 1},
+  {ERE, "(\\b|A.)[A~C]", "B!A=", 0, 2},
+  {ERE, "(\\b|A.)[A~C]", "B~C", 0, 1},
+  {ERE, ".\\b.", "AA~", 0, 1},
+  {ERE, ".\\b.", "=A=", 0, 0},
+  {ERE, ".\\b.", "==", 0, -1},
+  {ERE, ".\\b.", "ABA", 0, -1},
+  {ERE, "[^k]\\b[^k]", "AA~", 0, 1},
+  {ERE, "[^k]\\b[^k]", "=A=", 0, 0},
+  {ERE, "[^k]\\b[^k]", "Ak~kA~", 0, 4},
+  {ERE, "[^k]\\b[^k]", "==", 0, -1},
+  {ERE, "[^k]\\b[^k]", "ABA", 0, -1},
+  {ERE, "[^k]\\b[^k]", "Ak~", 0, -1},
+  {ERE, "[^k]\\b[^k]", "k=k", 0, -1},
+  {ERE, "[^C]\\b[^C]", "AA~", 0, 1},
+  {ERE, "[^C]\\b[^C]", "=A=", 0, 0},
+  {ERE, "[^C]\\b[^C]", "AC~CA~", 0, 4},
+  {ERE, "[^C]\\b[^C]", "==", 0, -1},
+  {ERE, "[^C]\\b[^C]", "ABA", 0, -1},
+  {ERE, "[^C]\\b[^C]", "AC~", 0, -1},
+  {ERE, "[^C]\\b[^C]", "C=C", 0, -1},
+  {ERE, "\\<(A|!|.B)", "A=AC", 0, 0},
+  {ERE, "\\<(A|!|.B)", "=AC", 0, 1},
+  {ERE, "\\<(A|!|.B)", "!AC", 0, 1},
+  {ERE, "\\<(A|!|.B)", "=AB", 0, 1},
+  {ERE, "\\<(A|!|.B)", "=CB", 0, 1},
+  {ERE, "\\<(A|!|.B)", "!CB", 0, 1},
+  {ERE, "\\<(A|!|.B)", "DA!C", 0, -1},
+  {ERE, "\\<(A|!|.B)", "D,B", 0, -1},
+  {ERE, "\\<(A|!|.B)", "!.C", 0, -1},
+  {ERE, "\\<(A|!|.B)", "BCB", 0, -1},
+  {ERE, "(A|\\<)(A|B|C)", "DAAD", 0, 1},
+  {ERE, "(A|\\<)(A|B|C)", "DABD", 0, 1},
+  {ERE, "(A|\\<)(A|B|C)", "AD", 0, 0},
+  {ERE, "(A|\\<)(A|B|C)", "C!", 0, 0},
+  {ERE, "(A|\\<)(A|B|C)", "D,B", 0, 2},
+  {ERE, "(A|\\<)(A|B|C)", "DA?A", 0, 3},
+  {ERE, "(A|\\<)(A|B|C)", "BBC", 0, 0},
+  {ERE, "(A|\\<)(A|B|C)", "DA", 0, -1},
+  {ERE, "(!|\\<)(!|=|~)", "A!=\\", 0, 1},
+  {ERE, "(!|\\<)(!|=|~)", "/!=A", 0, 1},
+  {ERE, "(!|\\<)(!|=|~)", "==!=", 0, 2},
+  {ERE, "(!|\\<)(!|=|~)", "==C~", 0, -1},
+  {ERE, "(!|\\<)(!|=|~)", "A=A", 0, -1},
+  {ERE, "(!|\\<)(!|=|~)", "=~=", 0, -1},
+  {ERE, "(!|\\<)(!|=|~)", "~!", 0, -1},
+  {ERE, "(!|\\<)(!|=|~)", "~=~", 0, -1},
+  {ERE, "(\\<|A.)[ABC]", "AC", 0, 0},
+  {ERE, "(\\<|A.)[ABC]", "=A", 0, 1},
+  {ERE, "(\\<|A.)[ABC]", "DACC", 0, 1},
+  {ERE, "(\\<|A.)[A~C]", "AC", 0, 0},
+  {ERE, "(\\<|A.)[A~C]", "=A", 0, 1},
+  {ERE, "(\\<|A.)[A~C]", "DACC", 0, 1},
+  {ERE, "(\\<|A.)[A~C]", "B!A=", 0, 2},
+  {ERE, "(\\<|A.)[A~C]", "B~C", 0, 2},
+  {ERE, ".\\<.", "=A=", 0, 0},
+  {ERE, ".\\<.", "AA~", 0, -1},
+  {ERE, ".\\<.", "==", 0, -1},
+  {ERE, ".\\<.", "ABA", 0, -1},
+  {ERE, "[^k]\\<[^k]", "=k=A=", 0, 2},
+  {ERE, "[^k]\\<[^k]", "kk~", 0, -1},
+  {ERE, "[^k]\\<[^k]", "==", 0, -1},
+  {ERE, "[^k]\\<[^k]", "ABA", 0, -1},
+  {ERE, "[^k]\\<[^k]", "=k=", 0, -1},
+  {ERE, "[^C]\\<[^C]", "=C=A=", 0, 2},
+  {ERE, "[^C]\\<[^C]", "CC~", 0, -1},
+  {ERE, "[^C]\\<[^C]", "==", 0, -1},
+  {ERE, "[^C]\\<[^C]", "ABA", 0, -1},
+  {ERE, "[^C]\\<[^C]", "=C=", 0, -1},
+  {ERE, ".\\B.", "ABA", 0, 0},
+  {ERE, ".\\B.", "=BDC", 0, 1},
+  {ERE, "[^k]\\B[^k]", "kkkABA", 0, 3},
+  {ERE, "[^k]\\B[^k]", "kBk", 0, -1},
+  {ERE, "[^C]\\B[^C]", "CCCABA", 0, 3},
+  {ERE, "[^C]\\B[^C]", "CBC", 0, -1},
+  {ERE, ".(\\b|\\B).", "=~AB", 0, 0},
+  {ERE, ".(\\b|\\B).", "A=C", 0, 0},
+  {ERE, ".(\\b|\\B).", "ABC", 0, 0},
+  {ERE, ".(\\b|\\B).", "=~\\!", 0, 0},
+  {ERE, "[^k](\\b|\\B)[^k]", "=~AB", 0, 0},
+  {ERE, "[^k](\\b|\\B)[^k]", "A=C", 0, 0},
+  {ERE, "[^k](\\b|\\B)[^k]", "ABC", 0, 0},
+  {ERE, "[^k](\\b|\\B)[^k]", "=~kBD", 0, 0},
+  {ERE, "[^k](\\b|\\B)[^k]", "=~\\!", 0, 0},
+  {ERE, "[^k](\\b|\\B)[^k]", "=~kB", 0, 0},
+  {ERE, "[^C](\\b|\\B)[^C]", "=~AB", 0, 0},
+  {ERE, "[^C](\\b|\\B)[^C]", "A=C", 0, 0},
+  {ERE, "[^C](\\b|\\B)[^C]", "ABC", 0, 0},
+  {ERE, "[^C](\\b|\\B)[^C]", "=~CBD", 0, 0},
+  {ERE, "[^C](\\b|\\B)[^C]", "=~\\!", 0, 0},
+  {ERE, "[^C](\\b|\\B)[^C]", "=~CB", 0, 0},
+  {ERE, "\\b([A]|[!]|.B)", "A=AC", 0, 0},
+  {ERE, "\\b([A]|[!]|.B)", "=AC", 0, 1},
+  {ERE, "\\b([A]|[!]|.B)", "!AC", 0, 1},
+  {ERE, "\\b([A]|[!]|.B)", "=AB", 0, 1},
+  {ERE, "\\b([A]|[!]|.B)", "DA!C", 0, 2},
+  {ERE, "\\b([A]|[!]|.B)", "=CB", 0, 1},
+  {ERE, "\\b([A]|[!]|.B)", "!CB", 0, 1},
+  {ERE, "\\b([A]|[!]|.B)", "D,B", 0, 1},
+  {ERE, "\\b([A]|[!]|.B)", "!.C", 0, -1},
+  {ERE, "\\b([A]|[!]|.B)", "BCB", 0, -1},
+  {ERE, "([A]|\\b)([A]|[B]|[C])", "DAAD", 0, 1},
+  {ERE, "([A]|\\b)([A]|[B]|[C])", "DABD", 0, 1},
+  {ERE, "([A]|\\b)([A]|[B]|[C])", "AD", 0, 0},
+  {ERE, "([A]|\\b)([A]|[B]|[C])", "C!", 0, 0},
+  {ERE, "([A]|\\b)([A]|[B]|[C])", "D,B", 0, 2},
+  {ERE, "([A]|\\b)([A]|[B]|[C])", "DA?A", 0, 3},
+  {ERE, "([A]|\\b)([A]|[B]|[C])", "BBC", 0, 0},
+  {ERE, "([A]|\\b)([A]|[B]|[C])", "DA", 0, -1},
+  {ERE, "([!]|\\b)([!]|[=]|[~])", "A!=\\", 0, 1},
+  {ERE, "([!]|\\b)([!]|[=]|[~])", "/!=A", 0, 1},
+  {ERE, "([!]|\\b)([!]|[=]|[~])", "A=A", 0, 1},
+  {ERE, "([!]|\\b)([!]|[=]|[~])", "==!=", 0, 2},
+  {ERE, "([!]|\\b)([!]|[=]|[~])", "==C~", 0, 3},
+  {ERE, "([!]|\\b)([!]|[=]|[~])", "=~=", 0, -1},
+  {ERE, "([!]|\\b)([!]|[=]|[~])", "~!", 0, -1},
+  {ERE, "([!]|\\b)([!]|[=]|[~])", "~=~", 0, -1},
+  {ERE, "\\<([A]|[!]|.B)", "A=AC", 0, 0},
+  {ERE, "\\<([A]|[!]|.B)", "=AC", 0, 1},
+  {ERE, "\\<([A]|[!]|.B)", "!AC", 0, 1},
+  {ERE, "\\<([A]|[!]|.B)", "=AB", 0, 1},
+  {ERE, "\\<([A]|[!]|.B)", "=CB", 0, 1},
+  {ERE, "\\<([A]|[!]|.B)", "!CB", 0, 1},
+  {ERE, "\\<([A]|[!]|.B)", "DA!C", 0, -1},
+  {ERE, "\\<([A]|[!]|.B)", "D,B", 0, -1},
+  {ERE, "\\<([A]|[!]|.B)", "!.C", 0, -1},
+  {ERE, "\\<([A]|[!]|.B)", "BCB", 0, -1},
+  {ERE, "([A]|\\<)([A]|[B]|[C])", "DAAD", 0, 1},
+  {ERE, "([A]|\\<)([A]|[B]|[C])", "DABD", 0, 1},
+  {ERE, "([A]|\\<)([A]|[B]|[C])", "AD", 0, 0},
+  {ERE, "([A]|\\<)([A]|[B]|[C])", "C!", 0, 0},
+  {ERE, "([A]|\\<)([A]|[B]|[C])", "D,B", 0, 2},
+  {ERE, "([A]|\\<)([A]|[B]|[C])", "DA?A", 0, 3},
+  {ERE, "([A]|\\<)([A]|[B]|[C])", "BBC", 0, 0},
+  {ERE, "([A]|\\<)([A]|[B]|[C])", "DA", 0, -1},
+  {ERE, "([!]|\\<)([!=]|[~])", "A!=\\", 0, 1},
+  {ERE, "([!]|\\<)([!=]|[~])", "/!=A", 0, 1},
+  {ERE, "([!]|\\<)([!=]|[~])", "==!=", 0, 2},
+  {ERE, "([!]|\\<)([!=]|[~])", "==C~", 0, -1},
+  {ERE, "([!]|\\<)([!=]|[~])", "A=A", 0, -1},
+  {ERE, "([!]|\\<)([!=]|[~])", "=~=", 0, -1},
+  {ERE, "([!]|\\<)([!=]|[~])", "~!", 0, -1},
+  {ERE, "([!]|\\<)([!=]|[~])", "~=~", 0, -1},
+  {ERE, "(\\<|[A].)[ABC]", "AC", 0, 0},
+  {ERE, "(\\<|[A].)[ABC]", "=A", 0, 1},
+  {ERE, "(\\<|[A].)[ABC]", "DACC", 0, 1},
+  {ERE, "(\\<|[A].)[A~C]", "AC", 0, 0},
+  {ERE, "(\\<|[A].)[A~C]", "=A", 0, 1},
+  {ERE, "(\\<|[A].)[A~C]", "DACC", 0, 1},
+  {ERE, "(\\<|[A].)[A~C]", "B!A=", 0, 2},
+  {ERE, "(\\<|[A].)[A~C]", "B~C", 0, 2},
+  {ERE, "^[^A]*\\bB", "==B", 0, 0},
+  {ERE, "^[^A]*\\bB", "CBD!=B", 0, 0},
+  {ERE, "[^A]*\\bB", "==B", 2, 2}
+};
+
+int
+do_one_test (const struct test_s *test, const char *fail)
+{
+  int res;
+  const char *err;
+  struct re_pattern_buffer regbuf;
+
+  re_set_syntax (test->syntax);
+  memset (&regbuf, '\0', sizeof (regbuf));
+  err = re_compile_pattern (test->pattern, strlen (test->pattern),
+			    &regbuf);
+  if (err != NULL)
+    {
+      printf ("%sre_compile_pattern \"%s\" failed: %s\n", fail, test->pattern,
+	      err);
+      return 1;
+    }
+
+  res = re_search (&regbuf, test->string, strlen (test->string),
+		   test->start, strlen (test->string) - test->start, NULL);
+  if (res != test->res)
+    {
+      printf ("%sre_search \"%s\" \"%s\" failed: %d (expected %d)\n",
+	      fail, test->pattern, test->string, res, test->res);
+      regfree (&regbuf);
+      return 1;
+    }
+
+  if (test->res > 0 && test->start == 0)
+    {
+      res = re_search (&regbuf, test->string, strlen (test->string),
+		       test->res, strlen (test->string) - test->res, NULL);
+      if (res != test->res)
+	{
+	  printf ("%sre_search from expected \"%s\" \"%s\" failed: %d (expected %d)\n",
+		  fail, test->pattern, test->string, res, test->res);
+	  regfree (&regbuf);
+	  return 1;
+	}
+    }
+
+  regfree (&regbuf);
+  return 0;
+}
+
+static char *
+replace (char *p, char c)
+{
+  switch (c)
+    {
+      /* A -> A" */
+      case 'A': *p++ = '\xc3'; *p++ = '\x84'; break;
+      /* B -> O" */
+      case 'B': *p++ = '\xc3'; *p++ = '\x96'; break;
+      /* C -> U" */
+      case 'C': *p++ = '\xc3'; *p++ = '\x9c'; break;
+      /* D -> a" */
+      case 'D': *p++ = '\xc3'; *p++ = '\xa4'; break;
+      /* ! -> MULTIPLICATION SIGN */
+      case '!': *p++ = '\xc3'; *p++ = '\x97'; break;
+      /* = -> EM DASH */
+      case '=': *p++ = '\xe2'; *p++ = '\x80'; *p++ = '\x94'; break;
+      /* ~ -> MUSICAL SYMBOL HALF NOTE */
+      case '~': *p++ = '\xf0'; *p++ = '\x9d'; *p++ = '\x85'; *p++ = '\x9e';
+      break;
+    }
+  return p;
+}
+
+int
+do_mb_tests (const struct test_s *test)
+{
+  int i, j;
+  struct test_s t;
+  const char *const chars = "ABCD!=~";
+  char repl[8], *p;
+  char pattern[strlen (test->pattern) * 4 + 1];
+  char string[strlen (test->string) * 4 + 1];
+  char fail[8 + sizeof ("UTF-8 ")];
+
+  t = *test;
+  t.pattern = pattern;
+  t.string = string;
+  strcpy (fail, "UTF-8 ");
+  for (i = 1; i < 128; ++i)
+    {
+      p = repl;
+      for (j = 0; j < 7; ++j)
+	if (i & (1 << j))
+	  {
+	    if (!strchr (test->pattern, chars[j])
+		&& !strchr (test->string, chars[j]))
+	      break;
+	    *p++ = chars[j];
+	  }
+      if (j < 7)
+	continue;
+      *p = '\0';
+
+      for (j = 0, p = pattern; test->pattern[j]; ++j)
+	if (strchr (repl, test->pattern[j]))
+	  p = replace (p, test->pattern[j]);
+	else if (test->pattern[j] == '\\' && test->pattern[j + 1])
+	  {
+	    *p++ = test->pattern[j++];
+	    *p++ = test->pattern[j];
+	  }
+	else
+	  *p++ = test->pattern[j];
+      *p = '\0';
+
+      t.start = test->start;
+      t.res = test->res;
+
+      for (j = 0, p = string; test->string[j]; ++j)
+	if (strchr (repl, test->string[j]))
+	  {
+	    char *d = replace (p, test->string[j]);
+	    if (test->start > j)
+	      t.start += d - p - 1;
+	    if (test->res > j)
+	      t.res += d - p - 1;
+	    p = d;
+	  }
+	else
+	  *p++ = test->string[j];
+      *p = '\0';
+
+      p = stpcpy (fail + strlen ("UTF-8 "), repl);
+      *p++ = ' ';
+      *p = '\0';
+
+      if (do_one_test (&t, fail))
+	return 1;
+    }
+  return 0;
+}
+
+int
+main (void)
+{
+  size_t i;
+  int ret = 0;
+
+  mtrace ();
+
+  for (i = 0; i < sizeof (tests) / sizeof (tests[0]); ++i)
+    {
+      if (setlocale (LC_ALL, "de_DE.ISO-8859-1") == NULL)
+	{
+	  puts ("setlocale de_DE.ISO-8859-1 failed");
+	  ret = 1;
+	}
+      ret |= do_one_test (&tests[i], "");
+      if (setlocale (LC_ALL, "de_DE.UTF-8") == NULL)
+	{
+	  puts ("setlocale de_DE.UTF-8 failed");
+	  ret = 1;
+	}
+      ret |= do_one_test (&tests[i], "UTF-8 ");
+      ret |= do_mb_tests (&tests[i]);
+    }
+
+  return ret;
+}
