Issue 33705: Unicode is normalised after keywords are checked for (original) (raw)

Issue33705

Created on 2018-05-31 04:53 by steven.daprano, last changed 2022-04-11 14:59 by admin.

Messages (2)
msg318250 - (view) Author: Steven D'Aprano (steven.daprano) * (Python committer) Date: 2018-05-31 04:53
There is a loophole in the Unicode normalisation which allows the creation of names matching keywords. class Spam: locals()['if'] = 1 Spam.𝐒𝐟 # U+1D422 U+1D41F # returns 1 Those two characters are 'MATHEMATICAL BOLD SMALL I' and 'MATHEMATICAL BOLD SMALL F'. They ought to be normalised to "if", which is a keyword. Of course Spam.if is a syntax error, and I believe Spam.𝐒𝐟 ought to be as well. Another example: py> globals()['for'] = 2 py> 𝐟or 2 I also asked about this here: https://mail.python.org/pipermail/python-dev/2018-May/153619.html
msg318251 - (view) Author: Steven D'Aprano (steven.daprano) * (Python committer) Date: 2018-05-31 04:54
Possibly the correct term is canonicalisation rather than normalisation, although I think the two are interchangeable.
History
Date User Action Args
2022-04-11 14:59:01 admin set github: 77886
2018-05-31 04:54:23 steven.daprano set messages: +
2018-05-31 04:53:08 steven.daprano create