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
fix output string length for binascii.b2a_uu() #51950
Comments
binascii_b2a_uu() estimate the output string length using 2+bin_len*2. $ ./python -c "import binascii; binascii.b2a_uu('x')"
Debug memory block at address p=0x87da568: API 'o'
33 bytes originally requested
The 3 pad bytes at p-3 are FORBIDDENBYTE, as expected.
The 4 pad bytes at tail=0x87da589 are not all FORBIDDENBYTE (0xfb):
at tail+0: 0x0a *** OUCH
at tail+1: 0xfb
at tail+2: 0xfb
at tail+3: 0xfb
The block was made by call python/issues-test-cpython#25195 to debug malloc/realloc.
Data at p: 00 00 00 00 00 00 00 00 ... 00 00 00 21 3e 20 20 20
Fatal Python error: bad trailing pad byte
Abandon Current output string length estimation for input string 0..10: >>> [len(binascii.b2a_uu("x"*bin_len)) for bin_len in xrange(10)]
[2, 6, 6, 6, 10, 10, 10, 14, 14, 14]
>>> [(2+bin_len*2) for bin_len in xrange(10)]
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20] The estimation is correct for all lengths... except for bin_len=1. And
Example with length 0..10: >>> [len(binascii.b2a_uu("x"*bin_len)) for bin_len in xrange(10)]
[2, 6, 6, 6, 10, 10, 10, 14, 14, 14]
>>> [(2+(bin_len+2)*4//3) for bin_len in xrange(10)]
[4, 6, 7, 8, 10, 11, 12, 14, 15, 16] Attached patch uses the correct estimation. |
>>> [len(binascii.b2a_uu("x"*bin_len)) for bin_len in xrange(10)]
[2, 6, 6, 6, 10, 10, 10, 14, 14, 14]
>>> [(2+(bin_len+2)*4//3) for bin_len in xrange(10)]
[4, 6, 7, 8, 10, 11, 12, 14, 15, 16] How is this the correct estimation? The results are different. Try the following: >>> [(2+(bin_len+2)//3*4) for bin_len in xrange(10)]
[2, 6, 6, 6, 10, 10, 10, 14, 14, 14] |
The estimation have be bigger or equal, but not smaller.
Cool, it's not an estimation but the exact result :-) I prefer to leave the resize unchanged. The new patch uses your "estimation" ;-) |
The patch doesn't apply cleanly against trunk (due to today's commits I fear, sorry). |
Because of r77497 (issue #770). No problem, here is the new patch. I'm now using a git-svn repository to keep all my patches. It's much easier to update them to trunk ;-)
done |
Patch committed in r77506, r77507, r77508 and r77509. Thank you! |
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: