2017-05-22 13 views
9

Tôi đã phát hiện ra rằngPython lỗi: byte null trong dấu nhắc nhập

input('some\x00 text') 

sẽ nhắc nhở cho some thay vì some text.

Từ nguồn, tôi đã tìm ra rằng hàm này sử dụng hàm C PyOS_Readline, bỏ qua mọi thứ trong dấu nhắc sau byte NULL.

Từ PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt):

fprintf(stderr, "%s", prompt); 

https://github.com/python/cpython/blob/3.6/Python/bltinmodule.c#L1989 https://github.com/python/cpython/blob/3.6/Parser/myreadline.c#L251

Đây có phải là một lỗi hay có một lý do cho điều đó?

Vấn đề: http://bugs.python.org/issue30431

+0

Giống như một lỗi. – ivand58

+2

Nó gọi 'readline', và' readline' chính nó sử dụng kiểu dữ liệu chuỗi C NUL-chấm dứt, do đó, có rất ít Python * có thể * làm, khác hơn là hoàn toàn mã hóa lại 'readline'. – torek

+0

Cảm ơn bạn @torek. Tôi đã chỉnh sửa bài đăng –

Trả lời

1

Chức năng chữ ký khá nhiều đòi hỏi một NUL chấm dứt C-string, PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt), vì vậy không có nhiều hơn có thể được thực hiện về vấn đề này mà không thay đổi API và phá vỡ khả năng tương tác với GNU readline .

Các vấn đề liên quan