Skip to content

Commit 7113708

Browse files
committed
Fix problems with validation of import statement parse trees.
This closes SF bug python#127271.
1 parent 1109db4 commit 7113708

1 file changed

Lines changed: 24 additions & 5 deletions

File tree

‎Modules/parsermodule.c‎

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1558,6 +1558,25 @@ validate_import_as_name(node *tree)
15581558
}
15591559

15601560

1561+
/* dotted_name: NAME ("." NAME)*
1562+
*/
1563+
static int
1564+
validate_dotted_name(node *tree)
1565+
{
1566+
int nch = NCH(tree);
1567+
int res = (validate_ntype(tree, dotted_name)
1568+
&& is_odd(nch)
1569+
&& validate_name(CHILD(tree, 0), NULL));
1570+
int i;
1571+
1572+
for (i = 1; res && (i < nch); i += 2) {
1573+
res = (validate_dot(CHILD(tree, i))
1574+
&& validate_name(CHILD(tree, i+1), NULL));
1575+
}
1576+
return res;
1577+
}
1578+
1579+
15611580
/* dotted_as_name: dotted_name [NAME NAME]
15621581
*/
15631582
static int
@@ -1568,9 +1587,9 @@ validate_dotted_as_name(node *tree)
15681587

15691588
if (res) {
15701589
if (nch == 1)
1571-
res = validate_ntype(CHILD(tree, 0), dotted_name);
1590+
res = validate_dotted_name(CHILD(tree, 0));
15721591
else if (nch == 3)
1573-
res = (validate_ntype(CHILD(tree, 0), dotted_name)
1592+
res = (validate_dotted_name(CHILD(tree, 0))
15741593
&& validate_name(CHILD(tree, 1), "as")
15751594
&& validate_name(CHILD(tree, 2), NULL));
15761595
else {
@@ -1601,12 +1620,12 @@ validate_import_stmt(node *tree)
16011620
res = validate_dotted_as_name(CHILD(tree, 1));
16021621
for (j = 2; res && (j < nch); j += 2)
16031622
res = (validate_comma(CHILD(tree, j))
1604-
&& validate_ntype(CHILD(tree, j + 1), dotted_name));
1623+
&& validate_dotted_as_name(CHILD(tree, j + 1)));
16051624
}
16061625
else if (res && (res = validate_name(CHILD(tree, 0), "from"))) {
16071626
res = ((nch >= 4) && is_even(nch)
1608-
&& validate_name(CHILD(tree, 2), "import")
1609-
&& validate_dotted_as_name(CHILD(tree, 1)));
1627+
&& validate_dotted_name(CHILD(tree, 1))
1628+
&& validate_name(CHILD(tree, 2), "import"));
16101629
if (nch == 4) {
16111630
if (TYPE(CHILD(tree, 3)) == import_as_name)
16121631
res = validate_import_as_name(CHILD(tree, 3));

0 commit comments

Comments
 (0)