From d9614593493fe05d4d9eca513eccb75e2c5feb52 Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Sun, 8 Sep 2013 19:09:32 +0200 Subject: [PATCH] quvi: fix crashes on calls to quvi functions When a function returns a char*, it is necessary to tell it to ctypes, instead it returns an integer. On a 64 bits CPU, pointers can overflow the integer, and result to an unvalid pointer given to c_char_p. --- modules/quvi/backend.py | 3 +++ modules/quvi/quvi.py | 8 +++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/modules/quvi/backend.py b/modules/quvi/backend.py index 7891296c..ecf868a2 100644 --- a/modules/quvi/backend.py +++ b/modules/quvi/backend.py @@ -103,6 +103,9 @@ class QuviVideo(BaseVideo): if _id.startswith('http'): return _id + if not '.' in _id: + raise UserError('Please give an ID in form WEBSITE.ID (for example youtube.BaW_jenozKc). Supported websites are: %s' % ', '.join(cls.BACKENDS.keys())) + sub_backend, sub_id = _id.split('.', 1) try: return cls.BACKENDS[sub_backend] % sub_id diff --git a/modules/quvi/quvi.py b/modules/quvi/quvi.py index f7fbb4a0..27e1805f 100644 --- a/modules/quvi/quvi.py +++ b/modules/quvi/quvi.py @@ -64,7 +64,8 @@ class LibQuvi04(object): if self.lib is None: return False - version_str = c_char_p(self.lib.quvi_version(self.QUVI_VERSION)).value + self.lib.quvi_version.restype = c_char_p + version_str = self.lib.quvi_version(self.QUVI_VERSION) if version_str.startswith('v0.4'): return True else: @@ -108,8 +109,9 @@ class LibQuvi04(object): def _assert_ok(self, status): if status != self.QUVI_OK: - c_msg = c_char_p(self.lib.quvi_strerror(self.qh, status)) - raise QuviError(c_msg.value) + self.lib.quvi_strerror.restype = c_char_p + c_msg = self.lib.quvi_strerror(self.qh, status) + raise QuviError(c_msg) def _get_str(self, prop): c_value = c_char_p()