-
-
Notifications
You must be signed in to change notification settings - Fork 30.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
test_ucn fails on OpenVMS - AssertionError #33947
Comments
test_ucn On OpenVMS, this test fails with the following error message: test test_ucn crashed -- exceptions.AssertionError: failed How can I diagnose this? |
Assigned to /F. zessin_5, look at test_ucn.py, if you want. The error in question is raised in only one place, verifying that "\N{blah}" raises UnicodeError when passed thru unicode-escape. Don't know why it's not on your platform. |
Here is the result from my debugging: UNICODEOBJECT.C
if (!ucnhash_CAPI->getcode(start, endBrace-start, &chr)) { calls: There are 4 'return's in getcode(). |
thanks for spotting the typo. just wish I knew why |
/F, I'm re-opening this until it's understood. It's clear that the test "worked" by accident before, yes? I stepped thru it ("N{blah}") in the debugger on Windows, under the old code. The reason it worked then is that, in PyUnicode_DecodeUnicodeEscape, the stack vrbl "chr" remained uninitialized all the way to label "store:", where a series of tests then checked this stack trash against various ranges. On Windows the trash happened to be the too-large-for-Unicode 0x0063f9dc, so triggered a different error by accident. Presumably under OpenVMS, the trash passed those tests by accident. Perhaps it's impossible to ever test stack trash now, but I'd feel better if the code covered its ass there anyway. You? |
Tim, "getcode" is supposed to set the "chr" value if it returns non-zero. After Uwe's fix, this is exactly what it does. But DecodeUnicodeEscape is rather messy; I've discovered a few other cases where it can misbehave. I'll do something about it asap. /F |
I just had in mind initializing chr to a known-bogus value and assert'ing it doesn't still have that value when it's finally referenced, so that a reoccurrence of this (or similar) bug won't pass by accident again. I understand that the code was intended to work as you say, but better safe than to trust that all future maintainers will figure that out when they're hacking in the middle of the 200+ lines of code across which this undocumented invariant is supposed to hold. Goodness, the code even initializes p, despite that it's set again within a mere dozen lines <wink>. |
Okay, I just checked in a new version of DecodeUnicodeEscape (still not 100% happy with it, but it's better than before) /F |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: