summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Meissner <marcus@jet.franken.de>2021-10-02 11:59:30 +0200
committerMarcus Meissner <marcus@jet.franken.de>2021-10-02 12:01:36 +0200
commit8cc927c0cbc4127f2aec2771912b82cb336025c6 (patch)
tree3e040989a37aaa3eab6a594b7adb0fe51e2cbdcf
parent0f5195cc89d276cc0842c06ebc91eb1106520532 (diff)
downloadlibgphoto2-8cc927c0cbc4127f2aec2771912b82cb336025c6.tar.gz
fixed uninitialized memory access / potential crash
https://github.com/gphoto/libgphoto2/issues/721
-rw-r--r--camlibs/ptp2/library.c11
-rw-r--r--libgphoto2_port/configure.ac22
2 files changed, 27 insertions, 6 deletions
diff --git a/camlibs/ptp2/library.c b/camlibs/ptp2/library.c
index 1a02f361e..a196bf352 100644
--- a/camlibs/ptp2/library.c
+++ b/camlibs/ptp2/library.c
@@ -3211,11 +3211,14 @@ add_object_to_fs_and_path (Camera *camera, uint32_t handle, PTPObjectInfo *oi, C
PTPObject *ob;
PTPParams *params = &camera->pl->params;
- C_PTP (ptp_object_want (params, handle, 0, &ob));
+ C_PTP (ptp_object_want (params, handle, PTPOBJECT_OBJECTINFO_LOADED, &ob));
+
+ strcpy (path->name, ob->oi.Filename);
+ sprintf (path->folder,"/"STORAGE_FOLDER_PREFIX"%08lx/",(unsigned long)ob->oi.StorageID);
- strcpy (path->name, oi->Filename);
- sprintf (path->folder,"/"STORAGE_FOLDER_PREFIX"%08lx/",(unsigned long)oi->StorageID);
- get_folder_from_handle (camera, oi->StorageID, oi->ParentObject, path->folder);
+ get_folder_from_handle (camera, oi->StorageID, ob->oi.ParentObject, path->folder); /* might invalidate ob */
+
+ C_PTP (ptp_object_want (params, handle, PTPOBJECT_OBJECTINFO_LOADED, &ob));
/* delete last / or we get confused later. */
path->folder[ strlen(path->folder)-1 ] = '\0';
diff --git a/libgphoto2_port/configure.ac b/libgphoto2_port/configure.ac
index c9ab924b7..254cc172e 100644
--- a/libgphoto2_port/configure.ac
+++ b/libgphoto2_port/configure.ac
@@ -467,8 +467,26 @@ for x in ${IOLIB_LIST}; do
IOLIB_LTLIST="${IOLIB_LTLIST} ${x}.la"
done
AC_SUBST(IOLIB_LTLIST)
-AC_SUBST([iolibdir],["\$(libdir)/\$(PACKAGE_TARNAME)/\$(VERSION)"])
-AM_CPPFLAGS="$AM_CPPFLAGS -DIOLIBS=\\\"${iolibdir}\\\""
+
+dnl AC_SUBST([iolibdir],["\$(libdir)/\$(PACKAGE_TARNAME)/\$(VERSION)"])
+dnl AM_CPPFLAGS="$AM_CPPFLAGS -DIOLIBS=\\\"${iolibdir}\\\""
+
+dnl ---------------------------------------------------------------------------
+dnl iolib installation directory
+dnl ---------------------------------------------------------------------------
+AC_MSG_CHECKING([where to install io (port) libraries])
+AC_ARG_WITH([iolibdir],[AS_HELP_STRING(
+ [--with-iolibdir=<path>],
+ [install io (port) libraries in directory <path>])dnl
+],[
+ iolibdir="$withval"
+],[
+ iolibdir="\${libdir}/${PACKAGE_TARNAME}/${PACKAGE_VERSION}"
+])
+AC_MSG_RESULT([${iolibdir}])
+AC_SUBST([iolibdir])
+AM_CPPFLAGS="$AM_CPPFLAGS -DIOLIBS=\\\"\$(iolibdir)\\\""
+
sorted_iolib_list="$(echo "${IOLIB_LIST}" | tr ' ' '\n' | sort | ${SED} '/^$/d' | tr '\n' ' ' | ${SED} 's/ $//')"
AC_DEFINE_UNQUOTED([IOLIB_LIST], ["${sorted_iolib_list}"], [Define as string containing a list of the iolibs])