Index: head/devel/glib20/Makefile =================================================================== --- head/devel/glib20/Makefile (revision 460051) +++ head/devel/glib20/Makefile (revision 460052) @@ -1,111 +1,110 @@ # Created by: Vanilla I. Shu # $FreeBSD$ PORTNAME= glib -PORTVERSION= 2.50.2 -PORTREVISION= 7 +PORTVERSION= 2.50.3 PORTEPOCH= 1 CATEGORIES= devel MASTER_SITES= GNOME DIST_SUBDIR= gnome2 MAINTAINER= gnome@FreeBSD.org COMMENT= Some useful routines of C programming (current stable version) LICENSE= LGPL20 USES= tar:xz PORTSCOUT= limitw:1,even .if !defined(REFERENCE_PORT) LIB_DEPENDS+= libpcre.so:devel/pcre \ libffi.so:devel/libffi GNU_CONFIGURE= yes USE_LDCONFIG= yes # iconv:wchar_t - our iconv in base doesn't support utf-8 -> wchar_t (boooo) # (wchar_t is used by glibmm, rawtherapee triggered this) USES+= compiler:c11 gettext gmake gnome iconv:wchar_t libtool \ localbase pathfix perl5 pkgconfig python shebangfix USE_PYTHON= py3kplist CONFIGURE_ARGS= --disable-gtk-doc --with-html-dir=${PREFIX}/share/doc \ --disable-man --without-xml-catalog \ --enable-static=yes \ --with-pcre=system \ --disable-fam CONFIGURE_ENV= ac_cv_header_sys_inotify_h= INSTALL_TARGET= install-strip SHEBANG_FILES= */*.pl -LIBVERSION= 0.5000.2 +LIBVERSION= 0.5000.3 PLIST_SUB+= LIBVERSION=${LIBVERSION} glib_MAN= gtester.1 gtester-report.1 glib-gettextize.1 gio_MAN= gdbus.1 gsettings.1 gio-querymodules.1 \ glib-compile-schemas.1 gapplication.1 \ glib-compile-resources.1 gresource.1 gdbus-codegen.1 gobject_MAN= glib-genmarshal.1 glib-mkenums.1 gobject-query.1 OPTIONS_DEFINE= COLLATION_FIX DEBUG NLS OPTIONS_SUB= yes # libc collation was fixed by https://svnweb.freebsd.org/changeset/base/290494 COLLATION_FIX_DESC= Use ICU for UTF-8 string collation (if libc is broken) OPTIONS_EXCLUDE_FreeBSD_11= COLLATION_FIX OPTIONS_EXCLUDE_FreeBSD_12= COLLATION_FIX DEBUG_CONFIGURE_ON= --enable-debug=yes COLLATION_FIX_LIB_DEPENDS+= libicui18n.so:devel/icu COLLATION_FIX_EXTRA_PATCHES+= ${FILESDIR}/extra-patch-glib_Makefile.in \ ${FILESDIR}/extra-patch-glib_gunicollate.c # Disable it until someone can figure why it causes net-im/pidgin crashed. # http://www.freebsd.org/cgi/query-pr.cgi?pr=175930 see comment by ed@ #COLLATION_FIX_CONFIGURE_ENV+= CFLAGS="-D__STDC_ISO_10646__" .include # doesn't build yet CONFIGURE_ARGS+=--disable-dtrace .if empty(ICONV_LIB) CONFIGURE_ARGS+= --with-libiconv=no .else CONFIGURE_ARGS+= --with-libiconv=gnu .endif .if ${ARCH} == powerpc64 EXTRA_PATCHES= ${FILESDIR}/extra-arch-powerpc64 .endif # Let glib use asm code for implementing atomic ops on i386 and amd64. .if ${ARCH} == "i386" GLIB_ARCH= i486 .elif ${ARCH} == "amd64" GLIB_ARCH= x86_64 .else GLIB_ARCH= ${ARCH} .endif CONFIGURE_TARGET=${GLIB_ARCH}-portbld-freebsd${OSREL} post-patch: @${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|g ; \ s|/usr/share/locale/locale|${LOCALBASE}/share/locale/locale|g' \ ${WRKSRC}/glib/gutils.c @${REINPLACE_CMD} -e 's|inotify_support=yes|inotify_support=no| ; \ s|-Werror|| ; \ s|#define HAVE_SYS_INOTIFY_H 1||' ${WRKSRC}/configure post-install: @${MKDIR} ${STAGEDIR}${PREFIX}/share/GConf/gsettings @${MKDIR} ${STAGEDIR}${PREFIX}/lib/gio/modules .for m in glib gio gobject ${INSTALL_MAN} ${${m}_MAN:S|^|${WRKSRC}/docs/reference/${m}/|} \ ${STAGEDIR}${PREFIX}/man/man1 .endfor .include .endif Index: head/devel/glib20/distinfo =================================================================== --- head/devel/glib20/distinfo (revision 460051) +++ head/devel/glib20/distinfo (revision 460052) @@ -1,3 +1,3 @@ -TIMESTAMP = 1491129093 -SHA256 (gnome2/glib-2.50.2.tar.xz) = be68737c1f268c05493e503b3b654d2b7f43d7d0b8c5556f7e4651b870acfbf5 -SIZE (gnome2/glib-2.50.2.tar.xz) = 7582312 +TIMESTAMP = 1516046336 +SHA256 (gnome2/glib-2.50.3.tar.xz) = 82ee94bf4c01459b6b00cb9db0545c2237921e3060c0b74cff13fbc020cfd999 +SIZE (gnome2/glib-2.50.3.tar.xz) = 7589284 Index: head/devel/glib20/files/patch-bug778515 =================================================================== --- head/devel/glib20/files/patch-bug778515 (revision 460051) +++ head/devel/glib20/files/patch-bug778515 (nonexistent) @@ -1,55 +0,0 @@ -From e305fe971e4647d971428a772b7290b9c308a96f Mon Sep 17 00:00:00 2001 -From: Steven McDonald -Date: Sun, 12 Feb 2017 11:02:55 +1100 -Subject: gio: Always purge kqueue subs from missing list - -Previously, _kh_cancel_sub assumed that it only needed to call -_km_remove if sub did not exist in subs_hash_table. This is erroneous -because the complementary operation, _km_add_missing, can be called -from process_kqueue_notifications, in which context sub can *only* have -come from subs_hash_table. - -Since _km_remove is implemented using g_slist_remove, which is -documented to be a noop if the list does not contain the element to be -removed, it is safe to call _km_remove unconditionally here. - -https://bugzilla.gnome.org/show_bug.cgi?id=778515 ---- - gio/kqueue/kqueue-helper.c | 15 +++++---------- - 1 file changed, 5 insertions(+), 10 deletions(-) - -diff --git a/gio/kqueue/kqueue-helper.c b/gio/kqueue/kqueue-helper.c -index 4671396..d4e66cd 100644 ---- gio/kqueue/kqueue-helper.c -+++ gio/kqueue/kqueue-helper.c -@@ -498,22 +498,17 @@ _kh_add_sub (kqueue_sub *sub) - gboolean - _kh_cancel_sub (kqueue_sub *sub) - { -- gboolean missing = FALSE; -+ gboolean removed = FALSE; - g_assert (kqueue_socket_pair[0] != -1); - g_assert (sub != NULL); - -+ _km_remove (sub); -+ - G_LOCK (hash_lock); -- missing = !g_hash_table_remove (subs_hash_table, GINT_TO_POINTER (sub->fd)); -+ removed = g_hash_table_remove (subs_hash_table, GINT_TO_POINTER (sub->fd)); - G_UNLOCK (hash_lock); - -- if (missing) -- { -- /* If there were no fd for this subscription, file is still -- * missing. */ -- KH_W ("Removing subscription from missing"); -- _km_remove (sub); -- } -- else -+ if (removed) - { - /* fd will be closed in the kqueue thread */ - _kqueue_thread_remove_fd (sub->fd); --- -cgit v0.12 - Property changes on: head/devel/glib20/files/patch-bug778515 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/devel/glib20/files/patch-bug739424 =================================================================== --- head/devel/glib20/files/patch-bug739424 (revision 460051) +++ head/devel/glib20/files/patch-bug739424 (nonexistent) @@ -1,59 +0,0 @@ -From 22656f16c29591207c667362e2a42fd348fe8494 Mon Sep 17 00:00:00 2001 -From: Martin Pieuchot -Date: Fri, 28 Apr 2017 15:06:52 +0200 -Subject: [PATCH] kqueue: fix use-after-free of ``kqueue_sub''. - -Since ``kqueue_sub'' are not refcounted it is common to see a thread -freeing one of them while another thread is manipulating them. This -leads to crashs reported in: - https://bugzilla.gnome.org/show_bug.cgi?id=739424 - -To prevent such crash, make sure the threads are holding ``hash_lock'' -when manipulating such items. ---- - gio/kqueue/kqueue-helper.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/gio/kqueue/kqueue-helper.c b/gio/kqueue/kqueue-helper.c -index d4e66cd4d..84b9ef164 100644 ---- gio/kqueue/kqueue-helper.c -+++ gio/kqueue/kqueue-helper.c -@@ -291,10 +291,10 @@ process_kqueue_notifications (GIOChannel *gioc, - - G_LOCK (hash_lock); - sub = (kqueue_sub *) g_hash_table_lookup (subs_hash_table, GINT_TO_POINTER (n.fd)); -- G_UNLOCK (hash_lock); - - if (sub == NULL) - { -+ G_UNLOCK (hash_lock); - KH_W ("Got a notification for a deleted or non-existing subscription %d", - n.fd); - return TRUE; -@@ -336,6 +336,7 @@ process_kqueue_notifications (GIOChannel *gioc, - g_file_monitor_source_handle_event (source, mask, NULL, NULL, NULL, g_get_monotonic_time ()); - } - -+ G_UNLOCK (hash_lock); - return TRUE; - } - -@@ -451,13 +452,14 @@ _kh_start_watching (kqueue_sub *sub) - - G_LOCK (hash_lock); - g_hash_table_insert (subs_hash_table, GINT_TO_POINTER (sub->fd), sub); -- G_UNLOCK (hash_lock); - - _kqueue_thread_push_fd (sub->fd); - - /* Bump the kqueue thread. It will pick up a new sub entry to monitor */ - if (!_ku_write (kqueue_socket_pair[0], "A", 1)) - KH_W ("Failed to bump the kqueue thread (add fd, error %d)", errno); -+ G_UNLOCK (hash_lock); -+ - return TRUE; - } - --- -2.12.2 - Property changes on: head/devel/glib20/files/patch-bug739424 ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/devel/glib20/files/patch-gio_kqueue_gkqueuefilemonitor.c =================================================================== --- head/devel/glib20/files/patch-gio_kqueue_gkqueuefilemonitor.c (nonexistent) +++ head/devel/glib20/files/patch-gio_kqueue_gkqueuefilemonitor.c (revision 460052) @@ -0,0 +1,45 @@ +https://bugzilla.gnome.org/show_bug.cgi?id=739424 +https://bug739424.bugzilla-attachments.gnome.org/attachment.cgi?id=351191 + +--- gio/kqueue/gkqueuefilemonitor.c.orig 2018-01-15 21:00:32.535064000 +0100 ++++ gio/kqueue/gkqueuefilemonitor.c 2018-01-15 21:07:20.920334000 +0100 +@@ -29,6 +29,15 @@ + #include + #include + ++/* ++ * Because ``kqueue_sub'' are not refcounted, we need ++ * ensure no other thread is getting a reference to ++ * the element we want to free. ++ * ++ * That's why _kh_cancel_sub() must be called with ++ * this lock held to prevent a race. ++ */ ++G_LOCK_EXTERN (hash_lock); + + struct _GKqueueFileMonitor + { +@@ -80,9 +89,11 @@ g_kqueue_file_monitor_finalize (GObject *object) + + if (kqueue_monitor->sub) + { ++ G_LOCK (hash_lock); + _kh_cancel_sub (kqueue_monitor->sub); + _kh_sub_free (kqueue_monitor->sub); + kqueue_monitor->sub = NULL; ++ G_UNLOCK (hash_lock); + } + + if (kqueue_monitor->fallback) +@@ -181,9 +192,11 @@ g_kqueue_file_monitor_cancel (GFileMonitor *monitor) + + if (kqueue_monitor->sub) + { ++ G_LOCK (hash_lock); + _kh_cancel_sub (kqueue_monitor->sub); + _kh_sub_free (kqueue_monitor->sub); + kqueue_monitor->sub = NULL; ++ G_UNLOCK (hash_lock); + } + else if (kqueue_monitor->fallback) + { Property changes on: head/devel/glib20/files/patch-gio_kqueue_gkqueuefilemonitor.c ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: head/devel/glib20/files/patch-gio_kqueue_kqueue-helper.c =================================================================== --- head/devel/glib20/files/patch-gio_kqueue_kqueue-helper.c (nonexistent) +++ head/devel/glib20/files/patch-gio_kqueue_kqueue-helper.c (revision 460052) @@ -0,0 +1,81 @@ +This bug combines serveral patches: +https://bugzilla.gnome.org/show_bug.cgi?id=778515 +and +https://bugzilla.gnome.org/show_bug.cgi?id=739424 +https://bug739424.bugzilla-attachments.gnome.org/attachment.cgi?id=351191 + +--- gio/kqueue/kqueue-helper.c.orig 2018-01-15 21:22:08.234860000 +0100 ++++ gio/kqueue/kqueue-helper.c 2018-01-15 21:21:54.143656000 +0100 +@@ -43,7 +43,7 @@ static gboolean kh_debug_enabled = FALSE; + #define KH_W if (kh_debug_enabled) g_warning + + static GHashTable *subs_hash_table = NULL; +-G_LOCK_DEFINE_STATIC (hash_lock); ++G_LOCK_DEFINE (hash_lock); + + static int kqueue_descriptor = -1; + static int kqueue_socket_pair[] = {-1, -1}; +@@ -291,10 +291,10 @@ process_kqueue_notifications (GIOChannel *gioc, + + G_LOCK (hash_lock); + sub = (kqueue_sub *) g_hash_table_lookup (subs_hash_table, GINT_TO_POINTER (n.fd)); +- G_UNLOCK (hash_lock); + + if (sub == NULL) + { ++ G_UNLOCK (hash_lock); + KH_W ("Got a notification for a deleted or non-existing subscription %d", + n.fd); + return TRUE; +@@ -336,6 +336,7 @@ process_kqueue_notifications (GIOChannel *gioc, + g_file_monitor_source_handle_event (source, mask, NULL, NULL, NULL, g_get_monotonic_time ()); + } + ++ G_UNLOCK (hash_lock); + return TRUE; + } + +@@ -451,13 +452,14 @@ _kh_start_watching (kqueue_sub *sub) + + G_LOCK (hash_lock); + g_hash_table_insert (subs_hash_table, GINT_TO_POINTER (sub->fd), sub); +- G_UNLOCK (hash_lock); + + _kqueue_thread_push_fd (sub->fd); + + /* Bump the kqueue thread. It will pick up a new sub entry to monitor */ + if (!_ku_write (kqueue_socket_pair[0], "A", 1)) + KH_W ("Failed to bump the kqueue thread (add fd, error %d)", errno); ++ G_UNLOCK (hash_lock); ++ + return TRUE; + } + +@@ -498,22 +500,15 @@ _kh_add_sub (kqueue_sub *sub) + gboolean + _kh_cancel_sub (kqueue_sub *sub) + { +- gboolean missing = FALSE; ++ gboolean removed = FALSE; + g_assert (kqueue_socket_pair[0] != -1); + g_assert (sub != NULL); + +- G_LOCK (hash_lock); +- missing = !g_hash_table_remove (subs_hash_table, GINT_TO_POINTER (sub->fd)); +- G_UNLOCK (hash_lock); ++ _km_remove (sub); + +- if (missing) +- { +- /* If there were no fd for this subscription, file is still +- * missing. */ +- KH_W ("Removing subscription from missing"); +- _km_remove (sub); +- } +- else ++ removed = g_hash_table_remove (subs_hash_table, GINT_TO_POINTER (sub->fd)); ++ ++ if (removed) + { + /* fd will be closed in the kqueue thread */ + _kqueue_thread_remove_fd (sub->fd); Property changes on: head/devel/glib20/files/patch-gio_kqueue_kqueue-helper.c ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property