Reported-by: MIAOW Miao <guoyr_2013@hotmail.com>
Patch from: Henrik Carlqvist <hc981@poolhem.se>
Test from: Dmitry Goncharov <dgoncharov@users.sf.net>
* src/expand.c (recursively_expand_for_file): Check the variable name
before checking for equality so we don't overrun the buffer.
* tests/scripts/functions/shell: Add a test with a very long variable.
/* We could create a hash for the original environment for speed, but a
reasonably written makefile shouldn't hit this situation... */
for (ep = environ; *ep != 0; ++ep)
- if ((*ep)[nl] == '=' && strncmp (*ep, v->name, nl) == 0)
+ if (strncmp (*ep, v->name, nl) == 0 && (*ep)[nl] == '=')
return xstrdup ((*ep) + nl + 1);
/* If there's nothing in the parent environment, use the empty string.
'--no-print-directory -j2', ": 2\n: 1");
}
+if ($port_type eq 'UNIX') {
+ # sv 65172.
+ # Buffer overrun in recursively_expand_for_file on a variable with a long
+ # name.
+ my $v = "a1234567890" x 4 x 1000;
+ run_make_test("
+export $v=\$(shell echo hello)
+all:; \@echo \$\$$v
+", '', "hello\n");
+}
+
1;