]> git.ipfire.org Git - pakfire.git/commitdiff
_pakfire: archive: Raise proper exception when file could not be read
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 8 Dec 2021 16:03:48 +0000 (16:03 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 8 Dec 2021 16:03:48 +0000 (16:03 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/archive.c

index 665178635d4e063d2fdde8cb07b6cc992ee54714..ced521b8bb4c5cf9b06fc19f476127fcd562c059 100644 (file)
@@ -85,16 +85,19 @@ static PyObject* Archive_read(ArchiveObject* self, PyObject* args) {
        char* data = NULL;
        size_t data_size = 0;
 
-       int ret = pakfire_archive_read(self->archive, filename, &data, &data_size);
-       if (ret) {
-               free(data);
+       int r = pakfire_archive_read(self->archive, filename, &data, &data_size);
+       if (r) {
+               PyErr_SetFromErrno(PyExc_OSError);
+               return NULL;
+       }
 
+       // Return None if there was no data
+       if (!data)
                Py_RETURN_NONE;
-       }
 
-       // XXX This is not ideal since PyBytes_FromStringAndSize creates a
-       // copy of data.
+       // Create a copy of data and return it to the user
        PyObject* bytes = PyBytes_FromStringAndSize(data, data_size);
+
        free(data);
 
        return bytes;