From 0dee9c1b5cba45c2a6c0320021f88397c559312e Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Wed, 17 Mar 2010 20:41:42 +0000 Subject: prevent lambda functions from having docstrings #8164 --- Lib/test/test_compile.py | 4 ++++ Misc/NEWS | 2 ++ Python/compile.c | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py index 5be6508..1a2009c 100644 --- a/Lib/test/test_compile.py +++ b/Lib/test/test_compile.py @@ -353,6 +353,10 @@ if 1: f1, f2 = f() self.assertNotEqual(id(f1.func_code), id(f2.func_code)) + def test_lambda_doc(self): + l = lambda: "foo" + self.assertIsNone(l.__doc__) + def test_unicode_encoding(self): code = u"# -*- coding: utf-8 -*-\npass\n" self.assertRaises(SyntaxError, compile, code, "tmp", "exec") diff --git a/Misc/NEWS b/Misc/NEWS index 35fddeb..ffcdaa7 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,8 @@ What's New in Python 2.7 beta 1? Core and Builtins ----------------- +- Issue #8164: Don't allow lambda functions to have a docstring. + - Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt (SIGINT). If an error occurs while importing the site module, the error is printed and Python exits. Initialize the GIL before importing the site diff --git a/Python/compile.c b/Python/compile.c index 4ea2ee9..12210e1 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -1518,6 +1518,11 @@ compiler_lambda(struct compiler *c, expr_ty e) /* unpack nested arguments */ compiler_arguments(c, args); + + /* Make None the first constant, so the lambda can't have a + docstring. */ + if (compiler_add_o(c, c->u->u_consts, Py_None) < 0) + return 0; c->u->u_argcount = asdl_seq_LEN(args->args); VISIT_IN_SCOPE(c, expr, e->v.Lambda.body); -- cgit v0.12