Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org Usertags: unblock
Please consider pre-approving the unblock package kamera There is a bug which causes that cameras that have a '/' in their names make the program crash (#685676). This upload just adds this patch to solve this problem. I'm attaching the debdiff, which is the patch + the new changelog entry. Kinds regards, Lisandro. unblock kamera/4:4.8.4-2 -- System Information: Debian Release: wheezy/sid APT prefers unstable APT policy: (990, 'unstable'), (500, 'testing'), (101, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: mips i386 Kernel: Linux 3.2.21+edid (SMP w/2 CPU cores) Locale: LANG=es_AR.UTF-8, LC_CTYPE=es_AR.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash
diff -Nru kamera-4.8.4/debian/changelog kamera-4.8.4/debian/changelog --- kamera-4.8.4/debian/changelog 2012-06-16 19:01:37.000000000 -0300 +++ kamera-4.8.4/debian/changelog 2012-08-23 19:07:41.000000000 -0300 @@ -1,3 +1,11 @@ +kamera (4:4.8.4-2) UNRELEASED; urgency=low + + * Team upload. + * Add a patch to avoid crashes in kameras which contain '/' in their names + (Closes: #685676). + + -- Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org> Thu, 23 Aug 2012 19:00:57 -0300 + kamera (4:4.8.4-1) unstable; urgency=low * Team upload. diff -Nru kamera-4.8.4/debian/patches/quote_unquote_path_components.patch kamera-4.8.4/debian/patches/quote_unquote_path_components.patch --- kamera-4.8.4/debian/patches/quote_unquote_path_components.patch 1969-12-31 21:00:00.000000000 -0300 +++ kamera-4.8.4/debian/patches/quote_unquote_path_components.patch 2012-08-23 19:05:39.000000000 -0300 @@ -0,0 +1,124 @@ +Author: Marcus Meissner <mar...@jet.franken.de> +Description: quote/unquote path components + This helps with cameras with / in their names, avoiding segfaults. +Author: Marcus Meissner <mar...@jet.franken.de> +Forwarded: not-needed +Origin: http://bugsfiles.kde.org/attachment.cgi?id=72002 + +--- + kioslave/kamera.cpp | 34 +++++++++++++++++++++------------- + 1 files changed, 21 insertions(+), 13 deletions(-) + +diff --git a/kioslave/kamera.cpp b/kioslave/kamera.cpp +index 9596b16..3f9e6e1 100644 +--- a/kioslave/kamera.cpp ++++ b/kioslave/kamera.cpp +@@ -3,6 +3,7 @@ + Copyright (C) 2001 The Kompany + 2001-2003 Ilya Konstantinov <kde-de...@future.shiny.co.il> + 2001-2008 Marcus Meissner <mar...@jet.franken.de> ++ 2012 Marcus Meissner <mar...@jet.franken.de> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +@@ -86,6 +87,9 @@ int kdemain(int argc, char **argv) + return 0; + } + ++static QString path_quote(QString path) { return path.replace("/","%2F").replace(" ","%20"); } ++static QString path_unquote(QString path) { return path.replace("%2F","/").replace("%20"," "); } ++ + KameraProtocol::KameraProtocol(const QByteArray &pool, const QByteArray &app) + : SlaveBase("camera", pool, app), + m_camera(NULL) +@@ -405,19 +409,19 @@ void KameraProtocol::split_url2camerapath(QString url, + components = url.split('/', QString::SkipEmptyParts); + if (components.size() == 0) + return; +- cam = components.takeFirst(); ++ cam = path_unquote(components.takeFirst()); + if (!cam.isEmpty()) { + camarr = cam.split('@'); +- camera = camarr.takeFirst(); +- port = camarr.takeLast(); ++ camera = path_unquote(camarr.takeFirst()); ++ port = path_unquote(camarr.takeLast()); + setCamera (camera, port); + } + if (components.size() == 0) { + directory = "/"; + return; + } +- file = components.takeLast(); +- directory = "/"+components.join("/"); ++ file = path_unquote(components.takeLast()); ++ directory = path_unquote("/"+components.join("/")); + } + + // Implements a regular stat() of a file / directory, returning all we know about it +@@ -440,10 +444,10 @@ void KameraProtocol::statRegular(const KUrl &xurl) + KIO::UDSEntry entry; + + QString xname = current_camera + "@" + current_port; +- entry.insert( KIO::UDSEntry::UDS_NAME, xname); ++ entry.insert( KIO::UDSEntry::UDS_NAME, path_quote(xname)); + entry.insert( KIO::UDSEntry::UDS_DISPLAY_NAME, current_camera); +- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE,S_IFDIR); +- entry.insert(KIO::UDSEntry::UDS_ACCESS,(S_IRUSR | S_IRGRP | S_IROTH)); ++ entry.insert( KIO::UDSEntry::UDS_FILE_TYPE,S_IFDIR); ++ entry.insert( KIO::UDSEntry::UDS_ACCESS,(S_IRUSR | S_IRGRP | S_IROTH)); + statEntry(entry); + finished(); + return; +@@ -645,7 +649,7 @@ void KameraProtocol::listDir(const KUrl &yurl) + } else { + xname = (*it)+"@"+m_cfgPath; + } +- entry.insert(KIO::UDSEntry::UDS_NAME,xname); ++ entry.insert(KIO::UDSEntry::UDS_NAME,path_quote(xname)); + // do not confuse regular users with the @usb... + entry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME,*it); + listEntry(entry, false); +@@ -658,7 +662,7 @@ void KameraProtocol::listDir(const KUrl &yurl) + entry.insert(KIO::UDSEntry::UDS_FILE_TYPE,S_IFDIR); + // do not confuse regular users with the @usb... + entry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME,portsit.value()); +- entry.insert(KIO::UDSEntry::UDS_NAME, portsit.value()+"@"+portsit.key()); ++ entry.insert(KIO::UDSEntry::UDS_NAME, path_quote(portsit.value()+"@"+portsit.key())); + + entry.insert(KIO::UDSEntry::UDS_ACCESS,(S_IRUSR | S_IRGRP | S_IROTH |S_IWUSR | S_IWGRP | S_IWOTH)); + listEntry(entry, false); +@@ -864,7 +868,9 @@ void KameraProtocol::translateTextToUDS(KIO::UDSEntry &udsEntry, const QString & + + udsEntry.insert(KIO::UDSEntry::UDS_FILE_TYPE,S_IFREG); + +- udsEntry.insert(KIO::UDSEntry::UDS_NAME,fn); ++ udsEntry.insert(KIO::UDSEntry::UDS_NAME,path_quote(fn)); ++ ++ udsEntry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME,fn); + + udsEntry.insert(KIO::UDSEntry::UDS_SIZE,strlen(text)); + +@@ -878,7 +884,8 @@ void KameraProtocol::translateFileToUDS(KIO::UDSEntry &udsEntry, const CameraFil + udsEntry.clear(); + + udsEntry.insert(KIO::UDSEntry::UDS_FILE_TYPE,S_IFREG); +- udsEntry.insert(KIO::UDSEntry::UDS_NAME,name); ++ udsEntry.insert(KIO::UDSEntry::UDS_NAME,path_quote(name)); ++ udsEntry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME,name); + + if (info.file.fields & GP_FILE_INFO_SIZE) { + udsEntry.insert(KIO::UDSEntry::UDS_SIZE,info.file.size); +@@ -909,7 +916,8 @@ void KameraProtocol::translateDirectoryToUDS(KIO::UDSEntry &udsEntry, const QStr + udsEntry.clear(); + + udsEntry.insert(KIO::UDSEntry::UDS_FILE_TYPE,S_IFDIR); +- udsEntry.insert(KIO::UDSEntry::UDS_NAME,dirname); ++ udsEntry.insert(KIO::UDSEntry::UDS_NAME,path_quote(dirname)); ++ udsEntry.insert(KIO::UDSEntry::UDS_DISPLAY_NAME, dirname); + udsEntry.insert(KIO::UDSEntry::UDS_ACCESS,S_IRUSR | S_IRGRP | S_IROTH |S_IWUSR | S_IWGRP | S_IWOTH | S_IXUSR | S_IXOTH | S_IXGRP); + udsEntry.insert(KIO::UDSEntry::UDS_MIME_TYPE, QString("inode/directory")); + } +-- +1.7.3.4 + diff -Nru kamera-4.8.4/debian/patches/series kamera-4.8.4/debian/patches/series --- kamera-4.8.4/debian/patches/series 1969-12-31 21:00:00.000000000 -0300 +++ kamera-4.8.4/debian/patches/series 2012-08-23 18:59:44.000000000 -0300 @@ -0,0 +1 @@ +quote_unquote_path_components.patch