You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
embedded null byte when connecting to sqlite database using a bytes object #84335
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:
assignee=Noneclosed_at=<Date2020-04-08.17:43:28.121>created_at=<Date2020-04-02.12:23:03.625>labels= ['extension-modules', 'invalid', 'type-bug', '3.8']
title='embedded null byte when connecting to sqlite database using a bytes object'updated_at=<Date2020-04-17.14:47:39.546>user='https://github.com/ferferga'
Hello. I think that I found a bug in how sqlite3 module handle bytes.
The connect function of sqlite3 accepts strings, FilePath objects and bytes. However, it's impossible for me to connect to bytes objects that are read from BufferedReaders. I always get:
"ValueError: embedded null byte"
This is my current code (byteDec is the BytesIO object):
Everything works flawlessly, so the BufferedReader that I have in-memory is not corrupted in any way, as it's readable from a file. I want to avoid writing to disk at all, so this is not a solution for me.
I attach to this issue a very basic proof of concept to understand the issue.
the first parameter of the connect function is described in documentation as follows:
database is a path-like object giving the pathname (absolute or relative to the current working directory) of the database file to be opened. You can use ":memory:" to open a database connection to a database that resides in RAM instead of on disk.
So, while it can be a bytes object, it's still would be a bytes object representing a file-path. It's not bytes object representing a file content of the database.
Activity
ferferga commentedon Apr 2, 2020
Hello. I think that I found a bug in how sqlite3 module handle bytes.
The connect function of sqlite3 accepts strings, FilePath objects and bytes. However, it's impossible for me to connect to bytes objects that are read from BufferedReaders. I always get:
"ValueError: embedded null byte"
This is my current code (byteDec is the BytesIO object):
==============================================
==============================================
That returns the "embedded null byte" error. However, if I do:
==============================================
==============================================
Everything works flawlessly, so the BufferedReader that I have in-memory is not corrupted in any way, as it's readable from a file. I want to avoid writing to disk at all, so this is not a solution for me.
I attach to this issue a very basic proof of concept to understand the issue.
I'm running Pyhton 3.8.2 amd64 on Windows 10 1909
ferferga commentedon Apr 8, 2020
bump?
SilentGhost commentedon Apr 8, 2020
Hi Fernando,
the first parameter of the connect function is described in documentation as follows:
So, while it can be a bytes object, it's still would be a bytes object representing a file-path. It's not bytes object representing a file content of the database.
Hope that helps.
ferferga commentedon Apr 17, 2020
Hello SilentGhost,
Okay, now I understand the difference and had my code working! Thank you very much for your answer and to all of you who help in making Python better.
(Wish I had more knowledge of it to help)
Have a nice day!