Opened 6 years ago
Closed 6 years ago
#4165 closed defect (bug) (fixed)
Info regex is too greedy
| Reported by: |
|
Owned by: |
|
|---|---|---|---|
| Priority: | low | Milestone: | 2.3 |
| Component: | Administration | Version: | 2.1 |
| Severity: | normal | Keywords: | has-patch |
| Cc: |
Description
In the WordPress admin, under Write > Write Page there is a drop-down box for selecting the page template. When I create my own page templates and add them, the box lists them, but includes extra characters alongside the name. If I alter the regular expression used in get_page_templates() in the admin_functions.php on line 1247 file from:
preg_match( "|Template Name:(.*)|i", $template_data, $name );
to:
preg_match( "|Template Name:([^\*]*)|i", $template_data, $name );
It no longer includes the characters. I assume the preg_match statement is just matching too much and returning it as the template name. I'm attaching the two template files that exhibit this problem, as well as a screen-shot of what I'm seeing.
Attachments (1)
Change History (7)
comment:1
foolswisdom — 6 years ago
- Milestone changed from 2.4 to 2.3
- Keywords has-patch added
- Owner changed from anonymous to rob1n
- Status changed from new to assigned
The PREG "m" modifier treats the multi-line string's lines as each a string (see here). Thus, the $ would match the end of the line.
- Summary changed from Page template names include code to Info regex is too greedy

Would this line work instead?
Your line excludes asterisks from the match, whereas mine explicitly specifies the end of line outside the matching string. I don't know why yours continues to match beyond the end of the line, but this might work as well and still allow * characters in the Template Name.