Commit Graph

57 Commits

Author SHA1 Message Date
Sanjeev
cd0bbbf1ef gvariant: Fix minor memory leak on error handling path
(Commit message by Philip Withnall.)

https://bugzilla.gnome.org/show_bug.cgi?id=760022
2017-11-08 12:36:26 +00:00
Sébastien Wilmet
f9faac7661 glib/: LGPLv2+ -> LGPLv2.1+
All glib/*.{c,h} files have been processed, as well as gtester-report.

12 of those files are not licensed under LGPL:

	gbsearcharray.h
	gconstructor.h
	glibintl.h
	gmirroringtable.h
	gscripttable.h
	gtranslit-data.h
	gunibreak.h
	gunichartables.h
	gunicomp.h
	gunidecomp.h
	valgrind.h
	win_iconv.c

Some of them are generated files, some are licensed under a BSD-style
license and win_iconv.c is in the public domain.

Sub-directories inside glib/:

	deprecated/: processed in a previous commit
	glib-mirroring-tab/: already LGPLv2.1+
	gnulib/: not modified, the code is copied from gnulib
	libcharset/: a copy
	pcre/: a copy
	tests/: processed in a previous commit

https://bugzilla.gnome.org/show_bug.cgi?id=776504
2017-05-24 11:58:19 +02:00
Christian Hergert
18a33f72db introspection: use (nullable) or (optional) instead of (allow-none)
If we have an input parameter (or return value) we need to use (nullable).
However, if it is an (inout) or (out) parameter, (optional) is sufficient.

It looks like (nullable) could be used for everything according to the
Annotation documentation, but (optional) is more specific.
2016-11-22 14:14:37 -08:00
Benjamin Otte
611b079e3d gvariant: Add suggested braces
... around empty body in an 'else' statement
2016-11-20 23:50:56 +01:00
Hanno Boeck
aead1c046d GVariant text: fix scan of positional parameters
The scanning to find the end of a positional parameter designator in
GVariant text format (e.g. '%i') is currently broken in case the 'end'
pointer is not specified.

The scan is controlled by a somewhat complicated loop that needs to deal
properly with cases like (123, %(ii)) [where '%(ii)' is to be taken
together, but the final ')' not].

This loop missed the case where a format string passed to
g_variant_new_parsed() ended immediately after such a conversion, with a
nul character.  In this case the 'end' pointer is NULL, so the only way
we can find the end is by scanning for nul in the string.

In case of g_variant_new_parsed() [which is what this code was designed
to be used for], the bug is somewhat unlikely in practice: the only way
that a valid text-form GVariant could ever contain a positional
parameter replacement at the end of the string is if this positional
parameter were the only thing being returned.  In that case, the user
would likely have opted for a more direct approach.

Unfortunately, this code is also active in the tokenisation phase of
g_variant_parse(), before positional parameters are rejected as invalid
for that case.  Anyone who calls this function with a nul-terminated
string (and no end pointer) is vulnerable to a crash from malicious user
input.  This can be seen, at the very least with many commandline tools:

  $ dconf write /x '%i'
  Segmentation fault

We fix this problem by searching for the nul character in this case, in
addition to comparing the end pointer.

This problem is almost certainly limited to being able to cause crashes.
The loop in question only performs reads and, in the security-sensitive
case, the token will be quickly rejected after the loop is finished
(since it starts with '%' and the 'app' pointer is unset).  This is
further mitigated by the fact that there are no known cases of GVariant
text format being used as part of a protocol at a privilege barrier.
2016-02-22 08:48:44 -05:00
Philip Withnall
1b3dbec065 gvariant-parser: Clarify g_variant_parse() returns a non-floating ref
Unlike, say, g_variant_new(), which returns a floating reference.
g_variant_parse() returns a non-floating one, so must always have
g_variant_unref() called on the result.
2015-04-22 00:02:06 +01:00
Matthias Clasen
ab18d71e6f Minor documentation additions and corrections
Going for 100%.
2014-05-31 10:54:02 -04:00
Matthias Clasen
e7fd3de86d Eradicate links and xrefs
These are all replaced by markdown ref links.
2014-02-08 12:26:56 -05:00
Philip Withnall
2b8edf234c gvariant: Document the need to cast varargs when constructing GVariants
Slightly expand on the documentation about casting varargs when
constructing GVariants, and link to it from all the functions where it’s
a necessary consideration.

Add an example of passing flags to a ‘t’ type variable (guint64).
Assuming the flags enum does not have many members, the flag variable
will be 32 bits wide, and needs an explicit cast to be passed into
g_variant_new() as a 64-bit value.

https://bugzilla.gnome.org/show_bug.cgi?id=712837
2014-02-05 09:40:49 +00:00
Matthias Clasen
8945da08ac Make gtk-doc find another symbol 2014-02-01 20:53:50 -05:00
Matthias Clasen
adf892e96a Annotate all examples with their language
The C ones, at least.
2014-02-01 15:11:49 -05:00
Matthias Clasen
a4c33c6f8b Docs: Don't use the code tag 2014-01-31 22:05:04 -05:00
Matthias Clasen
17f51583a8 Docs: Convert examples to |[ ]| 2014-01-31 21:56:33 -05:00
Daniel Mustieles
078dbda148 Updated FSF's address 2014-01-31 14:31:55 +01:00
Matthias Clasen
93dad4808e Trivial typo fix 2014-01-01 17:59:22 -05:00
Ryan Lortie
56fb675d86 GVariant: add way to print context of parse errors
This was a feature intended from the very beginning that somehow never
got written.  It's a way to replace these sort of error messages out of
the GVariant parser:

  1-2,10-15:unable to find a common type

with something in the style of the Vala compiler:

  unable to find a common type:
    [1, 2, 3, 'str']
     ^        ^^^^^

https://bugzilla.gnome.org/show_bug.cgi?id=715028
2013-12-22 11:41:19 -05:00
Murray Cumming
eeac91f866 GVariant: Add g_variant_parse_error_quark()
Most GErrors, such as GSomethingError, have a function to get
their quark that looks like g_something_error_quark(),
so bindings (such as gtkmm) would expect GVariantParseError
to have g_variant_parse_error_quark(). Instead this had
g_variant_parser_get_error_quark().
This deprecates the old function and adds the correct one,
making life easier for gtkmm (and maybe others).

https://bugzilla.gnome.org/show_bug.cgi?id=708212
2013-12-22 11:27:16 -05:00
Matthias Clasen
3309055878 GVariantBuilder: small documentation fixes
The examples for g_variant_builder_add and
g_variant_builder_add_parsed were leaking a heap-allocated
builder. Fix that by converting the examples to stack
allocation.

https://bugzilla.gnome.org/show_bug.cgi?id=697585
https://bugzilla.gnome.org/show_bug.cgi?id=703522
2013-11-23 13:16:06 -05:00
Dan Winship
4b94c0831e Use 'dumb quotes' rather than `really dumb quotes'
Back in the far-off twentieth century, it was normal on unix
workstations for U+0060 GRAVE ACCENT to be drawn as "‛" and for U+0027
APOSTROPHE to be drawn as "’". This led to the convention of using
them as poor-man's ‛smart quotes’ in ASCII-only text.

However, "'" is now universally drawn as a vertical line, and "`" at a
45-degree angle, making them an `odd couple' when used together.

Unfortunately, there are lots of very old strings in glib, and also
lots of new strings in which people have kept up the old tradition,
perhaps entirely unaware that it used to not look stupid.

Fix this by just using 'dumb quotes' everywhere.

https://bugzilla.gnome.org/show_bug.cgi?id=700746
2013-05-21 11:23:22 -03:00
Ryan Lortie
57cd876321 GVariant parser: tweak lexer for format strings
Tweak the lexer so that '[%s]' gets parsed as three separate tokens,
instead of the closing bracket getting sucked into the format string.
2013-04-19 11:40:04 -04:00
Ryan Lortie
1d87c6c7f8 GVariant parser: turn two asserts into soft errors
Parsing wrongly-typed GVariant text format data is a well-defined
operation and it ought to result in a GError.  We do that for most
cases, but 'v' and 'ay' were being treated differently.  Fix those as
well.
2013-04-19 11:40:04 -04:00
Henrique Dante de Almeida
c219181cb2 Add G_GNUC_PRINTF on all functions with format strings
This allows compilation with clang without errors, even when
-Wformat-nonliteral is active (as long as there are no real cases of
non literal formatting).

https://bugzilla.gnome.org/show_bug.cgi?id=691608
2013-01-13 12:32:40 -05:00
Robert Ancell
59a24ab5a3 Use "Returns:" instead of the invalid "@returns" for annotating return values.
https://bugzilla.gnome.org/show_bug.cgi?id=673229
2012-11-01 14:47:25 +13:00
Cosimo Cecchi
4b602940e2 glib: don't quote quark names for G_DEFINE_QUARK 2012-08-28 13:16:24 -04:00
Matthias Clasen
369c7689c2 Add missing includes 2012-08-28 05:57:17 -04:00
Matthias Clasen
4f12f7c029 Use G_DEFINE_QUARK for GLib's own quarks
This commit just deals with glib/.
gobject/ and gio/ will be handled in separate commits.
2012-08-28 00:08:07 -04:00
Robert Ancell
4143842eb4 Add missing allow-none annotations for function parameters.
Found using:
find . -name '*.c' | xargs grep 'or %NULL' | grep ' \* @' | grep -v '@error' | grep -v allow-none
2012-03-31 20:34:28 +11:00
Ryan Lortie
0e0554bd62 GVariant: drop use of @returns 2011-11-21 11:33:21 -05:00
Ryan Lortie
740eacbfca static and #include fixups in glib/ 2011-10-16 21:41:15 -04:00
Simon McVittie
83afcc0a29 Escape percent sign in g_variant_new_parsed documentation
Strings matching /%[a-z]/ are special syntax for gtk-doc.

Bug: https://bugzilla.gnome.org/show_bug.cgi?id=632049
Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
Reviewed-by: Ryan Lortie <desrt@desrt.ca>
2011-10-04 12:38:32 +01:00
Ryan Lortie
37c740d509 Don't #include <glib/gslice.h> from gmem.h
It looks like this was done just to help people port from gmem to
gslice, but nothing in this header actually requires gslice.h to be
included.
2011-09-18 22:07:18 -04:00
Matthias Clasen
1b28408b8b Spelling fixes
Spelling fixes in comments and docs, provided by
Kjartan Maraas in bug 657336.
2011-08-29 14:49:32 -04:00
Ryan Lortie
23f684454f Drop dead code in GVariant parser
There is no chance that an unsigned integer value will be negative after
we do the bounds check that enforces its non-negativity.

Caught by Matthias running Coverity.
2011-06-14 22:45:06 -04:00
Ryan Lortie
85633f1182 GVariant parser: parse "inf", "-inf" and "nan" 2011-03-31 15:09:26 +05:30
Ryan Lortie
24ed841d6a GVariant parser: match strings without consuming
Add a new function that allows the parser to check that the current
token is equal to a given string without consuming the token.
Reimplement the 'consume' function in terms of the new function.
2011-03-31 14:45:50 +05:30
Ryan Lortie
f6dff49136 GVariant parser: fix memory error
In some cases it was possible for the GVariant parser to access past the
'limit' parameter.  This should fix that.
2011-03-31 14:14:59 +05:30
Ryan Lortie
d679a7659f GVariant parser: fix tuple type checking
Robert Ancell discovered that the GVariant parser messes up pretty badly
when the type of a tuple is specified and the tuple in the text being
parsed has a different number of elements (but otherwise matching child
types).

Check that we have the expected number of elements.

Closes #644786.
2011-03-15 01:32:22 -04:00
Ryan Lortie
ea4e3ea1cb GVariant: doc the format of g_variant_parse/print 2011-02-11 13:53:10 -05:00
Christian Persch
ce50df7e0e Better error reporting for g_variant_parse()
Add error codes, and use them when setting the GError.

Bug #634583.
2010-12-12 13:25:34 +01:00
Matthias Clasen
d95c6b8834 Remove redundant header inclusions 2010-09-03 20:12:09 -04:00
Matthias Clasen
3c0f77a499 Fix a typo 2010-07-31 02:07:38 -04:00
Matthias Clasen
dc8cf867c8 Don't return FALSE when a pointer is expected
Pointed out in bug 623956
2010-07-12 16:35:18 -04:00
Ryan Lortie
d44ae96cb1 GVariant: fix some more leaks in error cases 2010-07-10 19:15:59 -04:00
Ryan Lortie
90c49a0654 move the g_free() from the last commit down
It is needed for the error message...
2010-07-10 19:15:59 -04:00
Ryan Lortie
48a04f9303 GVariant: don't leak during type inferencing 2010-07-10 16:56:51 -04:00
Ryan Lortie
2e53e50244 glib/: fully remove galias hacks 2010-07-07 19:34:35 -04:00
Ryan Lortie
d9e90c3894 GVariant: improve bytestring support
- add G_VARIANT_TYPE_BYTESTRING, _BYTESTRING_ARRAY, _STRING_ARRAY

 - remove g_variant_{new,get}_byte_array functions

 - add g_variant_{new,get,dup}_bytestring{,_array} functions

 - remove undocumented support for deserialising arrays of objectpaths
   or signature strngs using g_variant_get_strv()

 - add and document new format strings '^ay', '^&ay', '^aay' and '^a&ay'

 - update GApplication to use the new API

 - update GSettings binding code to use the new API

 - add tests
2010-07-07 16:25:48 -04:00
Ryan Lortie
ede159ec45 Add enum type for GVariantParseError 2010-06-20 12:31:37 -04:00
Ryan Lortie
653921e17a g_variant_builder_add_parsed: fix type error
Problem caught by Juan A. Suarez Romero
2010-06-09 12:43:45 -04:00
Ryan Lortie
9562726f35 Bug 620350 - add g_variant_builder_add_parsed()
A delicious blend of g_variant_new_parsed() and
g_variant_builder_add_value().  Now available in a GLib near you.
2010-06-03 11:24:31 +02:00