| /* Test case derived from Binutils/GDB's readline/readline/histexpand.c. |
| { dg-do compile } |
| { dg-options "-O2 -Wall" } */ |
| |
| char * |
| get_subst_pattern (char *str, int *iptr, int delimiter, int is_rhs, int *lenptr) |
| { |
| int si, i, j, k; |
| char *s; |
| |
| s = 0; |
| i = *iptr; |
| |
| for (si = i; str[si] && str[si] != delimiter; si++) |
| if (str[si] == '\\' && str[si + 1] == delimiter) |
| si++; |
| |
| if (si > i || is_rhs) |
| { |
| s = (char *)__builtin_malloc (si - i + 1); |
| for (j = 0, k = i; k < si; j++, k++) |
| { |
| /* Remove a backslash quoting the search string delimiter. */ |
| if (str[k] == '\\' && str[k + 1] == delimiter) |
| k++; |
| s[j] = str[k]; // { dg-bogus "-Wstringop-overflow" } |
| } |
| s[j] = '\0'; |
| if (lenptr) |
| *lenptr = j; |
| } |
| |
| return s; |
| } |