[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [libextractor] 10/27: be more careful with memory allocatio
From: |
gnunet |
Subject: |
[GNUnet-SVN] [libextractor] 10/27: be more careful with memory allocation failures in gsf extractor, avoid calling g_free(NULL) |
Date: |
Sun, 15 Oct 2017 21:34:34 +0200 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository libextractor.
commit e0fba0ff1664c1762bd3367f1136ca3f9c9052f2
Author: Christian Grothoff <address@hidden>
AuthorDate: Sun Oct 15 20:12:53 2017 +0200
be more careful with memory allocation failures in gsf extractor, avoid
calling g_free(NULL)
---
src/plugins/gstreamer_extractor.c | 357 ++++++++++++++++++++++++++------------
src/plugins/ole2_extractor.c | 4 +-
2 files changed, 249 insertions(+), 112 deletions(-)
diff --git a/src/plugins/gstreamer_extractor.c
b/src/plugins/gstreamer_extractor.c
index 8bffd970..2f47adf0 100644
--- a/src/plugins/gstreamer_extractor.c
+++ b/src/plugins/gstreamer_extractor.c
@@ -1078,8 +1078,11 @@ send_structure_foreach (GQuark field_id,
/* This is a potential source of invalid characters */
/* And it also might attempt to serialize binary data - such as images. */
str = gst_value_serialize (value);
- g_free (str);
- str = NULL;
+ if (NULL != str)
+ {
+ g_free (str);
+ str = NULL;
+ }
break;
}
if (NULL != str)
@@ -1093,21 +1096,33 @@ send_structure_foreach (GQuark field_id,
named_tags[i].le_type,
EXTRACTOR_METAFORMAT_UTF8,
"text/plain",
(const char *) str, strlen (str) +
1);
- g_free (str);
- str = NULL;
+ if (NULL != str)
+ {
+ g_free (str);
+ str = NULL;
+ }
break;
}
}
if (NULL != str)
{
- gchar *senddata = g_strdup_printf ("%s=%s", field_name, str);
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer",
- EXTRACTOR_METATYPE_UNKNOWN,
EXTRACTOR_METAFORMAT_UTF8, "text/plain",
- (const char *) senddata,
- strlen (senddata) + 1);
- g_free (senddata);
+ gchar *senddata = g_strdup_printf ("%s=%s",
+ field_name,
+ str);
+ if (NULL != senddata)
+ {
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+ EXTRACTOR_METATYPE_UNKNOWN,
+ EXTRACTOR_METAFORMAT_UTF8,
+ "text/plain",
+ (const char *) senddata,
+ strlen (senddata) + 1);
+ g_free (senddata);
+ }
}
- g_free (str);
+ if (NULL != str)
+ g_free (str);
return ! ps->time_to_leave;
}
@@ -1141,10 +1156,17 @@ send_audio_info (GstDiscovererAudioInfo *info,
if (u > 0)
{
tmp = g_strdup_printf ("%u", u);
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer",
- EXTRACTOR_METATYPE_CHANNELS, EXTRACTOR_METAFORMAT_UTF8, "text/plain",
- (const char *) tmp, strlen (tmp) + 1);
- g_free (tmp);
+ if (NULL != tmp)
+ {
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+ EXTRACTOR_METATYPE_CHANNELS,
+ EXTRACTOR_METAFORMAT_UTF8,
+ "text/plain",
+ (const char *) tmp,
+ strlen (tmp) + 1);
+ g_free (tmp);
+ }
if (ps->time_to_leave)
return TRUE;
}
@@ -1153,10 +1175,17 @@ send_audio_info (GstDiscovererAudioInfo *info,
if (u > 0)
{
tmp = g_strdup_printf ("%u", u);
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer",
- EXTRACTOR_METATYPE_SAMPLE_RATE, EXTRACTOR_METAFORMAT_UTF8, "text/plain",
- (const char *) tmp, strlen (tmp) + 1);
- g_free (tmp);
+ if (NULL != tmp)
+ {
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+ EXTRACTOR_METATYPE_SAMPLE_RATE,
+ EXTRACTOR_METAFORMAT_UTF8,
+ "text/plain",
+ (const char *) tmp,
+ strlen (tmp) + 1);
+ g_free (tmp);
+ }
if (ps->time_to_leave)
return TRUE;
}
@@ -1165,10 +1194,17 @@ send_audio_info (GstDiscovererAudioInfo *info,
if (u > 0)
{
tmp = g_strdup_printf ("%u", u);
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer",
- EXTRACTOR_METATYPE_AUDIO_DEPTH, EXTRACTOR_METAFORMAT_UTF8, "text/plain",
- (const char *) tmp, strlen (tmp) + 1);
- g_free (tmp);
+ if (NULL != tmp)
+ {
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+ EXTRACTOR_METATYPE_AUDIO_DEPTH,
+ EXTRACTOR_METAFORMAT_UTF8,
+ "text/plain",
+ (const char *) tmp,
+ strlen (tmp) + 1);
+ g_free (tmp);
+ }
if (ps->time_to_leave)
return TRUE;
}
@@ -1177,10 +1213,17 @@ send_audio_info (GstDiscovererAudioInfo *info,
if (u > 0)
{
tmp = g_strdup_printf ("%u", u);
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer",
- EXTRACTOR_METATYPE_AUDIO_BITRATE, EXTRACTOR_METAFORMAT_UTF8,
"text/plain",
- (const char *) tmp, strlen (tmp) + 1);
- g_free (tmp);
+ if (NULL != tmp)
+ {
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+ EXTRACTOR_METATYPE_AUDIO_BITRATE,
+ EXTRACTOR_METAFORMAT_UTF8,
+ "text/plain",
+ (const char *) tmp,
+ strlen (tmp) + 1);
+ g_free (tmp);
+ }
if (ps->time_to_leave)
return TRUE;
}
@@ -1189,10 +1232,17 @@ send_audio_info (GstDiscovererAudioInfo *info,
if (u > 0)
{
tmp = g_strdup_printf ("%u", u);
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer",
- EXTRACTOR_METATYPE_MAXIMUM_AUDIO_BITRATE, EXTRACTOR_METAFORMAT_UTF8,
"text/plain",
- (const char *) tmp, strlen (tmp) + 1);
- g_free (tmp);
+ if (NULL != tmp)
+ {
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+
EXTRACTOR_METATYPE_MAXIMUM_AUDIO_BITRATE,
+ EXTRACTOR_METAFORMAT_UTF8,
+ "text/plain",
+ (const char *) tmp,
+ strlen (tmp) + 1);
+ g_free (tmp);
+ }
if (ps->time_to_leave)
return TRUE;
}
@@ -1221,10 +1271,17 @@ send_video_info (GstDiscovererVideoInfo *info,
if ( (u > 0) && (u2 > 0) )
{
tmp = g_strdup_printf ("%ux%u", u, u2);
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer",
- EXTRACTOR_METATYPE_VIDEO_DIMENSIONS, EXTRACTOR_METAFORMAT_UTF8,
"text/plain",
- (const char *) tmp, strlen (tmp) + 1);
- g_free (tmp);
+ if (NULL != tmp)
+ {
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+ EXTRACTOR_METATYPE_VIDEO_DIMENSIONS,
+ EXTRACTOR_METAFORMAT_UTF8,
+ "text/plain",
+ (const char *) tmp,
+ strlen (tmp) + 1);
+ g_free (tmp);
+ }
if (ps->time_to_leave)
return TRUE;
}
@@ -1233,10 +1290,17 @@ send_video_info (GstDiscovererVideoInfo *info,
if (u > 0)
{
tmp = g_strdup_printf ("%u", u);
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer",
- EXTRACTOR_METATYPE_VIDEO_DEPTH, EXTRACTOR_METAFORMAT_UTF8, "text/plain",
- (const char *) tmp, strlen (tmp) + 1);
- g_free (tmp);
+ if (NULL != tmp)
+ {
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+ EXTRACTOR_METATYPE_VIDEO_DEPTH,
+ EXTRACTOR_METAFORMAT_UTF8,
+ "text/plain",
+ (const char *) tmp,
+ strlen (tmp) + 1);
+ g_free (tmp);
+ }
if (ps->time_to_leave)
return TRUE;
}
@@ -1246,10 +1310,17 @@ send_video_info (GstDiscovererVideoInfo *info,
if ( (u > 0) && (u2 > 0) )
{
tmp = g_strdup_printf ("%u/%u", u, u2);
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer",
- EXTRACTOR_METATYPE_FRAME_RATE, EXTRACTOR_METAFORMAT_UTF8, "text/plain",
- (const char *) tmp, strlen (tmp) + 1);
- g_free (tmp);
+ if (NULL != tmp)
+ {
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+ EXTRACTOR_METATYPE_FRAME_RATE,
+ EXTRACTOR_METAFORMAT_UTF8,
+ "text/plain",
+ (const char *) tmp,
+ strlen (tmp) + 1);
+ g_free (tmp);
+ }
if (ps->time_to_leave)
return TRUE;
}
@@ -1259,10 +1330,17 @@ send_video_info (GstDiscovererVideoInfo *info,
if ( (u > 0) && (u2 > 0) )
{
tmp = g_strdup_printf ("%u/%u", u, u2);
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer",
- EXTRACTOR_METATYPE_PIXEL_ASPECT_RATIO, EXTRACTOR_METAFORMAT_UTF8,
"text/plain",
- (const char *) tmp, strlen (tmp) + 1);
- g_free (tmp);
+ if (NULL != tmp)
+ {
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+
EXTRACTOR_METATYPE_PIXEL_ASPECT_RATIO,
+ EXTRACTOR_METAFORMAT_UTF8,
+ "text/plain",
+ (const char *) tmp,
+ strlen (tmp) + 1);
+ g_free (tmp);
+ }
if (ps->time_to_leave)
return TRUE;
}
@@ -1273,10 +1351,17 @@ send_video_info (GstDiscovererVideoInfo *info,
if (u > 0)
{
tmp = g_strdup_printf ("%u", u);
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer",
- EXTRACTOR_METATYPE_VIDEO_BITRATE, EXTRACTOR_METAFORMAT_UTF8,
"text/plain",
- (const char *) tmp, strlen (tmp) + 1);
- g_free (tmp);
+ if (NULL != tmp)
+ {
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+ EXTRACTOR_METATYPE_VIDEO_BITRATE,
+ EXTRACTOR_METAFORMAT_UTF8,
+ "text/plain",
+ (const char *) tmp,
+ strlen (tmp) + 1);
+ g_free (tmp);
+ }
if (ps->time_to_leave)
return TRUE;
}
@@ -1285,10 +1370,17 @@ send_video_info (GstDiscovererVideoInfo *info,
if (u > 0)
{
tmp = g_strdup_printf ("%u", u);
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer",
- EXTRACTOR_METATYPE_MAXIMUM_VIDEO_BITRATE, EXTRACTOR_METAFORMAT_UTF8,
"text/plain",
- (const char *) tmp, strlen (tmp) + 1);
- g_free (tmp);
+ if (NULL != tmp)
+ {
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+
EXTRACTOR_METATYPE_MAXIMUM_VIDEO_BITRATE,
+ EXTRACTOR_METAFORMAT_UTF8,
+ "text/plain",
+ (const char *) tmp,
+ strlen (tmp) + 1);
+ g_free (tmp);
+ }
if (ps->time_to_leave)
return TRUE;
}
@@ -1442,8 +1534,11 @@ send_tag_foreach (const GstTagList * tags,
buf = gst_sample_get_buffer (sample);
gst_buffer_map (buf, &mi, GST_MAP_READ);
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer", le_type,
- EXTRACTOR_METAFORMAT_BINARY, mime_type,
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+ le_type,
+ EXTRACTOR_METAFORMAT_BINARY,
+ mime_type,
(const char *) mi.data, mi.size);
gst_buffer_unmap (buf, &mi);
}
@@ -1564,7 +1659,8 @@ send_tag_foreach (const GstTagList * tags,
if ((0 != strcmp (tag, "extended-comment")) || !strchr (str, '='))
{
new_str = g_strdup_printf ("%s=%s", tag, str);
- g_free (str);
+ if (NULL != str)
+ g_free (str);
str = new_str;
}
}
@@ -1572,13 +1668,18 @@ send_tag_foreach (const GstTagList * tags,
default:
break;
}
- if (!skip)
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer", le_type,
- EXTRACTOR_METAFORMAT_UTF8, "text/plain",
- (const char *) str, strlen (str) + 1);
+ if ( (! skip) &&
+ (NULL != str) )
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+ le_type,
+ EXTRACTOR_METAFORMAT_UTF8,
+ "text/plain",
+ (const char *) str,
+ strlen (str) + 1);
}
-
- g_free (str);
+ if (NULL != str)
+ g_free (str);
g_value_unset (&val);
}
}
@@ -1730,24 +1831,39 @@ send_toc_tags_foreach (const GstTagList * tags,
/* This is a potential source of invalid characters */
/* And it also might attempt to serialize binary data - such as images. */
str = gst_value_serialize (&val);
- g_free (str);
- str = NULL;
+ if (NULL != str)
+ {
+ g_free (str);
+ str = NULL;
+ }
break;
}
- if (str != NULL)
+ if (NULL != str)
{
- topen = g_strdup_printf ("%*.*s<%s>", ps->toc_depth * 2,
- ps->toc_depth * 2, " ", tag);
- tclose = g_strdup_printf ("%*.*s</%s>\n", ps->toc_depth * 2,
- ps->toc_depth * 2, " ", tag);
-
- if (ps->toc_print_phase)
- ps->toc_pos += g_snprintf (&ps->toc[ps->toc_pos],
- ps->toc_length - ps->toc_pos, "%s%s%s", topen, str, tclose);
- else
- ps->toc_length += strlen (topen) + strlen (str) + strlen (tclose);
- g_free (topen);
- g_free (tclose);
+ topen = g_strdup_printf ("%*.*s<%s>",
+ ps->toc_depth * 2,
+ ps->toc_depth * 2, " ", tag);
+ tclose = g_strdup_printf ("%*.*s</%s>\n",
+ ps->toc_depth * 2,
+ ps->toc_depth * 2, " ",
+ tag);
+ if ( (NULL != topen) &&
+ (NULL != tclose) )
+ {
+ if (ps->toc_print_phase)
+ ps->toc_pos += g_snprintf (&ps->toc[ps->toc_pos],
+ ps->toc_length - ps->toc_pos,
+ "%s%s%s",
+ topen,
+ str,
+ tclose);
+ else
+ ps->toc_length += strlen (topen) + strlen (str) + strlen (tclose);
+ }
+ if (NULL != topen)
+ g_free (topen);
+ if (NULL != tclose)
+ g_free (tclose);
g_free (str);
}
g_value_unset (&val);
@@ -1780,11 +1896,17 @@ send_toc_foreach (gpointer data, gpointer user_data)
GST_TIME_FORMAT"\">\n", ps->toc_depth * 2, ps->toc_depth
* 2, " ",
gst_toc_entry_type_get_nick (entype), GST_TIME_ARGS
(start),
GST_TIME_ARGS (stop));
- if (ps->toc_print_phase)
- ps->toc_pos += g_snprintf (&ps->toc[ps->toc_pos], ps->toc_length -
ps->toc_pos, "%s", s);
- else
- ps->toc_length += strlen (s);
- g_free (s);
+ if (NULL != s)
+ {
+ if (ps->toc_print_phase)
+ ps->toc_pos += g_snprintf (&ps->toc[ps->toc_pos],
+ ps->toc_length - ps->toc_pos,
+ "%s",
+ s);
+ else
+ ps->toc_length += strlen (s);
+ g_free (s);
+ }
ps->toc_depth++;
tags = gst_toc_entry_get_tags (entry);
if (tags)
@@ -1808,13 +1930,18 @@ send_toc_foreach (gpointer data, gpointer user_data)
g_list_foreach (subentries, send_toc_foreach, ps);
ps->toc_depth--;
- s = g_strdup_printf ("%*.*s</%s>\n", ps->toc_depth * 2, ps->toc_depth * 2, "
",
+ s = g_strdup_printf ("%*.*s</%s>\n",
+ ps->toc_depth * 2,
+ ps->toc_depth * 2, " ",
gst_toc_entry_type_get_nick (entype));
- if (ps->toc_print_phase)
- ps->toc_pos += g_snprintf (&ps->toc[ps->toc_pos], ps->toc_length -
ps->toc_pos, "%s", s);
- else
- ps->toc_length += strlen (s);
- g_free (s);
+ if (NULL != s)
+ {
+ if (ps->toc_print_phase)
+ ps->toc_pos += g_snprintf (&ps->toc[ps->toc_pos], ps->toc_length -
ps->toc_pos, "%s", s);
+ else
+ ps->toc_length += strlen (s);
+ g_free (s);
+ }
}
@@ -1838,11 +1965,17 @@ send_info (GstDiscovererInfo * info,
if ((GST_CLOCK_TIME_IS_VALID (duration)) && (duration > 0))
{
s = g_strdup_printf ("%" GST_TIME_FORMAT, GST_TIME_ARGS (duration));
- if (s)
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer",
- EXTRACTOR_METATYPE_DURATION, EXTRACTOR_METAFORMAT_UTF8, "text/plain",
- (const char *) s, strlen (s) + 1);
- g_free (s);
+ if (NULL != s)
+ {
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+ EXTRACTOR_METATYPE_DURATION,
+ EXTRACTOR_METAFORMAT_UTF8,
+ "text/plain",
+ (const char *) s,
+ strlen (s) + 1);
+ g_free (s);
+ }
}
if (ps->time_to_leave)
@@ -1870,21 +2003,25 @@ send_info (GstDiscovererInfo * info,
ps->toc_print_phase = TRUE;
ps->toc_length += 1 + strlen (TOC_XML_HEADER);
ps->toc = g_malloc (ps->toc_length);
- ps->toc_pos = 0;
- ps->toc_pos += g_snprintf (&ps->toc[ps->toc_pos],
- ps->toc_length - ps->toc_pos,
- "%s",
- TOC_XML_HEADER);
- g_list_foreach (entries, &send_toc_foreach, ps);
- ps->toc[ps->toc_length - 1] = '\0';
- ps->time_to_leave = ps->ec->proc (ps->ec->cls, "gstreamer",
- EXTRACTOR_METATYPE_TOC,
- EXTRACTOR_METAFORMAT_C_STRING,
- "application/xml",
- (const char *) ps->toc,
- ps->toc_length);
- g_free (ps->toc);
- ps->toc = NULL;
+ if (NULL != ps->toc)
+ {
+ ps->toc_pos = 0;
+ ps->toc_pos += g_snprintf (&ps->toc[ps->toc_pos],
+ ps->toc_length - ps->toc_pos,
+ "%s",
+ TOC_XML_HEADER);
+ g_list_foreach (entries, &send_toc_foreach, ps);
+ ps->toc[ps->toc_length - 1] = '\0';
+ ps->time_to_leave = ps->ec->proc (ps->ec->cls,
+ "gstreamer",
+ EXTRACTOR_METATYPE_TOC,
+ EXTRACTOR_METAFORMAT_C_STRING,
+ "application/xml",
+ (const char *) ps->toc,
+ ps->toc_length);
+ g_free (ps->toc);
+ ps->toc = NULL;
+ }
}
}
diff --git a/src/plugins/ole2_extractor.c b/src/plugins/ole2_extractor.c
index 44a7ba91..20ac08f6 100644
--- a/src/plugins/ole2_extractor.c
+++ b/src/plugins/ole2_extractor.c
@@ -584,7 +584,7 @@ history_extract (GsfInput *stream,
size_t bsize;
bsize = strlen (author) + strlen (filename) + 512;
- if (NULL != (rbuf = malloc (bsize))
+ if (NULL != (rbuf = malloc (bsize)))
{
if (bsize >
snprintf (rbuf,
@@ -601,7 +601,7 @@ history_extract (GsfInput *stream,
}
free (rbuf);
}
- }
+ }
if (NULL != author)
free (author);
if (NULL != filename)
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [libextractor] 09/27: fix very hypothetical lack of 0-termination in ole2-extractor iff translation string was more than 10x as long as the English version, (continued)
- [GNUnet-SVN] [libextractor] 09/27: fix very hypothetical lack of 0-termination in ole2-extractor iff translation string was more than 10x as long as the English version, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 16/27: handle allocation failure in gstreamer plugin, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 11/27: be more conservative about result from ctime_r, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 14/27: add missing continue if max meta data was reached to avoid use after free, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 15/27: fix indentation, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 06/27: fix duration initialization in ffmpeg extractor (badly positioned #if), gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 13/27: seems some specs of c_time allow up to 71 bytes, so increase buffer size just to be safe, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 19/27: need isspace, not isblank for rpm extractor, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 17/27: handle allocation failure in PDF fdopen call, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 18/27: do not try to seek on SHM if we do not use SHM, even if (bad) plugin requests it, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 10/27: be more careful with memory allocation failures in gsf extractor, avoid calling g_free(NULL),
gnunet <=
- [GNUnet-SVN] [libextractor] 20/27: fix signed/unsigned comparison issue, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 21/27: handle IPC_shared_memory_set_ error, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 25/27: avoid NPE on empty value in grep-friendly printing, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 12/27: fix NPE in extract for 0-byte values, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 07/27: doxygen improvements, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 26/27: check return values from dup2(), gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 22/27: remove useless assignment, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 24/27: avoid calling free(NULL) on plugin load error, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 27/27: update gitignore, gnunet, 2017/10/15
- [GNUnet-SVN] [libextractor] 23/27: extra-carefully check return value of snprintf, gnunet, 2017/10/15